arduino

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.

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

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.