Muchas veces, las tareas del micro involucran la repetición una serie de veces de las mismas cosas.
Estas repeticiones pueden realizarse con unas estructuras de control que genéricamente se denominan bucles.
Una de las formas de hacer un bucle en lenguaje C es mediante la utilización de la estructura while. La estructura de control while se utiliza para repetir una serie de instrucciones.
Por ejemplo, el siguiente código haría que una luz parpadease siempre que la temperatura fuese alta.
while ( la_temperatura_es_alta == 1) {
parpadea();
}
Como puede verse, en una estructura while también se toman decisiones. Igual que con if, se evalúa el valor de la condición que se encuentra entre paréntesis y si es cierta se ejecuta el contenido de su bloque. Si no es cierta no se ejecuta el contenido de dicho bloque.
La diferencia entre if y while reside en que una vez que acaba el bloque de if el flujo del programa sigue hacia adelante, mientras que con while se vuelve a evaluar nuevamente la condición.
Tal y como está escrito el código anterior, el bucle se repetiría una y otra vez hasta que la variable la_temperatura_es_alta dejase de valer 1.
Por eso, con Arduino si la variable de la que depende el bucle procede de la lectura de un sensor, volveremos a leerlo dentro del mismo.
while ( la_temperatura_es_alta == 1) {
parpadea();
la_temperatura_es_alta = digitalWrite(PIN_DEL_SENSOR_TEMP);
}
Esto sería una aplicación de while para esperar. El sistema esperaría a que la temperatura dejase de ser alta para apagar el parpadeo de un led.
De esta misma manera, podríamos hacer un bucle que esperase que un usuario pulsase un pulsador.
while ( valor_del_pulsador == 0) { valor_del_pulsador = digitalWrite(PIN_DEL_PULSADOR);
}
Otra de las aplicaciones de while es repetir unas determinadas acciones un número de veces. Esto se hace con una variable auxiliar que lleva la cuenta de las veces que se han realizado las acciones.
Por ejemplo
int contador = 0; // INICIALIZACIÓN de la variable contador
while ( contador < 10) { // COMPARACIÓN del valor con el valor "tope"
parpadea();
contador = contador + 1; // CAMBIO DEL VALOR de la variable contador
}
Haría que se llamase 10 veces a la función parpadeo y luego se siguiese el flujo del programa en la siguiente instrucción tras este bloque.
Esta estrategia en tres pasos (inicialización, comparación, cambio de valor) se usa muy frecuentemente en programación. Tanto es así, que el lenguaje C ofrece una estructura de control para este cometido específico, la estructura for