Esta es la parte 2 de los ejercicios de Arduino con leds. En este caso veremos cómo simular el comportamiento de un semáforo doble con cruce.

Vamos a agregar otros 3 leds de manera que ahora sean 6; el código será muy parecido al del semáforo simple.

Nota: vamos a usar delay, si no quieres usar delay pásate por este post para que veas cómo se puede simular sin esa función.

Recuerda que anteriormente vimos cómo simular únicamente un semáforo.

Instrucciones

Realizar un sketch en Arduino que permita encender 6 LED’s con la lógica de dos semáforos con cruce. Uno de ellos encenderá con la lógica normal mientras que el otro se mantiene en ROJO. Cuando el primero encienda el color ROJO, el segundo iniciará ahora el ciclo normal y el primero debe mantenerse en ROJO.

Circuito del semáforo doble

Agregamos 3 leds al modelo anterior, así que ahora tenemos 6 leds. Todos llevan una resistencia de 220 ohms.

1.2 Semáforo doble en Arduino

Obviamente el protoboard lleva una conexión a tierra y al voltaje del arduino. Los leds se van a alimentar a través de las salidas del Arduino.

Código fuente del semáforo doble

Si leemos el código vamos a ver que es como si estuviéramos leyendo un libro o algún texto que no es de programación; es decir, es muy sencillo (me refiero a la parte del loop). Veámoslo:

/*
  Prueba 2: Semáforo doble
  INSTRUCCIONES: Realizar un sketch en Arduino
  que permita encender 6 LED’s con la lógica de
  dos semáforos con cruce. Uno de ellos encenderá
  con la lógica normal mientras que el otro se
  mantiene en ROJO. Cuando el primero encienda el
  color ROJO, el segundo iniciará ahora el ciclo
  normal y el primero debe mantenerse en ROJO.
  
  @author parzibyte
  Visita: https://parzibyte.me/blog/
*/

int verde1 = 5, amarillo1 = 6, rojo1 = 7,
    verde2 = 8, amarillo2 = 9, rojo2 = 10,
    duracionVerdeYRojo = 5, duracionAmarillo = 3;
void setup() {
  for (int x = verde1; x <= rojo2; x++) {
    pinMode(x, OUTPUT);
  }
}
void encenderVerde1() {
  digitalWrite(verde1, HIGH);
}
void encenderAmarillo1() {
  digitalWrite(amarillo1, HIGH);
}

void encenderRojo1() {
  digitalWrite(rojo1, HIGH);
}
void encenderVerde2() {
  digitalWrite(verde2, HIGH);
}
void encenderAmarillo2() {
  digitalWrite(amarillo2, HIGH);
}
void encenderRojo2() {
  digitalWrite(rojo2, HIGH);
}
void apagarTodos() {
  for (int x = verde1; x <= rojo2; x++) {
    digitalWrite(x, LOW);
  }
}
void apagarLosDel1() {
  for (int x = verde1; x <= rojo1; x++) {
    digitalWrite(x, LOW);
  }
}
void apagarLosDel2() {
  for (int x = verde2; x <= rojo2; x++) {
    digitalWrite(x, LOW);
  }
}
int milisegundosAPartirDeSegundos(int segundos) {
  return segundos * 1000;
}
void loop() {
  apagarTodos();
  encenderVerde1();
  encenderRojo2();
  delay(milisegundosAPartirDeSegundos(duracionVerdeYRojo - duracionAmarillo));
  apagarLosDel1();
  encenderAmarillo1();
  delay(milisegundosAPartirDeSegundos(duracionAmarillo));
  apagarTodos();
  encenderRojo1();
  encenderVerde2();
  delay(milisegundosAPartirDeSegundos(duracionVerdeYRojo - duracionAmarillo));
  apagarLosDel2();
  encenderAmarillo2();
  delay(milisegundosAPartirDeSegundos(duracionAmarillo));
}

En el setup configuramos nuestros pines y en el loop simulamos ambos semáforos.

Al ejecutar el código vamos a ver que el semáforo 2 se pone en rojo mientras que el 1 hace su proceso normal, después de eso, el 1 se pone en rojo y el 2 hace su proceso normal.

Se supone que así es el funcionamiento de un semáforo doble.

¿Quieres simular el código directamente en el navegador? click aquí.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto