Introduction: C/C++ En Arduino: Ciclos While

Picture of 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.

Step 1: Materiales

Picture of Materiales

Ocupamos:

  1. Arduino UNO
  2. Leds rojo, verde, amarillo
  3. 3x resitencias de 330 Ohmn
  4. Cables
  5. Breadboard

No ocuparemos el botón, son los mismos materiales que este instructable.

Step 2: Conexiones

Picture of Conexiones

Las conexiones son las mismas que este instructable y vamos a aprovechar parte del código de allí también

Step 3: Código

Picture of 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.

Step 4: Funcionando

Picture of 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á.

Comments

j4v1jh (author)2015-12-28

Muy bien explicado, se agradece! Ayuda mucho para quienes nos iniciamos. Saludos!

tomasdecamino (author)j4v1jh2015-12-29

Con gusto!

About This Instructable

2,465views

31favorites

License:

Bio: Músico, matemático, computación, ciencia... insolente y subversivo, pero siempre propositivo
More by tomasdecamino:Cómo Crear Un InstructableKit Ciencia Y Arte: Máquinas Que Aprenden SonidoLámpara De Inventor
Add instructable to: