Cuando vimos el Serial Plotter, utilizamos la
sentencia while. While es una intrucción de control de flujo,
concretamente un bucle, y su significado como dijimos es "mientras" y su
sintaxis es
while ( condición)
{
Bloque de código a ejecutar
}
Cuando
arduino se encuentra la instrucción while, evaluará la condición y si
es verdadera ejecutará el código que hay dentro, cuando termine, volverá
a evaluar la condición y si sigue siendo verdadera, volverá a ejecutar
el código, y así repetidamente hasta que la condición deje de ser
verdadera, momento en el que ignorará el código interno y continuará con
el programa. Es importante que dentro de código exista una modificación
de la condición para que llegado el momento, la condición deje de
cumplirse, si no es así entrará en un bucle infinito, y se quedará
colgado. Si la condición resulta falsa en la primera evaluación, el
código interno del while no se ejecutará nunca, ya que se lo saltará.
A
veces resulta más natural, evaluar la condición que controla las
repeticiones del bucle, al final, en lugar de hacerlo al principio. Para
esto se tiene do...while, que se puede traducir como "hazlo y luego
mientras se cumpla la condición repite..." su sintaxis es la siguiente
do
{
bloque de código a ejecutar
} while (condición);
Fijáte
que después de la condición, se pone punto y coma, porque no va ninguna
llave de bloque de código. La diferencia principal entre while y
do...while, es que en el while, el código interno puede que no se
ejecute nunca, mientras que en el do...while, el código interno se
ejecuta al menos una vez, ya que primero hay que ejecutar el código y
luego comprobar la condición, que por supuesto tiene que ser verdadera
para que se produzca la repetición.
Aquí vemos un código ejemplo usando ambas estructuras
Hemos declarado cuatro variables, 3 pines de arduino y la variable a.
En
void setup() hemos establecido los tres pines de arduino como salidas, a
las que le hemos conectado 3 Leds verde, blanco y rojo.
En
el void loop() tenemos un while cuya condición es que a sea mayor que
cero y menor que diez, eso cuando empiece arduino no se va cumplir
porque a se inicializa con 20, así que saltará a la segunda
instrucción, que es un if, cuya condición es que a es igual a cero, y
como eso tampoco ocurre, se la salta y llega a do...while, así que lo
primero que hace arduino es encender el LEDVERDE, después del delay
apaga el LEDVERDE y decrementa en una unidad el valor de la variable a,
luego al final evalúa la condición y como es verdadera, repetirá
encendiendo y apagando el LEDVERDE y decrementando a la variable a,
hasta que la variable a no es mayor que 9, así que se acaba y comienza
el loop de nuevo, pero esta vez si se cumple la condición y se empiezan a
apagar y encender el LEDROJO y a decrementar a la variable a, y se
repetirá hasta que a sea menor que 1, en tal caso sale del bucle while y
ejecuta el if, como esta vez la condición del if es verdadera porque es
igual a cero, se enciende el LEDBLANCO dos segundo se apaga y reinica
la variable a en 20 y todo vuelve a empezar.
Aquí
hemos podido ver como el while se lo salta por no cumplir la condición,
se salta al if y empieza por el do, que ese no se lo puede saltar sino
que lo ejecuta al menos un vez, y luego decrementa el valor de la
variable y evalúa finalmente la condición.