1.2 Semáforo doble en Arduino
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.
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.
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.
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í.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.