C/C++ En Arduino: Ciclos While
by tomasdecamino in Circuits > Arduino
7625 Views, 31 Favorites, 0 Comments
C/C++ En Arduino: Ciclos While
En este instructable utilizaremos la estructura de ciclo while. Haremos un semáforo, igual que en este instructable, pero ahora haremos que el amarillo sea intermitente por un tiempo determinado, y no un número de veces determinado.
La estructura del while:
While (expression) {
// codigo }
Como ven es más simple que el for, y lo que evalúa es una expresión booleana, si esa expresión es verdadera, entonces el código es ejecutado, y si es falsa, se sale del ciclo (pueden ver mas sobre expresiones lógicas acá). Esa condición se le llama condición de parada, y debe cambiar en algún momento en el ciclo while, de lo contrario este loop correría de forma indefinida.
Materiales
Ocupamos:
- Arduino UNO
- Leds rojo, verde, amarillo
- 3x resitencias de 330 Ohmn
- Cables
- Breadboard
No ocuparemos el botón, son los mismos materiales que este instructable.
Conexiones
Las conexiones son las mismas que este instructable y vamos a aprovechar parte del código de allí también
Código
Acá vamos a mejorar el código explicado en el instructable de funciones. En ese instructable, que adjunto acá también con el nombre "IntroC_Fun.ino", se creaba una función para llamar al cambio de color, sin embargo el procedimiento para hacer la luz amarilla intermitente no era muy flexible. Ahora agregamos un ciclo while, para hacerlo más interesante.
En el código "IntroC_While.ino" agregamos las líneas 18 a la 23 (amarillo en la foto). En estas líneas:
while (millis()-lastMillis < 4000) { cambioColor(1); delay(200); allOff(); delay(200); }
La función millis() nos permite saber cuantos milisegundos han pasado desde que inició el Arduino a funcionar. En la línea 13 del código, asignamos a la variable lastMillis la lectura de millis(). Noten que además lastMillis es una variable tipo long, esto porque los milisegundos son muchos y ocupamos enteros largos para poder almacenar estos números tan grandes.
En el inicio de while, se hace la comparación de cuantos milisegundos han transcurrido desde que se asigno millis() a la variable lastMillis, mientras esta diferencia esté por debajo de 4000, es decir, hayan pasado menos de 4 segundos, lo que está dentro del bloque while será ejecutado. De esa forma nos garantizamos que va a ser intermitente el led amarillo por ese tiempo.
Funcionando
Cargue el código y listo.
Verán como ahora la luz amarilla es intermitente por el tiempo que indiquemos dentro del loop. De manera similar podemos cambiar el tiempo de la verde y la roja en la directiva #define TIME 2000, como se explica acá.