Primero debes completar SEM04 – Semáforo de coches y peatones antes de ver esta lección

Tenemos un semáforo que se comporta de una forma muy similar a como lo hacen los semáforos con los que nos cruzamos cada día. Pero aún podemos mejorar su programación.

Cuando el semáforo de peatones está a punto de ponerse en rojo, el LED verde parpadea. Este estado lo hemos hecho encendiendo (HIGH) y apagando (LOW) el LED repetidas veces, suponiendo en nuestro código 9 líneas. ¿Y si te digo que esas 9 líneas pueden quedarse en la mitad?

Para ello vamos a usar el bucle for().

For()

¿En qué consiste? El bucle for() lo que hace es repetir un número determinado de veces un bloque de sentencias que se encuentren entre llaves.

¿Cuál es su sintaxis?

for (inicialización; condición; incremento/decremento) {

  sentencias;

}

Entre paréntesis, el bucle for() tiene tres partes:

  • Inicialización. Se da una vez al principio del for(), en él se inicializan las variables que van a emplearse en la condición.
  • Condición. En cada vuelta del for() se comprueba si se cumple o no la condición. Si se cumple, se ejecutan tanto las sentencias como el incremento/decremento. Si no se cumple el for() termina y el programa continua ejecutando las siguientes líneas.
  • Incremento/decremento. Se escribe x++ para que en cada vuelta del for() la variable inicializada y testeada se incremente en una unidad. Por el contrario, si queremos que la variable vaya decreciendo en cada vuelta, se escribe x--.

NOTA: Hasta ahora, hemos creado las variables al principio de nuestro programa, antes de la función void loop, estas variables se denominan globales y permanencen durante todo el progrmama . En el bucle for(), nos encontramos con que tenemos que crear una variable int dentro del for(), este tipo de variables se denominan locales y duran lo que dura el for(), es decir, se crea al inicio del for() y cuando este termina, la variable deja de existir.

Veamos un ejemplo de bucle for():

Contador (desde 0 hasta 9).

void setup() {
  Serial.begin(9600);
}

void loop() {
  for(int i=0;  i<10;  i++) {
    Serial.println(i);
    delay(1000);
  }
}

Cuenta atrás (desde 9 hasta 0).

void setup() {
  Serial.begin(9600);
}

void loop() {
  for(int i=9;  i<10;  i--) {
    Serial.println(i);
    delay(1000);
  }
}

¿Cómo implementamos el bucle for() en nuestro semáforo?

Hasta ahora, cuando el semáforo de peatones está a punto de ponerse en rojo el parpadeo lo hacemos así:

void loop() {
  digitalWrite(LED_VERDE_PEATON, HIGH);
  delay(5000);
  digitalWrite(LED_VERDE_PEATON, LOW);
  delay(200);
  digitalWrite(LED_VERDE_PEATON, HIGH);
  delay(200);
  digitalWrite(LED_VERDE_PEATON, LOW);
  delay(200);
  digitalWrite(LED_VERDE_PEATON, HIGH);
  delay(200);
  digitalWrite(LED_VERDE_PEATON, LOW);
  delay(200);
}

Vemos que las sentencias marcadas en azul se repiten tres veces en cada vuelta del loop(). Estas son las que vamos a poner detro de nuestro bucle for().

Como queremos que se repita 3 veces (0,1 y 2), creamos una variable local i que va a ir desde 0 hasta 2 de forma incremental. De forma que:

for (int i=0; i<2; i++) {
  digitalWrite(LED_VERDE_PEATON, LOW);
  delay(200);
  digitalWrite(LED_VERDE_PEATON, HIGH);
  delay(200);
}

Sustituimos en nuestro sketch ambos códigos y nos queda así:

¿A qué mola?
Cacharrea, crea y comparte tus proyectos.

Volver a: Aprende con el Kit Educativo de Semáforo para Arduino (SEM)

©2017 Fábrica Digital desde Jerez de la Frontera, España.

717 717 452 (Teléfono y Whatsapp) / hola@fabricadigital.org

De Lunes a Jueves de 09:00 a 18:00. Viernes de 09:00 a 14:00.

Calle del Comercio, 18, 11407 Jerez de la Frontera, Cádiz. - Cómo llegar

Información Legal - Aceptamos

 

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account