03 - Language If Statement

# Arduino Language Learning: If Statement ## **What is an If Statement?** An **if statement** is a control structure that allows your Arduino to make decisions based on conditions. It's like giving your Arduino a brain that can think: "If this is true, then do that." This is fundamental to creating interactive and responsive programs. ### **Basic Concept** Think of an if statement like a traffic light: - **If** the light is **green** → **go** - **If** the light is **red** → **stop** Your Arduino can make similar decisions based on sensor readings, button presses, or any other conditions. ## **If Statement Syntax** ### **Basic Structure** ```cpp if (condition) { // Code to execute if condition is true } ``` ### **Components Explained** ### **1. if Keyword** - **Purpose**: Starts the conditional statement - **Required**: Always begins with **if** ### **2. Condition (in parentheses)** - **Purpose**: The test that determines true or false - **Examples**: **buttonPressed == HIGH**, **temperature > 25**, **lightLevel < 500** - **Result**: Must evaluate to **true** or **false** ### **3. Code Block (in curly braces)** - **Purpose**: Code that runs when condition is true - **Scope**: Everything between **{** and **}** ## **How If Statement Works** ### **Step-by-Step Process** ```cpp int buttonState = digitalRead(2); if (buttonState == LOW) { digitalWrite(13, HIGH); // Turn on LED } ``` ### **Execution Flow:** 1. **Read Button**: **digitalRead(2)** gets button state 2. **Check Condition**: **buttonState == LOW** (is button pressed?) 3. **If True**: Execute code inside **{ }** 4. **If False**: Skip code inside **{ }** 5. **Continue**: Program continues after if statement ## **Comparison Operators** ### **Equal to (==)** ```cpp if (buttonState == HIGH) { // Button is not pressed } ``` ### **Not equal to (!=)** ```cpp if (buttonState != HIGH) { // Button is pressed } ``` ### **Greater than (>)** ```cpp if (temperature > 25) { // Temperature is above 25°C } ``` ### **Less than (<)** ```cpp if (lightLevel < 300) { // Light level is below 300 } ``` ### **Greater than or equal to (>=)** ```cpp if (sensorValue >= 100) { // Sensor value is 100 or higher } ``` ### **Less than or equal to (<=)** ```cpp if (potValue <= 512) { // Potentiometer value is 512 or lower } ``` ## **If-Else Statements** ### **Basic If-Else Structure** ```cpp if (condition) { // Code if condition is true } else { // Code if condition is false } ``` ## **Logical Operators** ### **AND (&&)** ```cpp // Both conditions must be true if (temperature > 20 && humidity < 60) { Serial.println("Good conditions"); } ``` ### **OR (||)** ```cpp // Either condition can be true if (button1 == LOW || button2 == LOW) { Serial.println("A button is pressed"); } ``` ### **NOT (!)** ```cpp // Inverts the condition if (!buttonPressed) { Serial.println("Button is not pressed"); } ``` ## **If-Else If-Else Chains** ### **Multiple Conditions** ```cpp if (condition1) { // Code for condition1 } else if (condition2) { // Code for condition2 } else if (condition3) { // Code for condition3 } else { // Code if none of the above } ``` ## **Common Mistakes and Tips** ### **Mistake 1: Using = instead of ==** ```cpp // WRONG - This assigns value instead of comparing if (buttonState = HIGH) { // This will always be true! } // CORRECT - This compares values if (buttonState == HIGH) { // This checks if button is not pressed } ``` ### **Mistake 2: Missing Curly Braces** ```cpp // WRONG - Only first line is conditional if (buttonPressed) digitalWrite(13, HIGH); Serial.println("Button pressed"); // This always runs! // CORRECT - Use curly braces if (buttonPressed) { digitalWrite(13, HIGH); Serial.println("Button pressed"); } ``` ### **Mistake 3: Complex Conditions** ```cpp // WRONG - Hard to read if (temp > 20 && hum < 60 && light > 300 && !buttonPressed) { // Do something } // CORRECT - Break into multiple lines if (temp > 20 && hum < 60 && light > 300 && !buttonPressed) { // Do something } ``` ## **Best Practices** ### **1. Use Clear Variable Names** ```cpp // Good if (isButtonPressed) { turnOnLED(); } // Avoid if (b) { led(); } ``` ### **2. Use Constants for Magic Numbers** ```cpp // Good const int TEMP_THRESHOLD = 25; if (temperature > TEMP_THRESHOLD) { // Do something } // Avoid if (temperature > 25) { // Do something } ``` ### **3. Keep Conditions Simple** ```cpp // Good - Break complex conditions bool isGoodTemperature = temperature > 20 && temperature < 30; bool isGoodHumidity = humidity > 40 && humidity < 70; if (isGoodTemperature && isGoodHumidity) { // Do something } // Avoid - Complex inline condition if (temperature > 20 && temperature < 30 && humidity > 40 && humidity < 70) { // Do something } ``` ## **Summary** ### **Key Points:** 1. **If statements** make decisions based on conditions 2. **Comparison operators** test relationships between values 3. **Logical operators** combine multiple conditions 4. **If-else chains** handle multiple possible outcomes 5. **Watch out for**: **=** vs **==**, missing braces, complex conditions ### **When to Use If Statements:** - **User input**: Respond to button presses, switches - **Sensor readings**: React to temperature, light, sound levels - **State changes**: Detect transitions and events - **Range checking**: Validate values within acceptable limits - **Mode switching**: Change program behavior based on conditions ### **Next Steps:** - **Practice**: Try the examples with your Arduino - **Experiment**: Modify conditions and see what happens - **Combine**: Use if statements with loops and functions - **Explore**: Learn about switch statements for multiple conditions **If statements are the foundation of decision-making in Arduino programming. Master them, and you'll be able to create intelligent, responsive projects!**