In programming, a loop is a fundamental control structure that allows a set of instructions to be repeatedly executed based on a specified condition. Loops are used to perform tasks iteratively, making it possible to automate repetitive actions and efficiently process large amounts of data.
It helps in keeping the code user-friendly and easy to understand. In Arduino programming, loops are essential to repeat instructions or code blocks multiple times. Loops play a crucial role in controlling the behavior of your microcontroller. The basic logic of the loop structure is given as follows:
In the loop, a condition and a conditional code are written inside the loop structure. If the condition evaluates to true, the conditional code is executed. As soon as the condition evaluates to false, the loop is terminated.
As we've got the idea of the loop construct, let's dive into the types of loops available.
While
loopIn Arduino programming, we prefer to use a loop when we don't know the number of iterations required. The While
loop basic syntax is given as:
while (condition) {conditional code (body);}
The number of iterations of the loop is dependent on the condition. The loop continues to execute the statements written in the body of the loop as long as the condition remains true.
The condition could be anything like while (x<5)
, in this case, the loop with terminate when the value of x is equal to or greater than 5. The central concept here is as long as the condition for the while
loop is true, the loop will execute.
Here, the given illustration shows the working of the while
loop.
void setup() {Serial.begin(9600); // Initialize serial communication at 9600 bpsint x = 0; // Define and initialize the variable x to 0// Use a while loop to repeat the print statement 5 timeswhile (x < 5) {Serial.println("Hello, welcome to Educative");x++; // Increment the value of x by 1 in each iterationdelay(1000); // Add a delay of 1 second between each print statement}}void loop() {//your code is written here}
In this code, we set up serial communication with the Serial.begin(9600)
line in the setup()
function. Then, we define and initialize the variable x
to 0. The while
loop prints "Hello, welcome to Educative" on the serial monitor five times. The loop runs as long as the condition x < 5
remains true. Within the loop, we increment the value of x
by 1 in each iteration using x++
, and a delay of 1 second (delay(1000)
) is added between each print statement to create a visible time gap between the messages.
It is to note that if the conditional variable is not incremented inside the while
loop, the value of the conditional variable stays the same, which leads to the execution of the loop infinitely. The loop never ends (terminates).
do while
loopThis is similar to while
loop, except for one thing. The conditional code is executed first, and then the condition is checked. The conditional code is written in the do
block. The critical thing to remember is the conditional code written in the do
block is executed at least once even though the condition fails.
Syntax of do while
is given as:
do {coditional code (body);} while (condition)
Here, the given illustration shows the working of the do while
loop.
void setup() {Serial.begin(9600); // Initialize serial communication at 9600 bpsint x = 0; // Define and initialize the variable x to 0do {Serial.println(x);delay(1000);x ++;} while (x < 5) ;}void loop() {}
In this code, we set up serial communication with the Serial.begin(9600)
line in the setup()
function. Then, we define and initialize the variable x
to 0. The while
loop prints the value of x
on the serial monitor five times. The loop runs as long as the condition x < 5
remains true. Within the loop, we increment the value of x
by 1 in each iteration using x++
, and a delay of 1 second (delay(1000)
) is added between each print statement to create a visible time gap between the messages.
Another implementation is shown to explain the working of the do while
loop in a better way.
void setup() {Serial.begin(9600); // Initialize serial communication at 9600 bpsint x = 10; // Define and initialize the variable x to 0do {Serial.println(x);delay(1000);x ++;} while (x < 5) ;}void loop() {}
In this code, it can be seen that the condition will eventually return false. The emphasis point is that the value of x is printed. This is because in the do while
the conditional block is executed before the condition is checked.
for
loopThis loop executes the conditional code a predetermined number of times. In this loop, the variable is initialized, the condition is written, and the incrementation of the condition variable is done. The syntax of for
loop is given as:
for(initialization; condition; iteration) {conditional code (body);}
Here, the given illustration shows the working of the for
loop.
const int ledPin = 13; // LED connected to digital pin 13void setup() {pinMode(ledPin, OUTPUT); // Set the LED pin as an output}void loop() {// Using a for loop to blink the LED 5 timesfor (int i = 0; i < 5; i++) {digitalWrite(ledPin, HIGH); // Turn the LED ondelay(500); // Wait for 0.5 secondsdigitalWrite(ledPin, LOW); // Turn the LED offdelay(500); // Wait for 0.5 seconds}}
In this example, the for
loop will run five times, blinking the LED on and off five times with a 0.5-second interval between each cycle.
A loop within a loop is called a nested loop. For nesting, we can have:
Nested while
loop
Nested for
loop
Mixed nested loop
Implementing mixed nested loops is shown to understand better how nested loops work.
void setup() {Serial.begin(9600); // Initialize serial communication at 9600 bpsint numRows = 5; // Number of rows in the star patternint currentRow = 1; // Initialize the current row// Mixed nested loop to create the star patternfor (currentRow = 1; currentRow <= numRows; currentRow++) {int numStars = currentRow; // Number of stars in the current rowwhile (numStars > 0) {Serial.print("*");numStars--;}delay(1000); // Add a delay of 1 second before printing the pattern againSerial.println(); // Move to the next line after printing each row}}void loop() {}
This Arduino code uses mixed nested loops to create a star pattern and print it on the serial monitor. Let’s break down the code step by step:
void setup()
: This is the setup function, which runs once when the Arduino starts. It initializes the serial communication at a baud rate of 9600 bps (bits per second) using Serial.begin(9600)
.
Variable initialization: Inside the setup function, two integer variables are declared and initialized:
int numRows = 5;
: This variable numRows
is set to 5, indicating that we want to create a star pattern with five rows.
int currentRow = 1;
: This variable currentRow
is initialized to 1, representing the current row of the star pattern being processed.
Nested loop: The code utilizes a mixed nested loop structure to create the star pattern. The outer for
loop is used to control the number of rows in the pattern. It runs from currentRow = 1
to currentRow <= numRows
, where currentRow
is incremented by one in each iteration.
Inner while
loop: Within the for
loop, there is a nested while
loop. The while
loop runs as long as numStars > 0
. In each iteration of the while
loop, it prints a *
character using Serial.print("*")
and decrements the numStars
variable by one using numStars--
. This nested while
loop ensures that the number of *
characters printed in each row correspond to the value of currentRow
, resulting in a right-angled triangle pattern.
Delay: After printing each row, a delay(1000)
is added, creating a 1-second pause before printing the next row. This delay lets you observe the pattern more clearly on the serial monitor.
Serial.println()
: After printing the *
characters for a row and adding the delay, Serial.println()
is used to move the cursor to the following line on the serial monitor, ensuring that each row is printed on a new line.
void loop()
: The loop
function is empty and does not contain any code. In Arduino, the loop
function runs continuously after the setup
function, but since there is no code inside the loop
function, it remains idle and does nothing.
This code uses mixed nested loops to generate a right-angled triangle star pattern with five rows. The pattern is printed on the serial monitor, with each row containing an increasing number of *
characters. The program continuously runs this pattern, with a 1-second delay between each row.
Loops are indispensable in Arduino programming, enabling efficient repetition and code optimization. The for
and while
loops offer versatility to control iterations, making projects more functional and concise.
Additionally, for a comprehensive understanding of control structures, you can find an Answer with examples and explanations in this link: If-Else and Switch-Case in Arduino. Combining these control structures with loops empowers Arduino developers to create versatile projects with enhanced decision-making capabilities and optimized performance.