05 - Language For Loop

# Arduino Language Learning: For Loop ## **What is a For Loop?** A **for loop** is a control structure that repeats a block of code a specific number of times. It's one of the most fundamental and powerful concepts in programming, allowing you to execute code repeatedly without writing it multiple times. ### **Basic Concept** Think of a for loop like counting: "Count from 1 to 10" or "Do this 5 times." Instead of writing the same code multiple times, you write it once and tell the computer how many times to repeat it. ## **For Loop Syntax** ### **Basic Structure** ```cpp for (initialization; condition; increment) { // Code to repeat } ``` ### **Components Explained** ### **1. Initialization** - **Purpose**: Set up the starting point - **Example**: **int i = 0;** - **When**: Runs once at the beginning ### **2. Condition** - **Purpose**: Check if the loop should continue - **Example**: **i < 10;** - **When**: Checked before each iteration ### **3. Increment** - **Purpose**: Change the counter variable - **Example**: **i++** (same as **i = i + 1**) - **When**: Runs at the end of each iteration ## **How For Loop Works** ### **Step-by-Step Process** ```cpp for (int i = 0; i < 5; i++) { Serial.println(i); } ``` ### **Execution Flow:** 1. **Initialize**: **int i = 0** (i starts at 0) 2. **Check Condition**: **i < 5** (is 0 < 5? Yes) 3. **Execute Code**: **Serial.println(i)** (prints 0) 4. **Increment**: **i++** (i becomes 1) 5. **Check Condition**: **i < 5** (is 1 < 5? Yes) 6. **Execute Code**: **Serial.println(i)** (prints 1) 7. **Continue...** until condition becomes false ### **Output:** ``` 0 1 2 3 4 ``` ## **Basic For Loop Examples** ### **Example 1: Counting Up** ```cpp void setup() { Serial.begin(9600); // Count from 0 to 9 for (int i = 0; i < 10; i++) { Serial.print("Count: "); Serial.println(i); } } void loop() { // Empty loop } ``` ### **Output:** ``` Count: 0 Count: 1 Count: 2 Count: 3 Count: 4 Count: 5 Count: 6 Count: 7 Count: 8 Count: 9 ``` ### **Example 2: Counting Down** ```cpp void setup() { Serial.begin(9600); // Count down from 10 to 1 for (int i = 10; i > 0; i--) { Serial.print("Countdown: "); Serial.println(i); } Serial.println("Blast off!"); } void loop() { // Empty loop } ``` ### **Output:** ``` Countdown: 10 Countdown: 9 Countdown: 8 Countdown: 7 Countdown: 6 Countdown: 5 Countdown: 4 Countdown: 3 Countdown: 2 Countdown: 1 Blast off! ``` ### **Example 3: Custom Step Size** ```cpp void setup() { Serial.begin(9600); // Count by 2s from 0 to 20 for (int i = 0; i <= 20; i += 2) { Serial.print("Even number: "); Serial.println(i); } } void loop() { // Empty loop } ``` ### **Output:** ``` Even number: 0 Even number: 2 Even number: 4 Even number: 6 Even number: 8 Even number: 10 Even number: 12 Even number: 14 Even number: 16 Even number: 18 Even number: 20 ``` ## **For Loops with Arrays** ### **Example 10: Array Processing** ```cpp void setup() { Serial.begin(9600); // Create an array of numbers int numbers[] = {10, 20, 30, 40, 50}; int sum = 0; // Calculate sum using for loop for (int i = 0; i < 5; i++) { sum = sum + numbers[i]; Serial.print("Adding "); Serial.print(numbers[i]); Serial.print(", Sum: "); Serial.println(sum); } Serial.print("Final sum: "); Serial.println(sum); } void loop() { // Empty loop } ``` ### **Output:** ``` Adding 10, Sum: 10 Adding 20, Sum: 30 Adding 30, Sum: 60 Adding 40, Sum: 100 Adding 50, Sum: 150 Final sum: 150 ``` ### **Example 11: Finding Maximum Value** ```cpp void setup() { Serial.begin(9600); int temperatures[] = {22, 25, 18, 30, 23, 27}; int maxTemp = temperatures[0]; // Start with first value // Find maximum temperature for (int i = 1; i < 6; i++) { if (temperatures[i] > maxTemp) { maxTemp = temperatures[i]; } } Serial.print("Maximum temperature: "); Serial.println(maxTemp); } void loop() { // Empty loop } ``` ## **Advanced For Loop Techniques** ### **Nested For Loops** ```cpp void setup() { Serial.begin(9600); // Create a multiplication table for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { Serial.print(i * j); Serial.print("\t"); // Tab for alignment } Serial.println(); // New line after each row } } void loop() { // Empty loop } ``` ### **Output:** ``` 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 ``` ### **For Loop with Break** ```cpp void setup() { Serial.begin(9600); // Find first number divisible by 7 for (int i = 1; i <= 100; i++) { if (i % 7 == 0) { Serial.print("First number divisible by 7: "); Serial.println(i); break; // Exit loop early } } } void loop() { // Empty loop } ``` ### **For Loop with Continue** ```cpp void setup() { Serial.begin(9600); // Print even numbers from 1 to 20 for (int i = 1; i <= 20; i++) { if (i % 2 != 0) { continue; // Skip odd numbers } Serial.print(i); Serial.print(" "); } Serial.println(); } void loop() { // Empty loop } ``` ## **Common Mistakes and Tips** ### **Mistake 1: Infinite Loop** ```cpp // WRONG - This will run forever! for (int i = 0; i < 10; i--) { // i-- makes i smaller, never reaches 10 Serial.println(i); } ``` ### **Fix:** ```cpp // CORRECT for (int i = 0; i < 10; i++) { // i++ makes i larger, eventually reaches 10 Serial.println(i); } ``` ### **Mistake 2: Off-by-One Error** ```cpp // WRONG - This will cause an error! int array[5] = {1, 2, 3, 4, 5}; for (int i = 0; i <= 5; i++) { // i <= 5 tries to access array[5] which doesn't exist Serial.println(array[i]); } ``` ### **Fix:** ```cpp // CORRECT int array[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { // i < 5 stops at array[4] Serial.println(array[i]); } ``` ### **Mistake 3: Variable Scope** ```cpp // WRONG - 'i' is not accessible outside the loop for (int i = 0; i < 10; i++) { // Do something } Serial.println(i); // Error: 'i' is not in scope ``` ### **Fix:** ```cpp // CORRECT int i; // Declare outside the loop for (i = 0; i < 10; i++) { // Do something } Serial.println(i); // Now 'i' is accessible ``` ## **Best Practices** ### **1. Use Descriptive Variable Names** ```cpp // Good for (int ledIndex = 0; ledIndex < NUM_LEDS; ledIndex++) { leds[ledIndex] = CRGB::Red; } // Avoid for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Red; } ``` ### **2. Use Constants for Magic Numbers** ```cpp // Good const int MAX_COUNT = 10; for (int i = 0; i < MAX_COUNT; i++) { // Do something } // Avoid for (int i = 0; i < 10; i++) { // Do something } ``` ### **3. Consider Performance** ```cpp // Good - Calculate once int arraySize = sizeof(numbers) / sizeof(numbers[0]); for (int i = 0; i < arraySize; i++) { // Do something } // Avoid - Calculate every iteration for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++) { // Do something } ``` ## **Summary** ### **Key Points:** 1. **For loops** repeat code a specific number of times 2. **Three parts**: initialization, condition, increment 3. **Common uses**: counting, array processing, LED control 4. **Watch out for**: infinite loops, off-by-one errors, variable scope ### **When to Use For Loops:** - **Known number of iterations**: When you know exactly how many times to repeat - **Array processing**: When working with arrays or lists - **Sequential operations**: When you need to do something in order - **Pattern generation**: When creating visual or audio patterns ### **Next Steps:** - **Practice**: Try the examples with your Arduino - **Experiment**: Modify the examples to see what happens - **Combine**: Use for loops with other programming concepts - **Explore**: Learn about while loops and do-while loops **For loops are a fundamental building block of programming. Master them, and you'll be able to create much more powerful and efficient Arduino programs!**