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

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.