Home ArduinoArduino Tutorials Tutorial: Arduino Loops

Tutorial: Arduino Loops

by shedboy71

In Arduino, loops are essential for running repetitive tasks. Loops allow you to execute a block of code multiple times based on a condition.

This tutorial explores the different types of loops available in Arduino, their syntax, and practical use cases with examples.

Table of Contents

1. What Are Loops?

Loops in Arduino allow you to:

  • Execute a block of code repeatedly.
  • Automate repetitive tasks like blinking an LED or reading sensor data.
  • Check conditions and decide whether to stop or continue looping.

2. Types of Loops in Arduino

2.1 for Loop

The for loop is used when you know the exact number of iterations in advance.

Syntax

for (initialization; condition; increment) {
  // Code to execute
}

Example: Blink LED 5 Times

const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < 5; i++) { // Loop 5 times
    digitalWrite(ledPin, HIGH); // Turn LED on
    delay(500);                 // Wait for 500ms
    digitalWrite(ledPin, LOW);  // Turn LED off
    delay(500);                 // Wait for 500ms
  }

  while (true); // Stop execution after blinking
}

2.2 while Loop

The while loop executes as long as the condition is true.

Syntax

while (condition) {
  // Code to execute
}

Example: Keep LED On While Button Is Pressed

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  while (digitalRead(buttonPin) == HIGH) { // Loop while button is pressed
    digitalWrite(ledPin, HIGH);           // Turn LED on
  }
  digitalWrite(ledPin, LOW);              // Turn LED off when button is released
}

2.3 do-while Loop

The do-while loop executes the block of code at least once, regardless of the condition.

Syntax

do {
  // Code to execute
} while (condition);

Example: Flash LED Once, Then Check Condition

const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int count = 1;

  do {
    digitalWrite(ledPin, HIGH); // Turn LED on
    delay(500);
    digitalWrite(ledPin, LOW);  // Turn LED off
    delay(500);

    count++;
  } while (count <= 5);         // Loop until count exceeds 5

  while (true); // Stop execution after blinking
}

3. Nested Loops

Loops can be nested inside other loops. This is useful for tasks like controlling multiple LEDs or creating patterns.

Example: Blink Multiple LEDs in a Sequence

const int ledPins[] = {2, 3, 4, 5}; // Define LED pins
const int numLeds = 4;

void setup() {
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT); // Set all pins as OUTPUT
  }
}

void loop() {
  for (int i = 0; i < numLeds; i++) { // Outer loop for LEDs
    for (int j = 0; j < 3; j++) {     // Inner loop to blink each LED 3 times
      digitalWrite(ledPins[i], HIGH);
      delay(300);
      digitalWrite(ledPins[i], LOW);
      delay(300);
    }
  }
}

4. Practical Examples

Example 4.1: Reading Sensor Data Continuously

const int sensorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(sensorPin); // Read sensor value
  Serial.println(sensorValue);            // Print value to Serial Monitor
  delay(1000);                            // Wait for 1 second
}

Example 4.2: LED Chase Sequence

const int ledPins[] = {2, 3, 4, 5};
const int numLeds = 4;

void setup() {
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
}

Example 4.3: Infinite Loop for Monitoring

const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  if (digitalRead(buttonPin) == HIGH) {
    Serial.println("Button Pressed!");
  }
}

5. Break and Continue in Loops

Break Statement

The break statement exits the current loop.

Example: Stop Loop After 3 Iterations

void setup() {
  Serial.begin(9600);

  for (int i = 1; i <= 5; i++) {
    if (i > 3) {
      break; // Exit loop
    }
    Serial.println(i);
  }
}

void loop() {
  // Empty
}

Continue Statement

The continue statement skips the current iteration and proceeds to the next.

Example: Skip Even Numbers

void setup() {
  Serial.begin(9600);

  for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
      continue; // Skip even numbers
    }
    Serial.println(i);
  }
}

void loop() {
  // Empty
}

6. Best Practices for Using Loops

  1. Avoid Infinite Loops in loop():
    • Ensure loop() continues running unless intended (e.g., while (true)).
  2. Use Delays Sparingly:
    • Avoid excessive delay() in loops, as it can block other processes.
  3. Optimize Conditions:
    • Simplify loop conditions for better readability and performance.
  4. Test Nested Loops:
    • Ensure nested loops don’t result in excessive computation.
  5. Use Breakpoints in Debugging:
    • Add Serial.print() statements to understand loop flow during debugging.

Conclusion

Loops are the backbone of Arduino programming, enabling repetitive tasks and controlling the flow of a program.

By mastering the various types of loops (for, while, and do-while) and their use cases, you can build efficient and powerful Arduino projects.

For more details, visit the official Arduino reference.

 

You may also like