The Arduino while loop is another loop control structure that lets
you conditionally repeat a block of code. It is different from the for
loop discussed in the previous part of this programming course in that it does not have the initialiser or incrementer parts - you set these up outside the while loop.
The while keyword uses the expression (within the parentheses following the the while
keyword) as a control. If the expression is true (not zero) then the block
of code that follows the expression is repeated.
while ( <conditional expression> )
{
< Block of code to execute>
}
The only way to exit the loop is if the conditional expression
changes - that means you have to use a variable or input pin value that
allows the expression to become zero at some point. Otherwise you stay
in the loop!
There is an alternative form of the while loop called the do-while
loop and this is different to the while loop, only in the fact that it
always executes the block of code at least once regardless of the conditional expression.
do
{
< Block of code to execute>
} while ( <conditional expression> )
This is often useful when you must perform some code but then want to test to see if you should carry on repeating it.
In the for loop tutorial a variable was incremented 10 times and the value printed out. You can do the same operation using the while loop.
Here's the code from the for loop example
for (int i=0; i<10; i++) Serial.println(i);
Here's the new sketch for using the while keyword:
void setup (void) {
int i=0;
Serial.begin(9600);
Serial.println("Arduino while loop");
while(i<10) {
Serial.println(i);
i++;
}
}
void loop(void) {
}
Here is the output from the sketch
Arduino while loop 0 1 2 3 4 5 6 7 8 9
You can see that the same operation is acheived and you can also
see that there are the same elements that are used in the for loop:
Parameter |
Example |
Difference to for loop code. |
Initialiser: | int i=0; | Placed before the while keyword. |
Condition: | i<10; | Placed in parenthesis after the while keyword. |
Iterator: |
i++; | Placed within the body code. |
By moving the iterator (i++) you can change the output as a squence
from 1 to 10 - this is easier than the for loop logic as you don't need
to think of the conditional i.e. should it be >=10, <11 etc. In
fact the for loop for iterating 1 through 10 would be:
for (int i=1; i<=10; i++) Serial.println(i);
But you have to think about it!
Heres the while loop Sketch for values 1 through 10:
void setup (void) {
int i=0;
Serial.begin(9600);
Serial.println("Arduino while loop");
while(i<10) {
i++;
Serial.println(i);
}
}
void loop(void) {
}
The only change is to move the line i++ before the body code (here Serial.println).
While loop 1-10 output
Arduino while loop 1 2 3 4 5 6 7 8 9 10
Here the condition is tested at the end so the main body of code is always executed once.
void setup (void) {
int i=0;
Serial.begin(9600);
Serial.println("Arduino do while loop");
do {
i++;
Serial.println(i);
} while(i<10);
}
void loop(void) {
}
Here's the output of the above code
Arduino do while loop 1 2 3 4 5 6 7 8 9 10
The difference between the for loop and a while loop is that the for loop uses a specific variable in the initialiser and no other. The while loop can use any variable that has been defined before the while keyword.
The other difference is that using the do-while loop makes it easy to
perform the action always once (regardless of the conditional
expression) and you can not do that with the for loop.
You will come across situations where you want to perform the action always once, so remember to use the do while loop instead of trying to write out complicated flag conditions using other variables.
Q: There is no difference between while and for loops (T/F) ?
Q: While loops and for loops can never perform the same way (T/F)?
The one unusual thing you can do with the while construct is to create a never ending loop. This may sound ridiculous but processors don't know how to find the start and end of memory.
The processor just increments the program counter (this just points to code stored in flash memory). If there is no instruction not to stop (or jump somewhere else) it just keeps going until it runs out of memory.
In Arduino code, the loop() construct contains an infinite while loop.
An infinite while loop is just a while loop with the conditional set to true. As with the normal loop code begins again when the program reaches the last closing brace and jumps to the start brace. The difference here is that the conditional is always true so the program counter never exits from the loop.
Of course the reset button (or power on/ off) is the exit mechanism!
void setup (void) {
while(1) {
// Do something forever
}
}
void loop(void) { //This is now redundant!!!
}
Arduino oversampling is a technique to increase ADC resolution by reading more samples then decimating. It really does work!
A tutorial on using the ADS1115 precision 16 bit ADC for low power use.
Arduino Analog Output: How to create the most accurate PWM analog ouput and how to create analog PWM sine waves.
Find out how digitalWrite() works...Now use 17x Faster macros!
How to use the TCS230 (/TCS3200) Color detector chip and easily add it to any of your projects.
With the ADXL345 acellerometer you can detect up to 16g! You can also find out how to use it for tap detection and more.
New! Comments
Have your say about what you just read! Leave me a comment in the box below.