
Semáforo Doble
- AGR
- Electrónica , Programación
- 22 Nov, 2024
Descripción del código
Este programa controla el funcionamiento de dos semáforos simulados utilizando un Arduino. Cada semáforo cuenta con tres luces LED: verde, amarillo y rojo. El programa alterna las luces de ambos semáforos de forma sincronizada para simular el flujo de tráfico en una intersección.
Partes principales del código
1. Declaración de constantes
Se definen las constantes para identificar los pines a los que están conectados los LEDs de ambos semáforos.
const int LED_VERDE_1 = 2;
const int LED_AMARILLO_1 = 3;
const int LED_ROJO_1 = 4;
const int LED_VERDE_2 = 5;
const int LED_AMARILLO_2 = 6;
const int LED_ROJO_2 = 7;
2. Función setup
La función setup
configura todos los pines de los LEDs como salidas utilizando la función pinMode
.
void setup() {
pinMode(LED_VERDE_1, OUTPUT);
pinMode(LED_AMARILLO_1, OUTPUT);
pinMode(LED_ROJO_1, OUTPUT);
pinMode(LED_VERDE_2, OUTPUT);
pinMode(LED_AMARILLO_2, OUTPUT);
pinMode(LED_ROJO_2, OUTPUT);
}
3. Función loop
La función loop
controla el ciclo de encendido y apagado de los LEDs para simular el comportamiento de los semáforos.
Ciclo del semáforo:
-
Semáforo 1 en verde y semáforo 2 en rojo
- El LED verde del semáforo 1 y el LED rojo del semáforo 2 se encienden por 3 segundos.
digitalWrite(LED_VERDE_1, HIGH); digitalWrite(LED_ROJO_2, HIGH); delay(3000);
-
Parpadeo del LED verde del semáforo 1
- El LED verde del semáforo 1 parpadea 5 veces.
for (int i = 0; i < 5; i++) { digitalWrite(LED_VERDE_1, LOW); delay(300); digitalWrite(LED_VERDE_1, HIGH); delay(300); }
-
Cambio a luz amarilla en el semáforo 1
- El LED verde del semáforo 1 se apaga, y el LED amarillo se enciende por 2 segundos.
digitalWrite(LED_VERDE_1, LOW); digitalWrite(LED_AMARILLO_1, HIGH); delay(2000);
-
Cambio a rojo en el semáforo 1 y verde en el semáforo 2
- El LED amarillo del semáforo 1 se apaga, y el LED rojo se enciende. Al mismo tiempo, el LED rojo del semáforo 2 se apaga y su LED verde se enciende.
digitalWrite(LED_AMARILLO_1, LOW); digitalWrite(LED_ROJO_1, HIGH); digitalWrite(LED_ROJO_2, LOW); digitalWrite(LED_VERDE_2, HIGH); delay(3000);
-
Parpadeo del LED verde del semáforo 2
- El LED verde del semáforo 2 parpadea 5 veces.
for (int i = 0; i < 5; i++) { digitalWrite(LED_VERDE_2, LOW); delay(300); digitalWrite(LED_VERDE_2, HIGH); delay(300); }
-
Cambio a luz amarilla en el semáforo 2
- El LED verde del semáforo 2 se apaga, y el LED amarillo se enciende por 2 segundos.
digitalWrite(LED_VERDE_2, LOW); digitalWrite(LED_AMARILLO_2, HIGH); delay(2000);
-
Cambio a rojo en el semáforo 2
- El LED amarillo del semáforo 2 se apaga, y el LED rojo se enciende.
digitalWrite(LED_AMARILLO_2, LOW); digitalWrite(LED_ROJO_2, HIGH);
Desafíos
1. Modifica los tiempos
Cambia los tiempos de encendido de las luces para que:
- El LED verde permanezca encendido durante 5 segundos.
- El LED amarillo dure 3 segundos.
2. Agrega un tercer semáforo
Crea un tercer semáforo con sus respectivos LEDs y configura el programa para que funcione de forma sincronizada con los otros dos.
3 Modifica los patrones de parpadeo
Haz que los LEDs verdes de ambos semáforos parpadeen en un patrón diferente. Por ejemplo, podrías hacer que parpadeen rápidamente tres veces, luego se mantengan apagados por un segundo.
Recursos
// C++ code
//
// Pines del primer semáforo
const int LED_VERDE_1 = 2;
const int LED_AMARILLO_1 = 3;
const int LED_ROJO_1 = 4;
// Pines del segundo semáforo
const int LED_VERDE_2 = 5;
const int LED_AMARILLO_2 = 6;
const int LED_ROJO_2 = 7;
void setup() {
// Configuración de los pines como salida para ambos semáforos
pinMode(LED_VERDE_1, OUTPUT);
pinMode(LED_AMARILLO_1, OUTPUT);
pinMode(LED_ROJO_1, OUTPUT);
pinMode(LED_VERDE_2, OUTPUT);
pinMode(LED_AMARILLO_2, OUTPUT);
pinMode(LED_ROJO_2, OUTPUT);
}
void loop() {
// Semáforo 1 en verde y semáforo 2 en rojo
digitalWrite(LED_VERDE_1, HIGH);
digitalWrite(LED_ROJO_2, HIGH);
delay(3000);
// Parpadeo del LED verde del semáforo 1
for (int i = 0; i < 5; i++) {
digitalWrite(LED_VERDE_1, LOW);
delay(300);
digitalWrite(LED_VERDE_1, HIGH);
delay(300);
}
// Apagar el verde del semáforo 1, encender amarillo por 2 segundos
digitalWrite(LED_VERDE_1, LOW);
digitalWrite(LED_AMARILLO_1, HIGH);
delay(2000);
// Apagar amarillo, encender rojo en el semáforo 1 y verde en el semáforo 2
digitalWrite(LED_AMARILLO_1, LOW);
digitalWrite(LED_ROJO_1, HIGH);
digitalWrite(LED_ROJO_2, LOW);
digitalWrite(LED_VERDE_2, HIGH);
delay(3000);
// Parpadeo del LED verde del semáforo 2
for (int i = 0; i < 5; i++) {
digitalWrite(LED_VERDE_2, LOW);
delay(300);
digitalWrite(LED_VERDE_2, HIGH);
delay(300);
}
// Apagar el verde del semáforo 2, encender amarillo por 2 segundos
digitalWrite(LED_VERDE_2, LOW);
digitalWrite(LED_AMARILLO_2, HIGH);
delay(2000);
// Apagar amarillo, encender rojo en el semáforo 2
digitalWrite(LED_AMARILLO_2, LOW);
digitalWrite(LED_ROJO_2, HIGH);
digitalWrite(LED_ROJO_1, LOW);
}