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.
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: 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í.