// Jefferson Ciro y Karol Forigua
// Definir los activadores
#define ActivadorA 34
#define ActivadorB 35
#define ActivadorC 32
#define ActivadorD 33
// Definir las entradas para el paso peatonal
int pasoA = 1;
int pasoB = 1;
int pasoC = 1;
int pasoD = 1;
// Grupo A - Semaforos
#define RojoA 13
#define AmarilloA 12
#define VerdeA 14
// Grupo B - Semaforos
#define RojoB 17
#define AmarilloB 16
#define VerdeB 4
// Grupo C - Semaforos
#define RojoC 19
#define AmarilloC 18
#define VerdeC 5
// Grupo D - Semaforos
#define RojoD 23
#define AmarilloD 22
#define VerdeD 21
void setup() {
pinMode(ActivadorA, INPUT);
pinMode(ActivadorB, INPUT);
pinMode(ActivadorC, INPUT);
pinMode(ActivadorD, INPUT);
pinMode(RojoA, OUTPUT);
pinMode(AmarilloA, OUTPUT);
pinMode(VerdeA, OUTPUT);
pinMode(RojoB, OUTPUT);
pinMode(AmarilloB, OUTPUT);
pinMode(VerdeB, OUTPUT);
pinMode(RojoC, OUTPUT);
pinMode(AmarilloC, OUTPUT);
pinMode(VerdeC, OUTPUT);
pinMode(RojoD, OUTPUT);
pinMode(AmarilloD, OUTPUT);
pinMode(VerdeD, OUTPUT);
}
void loop() {
// Lectura de pulsadores de paso peatonal
pasoA = digitalRead(ActivadorA);
pasoB = digitalRead(ActivadorB);
pasoC = digitalRead(ActivadorC);
pasoD = digitalRead(ActivadorD);
// Prioridad para el paso peatonal
if (pasoA || pasoB) {
// Detener todos los semáforos y dar paso al peatón
detenerSemaforos();
delay(5000); // Esperar 5 segundos para el paso peatonal
} else {
// Secuencia de semáforos para la vía doble carril
secuenciaViaDobleCarril();
}
}
void secuenciaViaDobleCarril() {
// Semáforos de la vía A y B
encenderVerde(RojoA, AmarilloA, VerdeA);
encenderRojo(RojoB, AmarilloB, VerdeB);
delay(3000); // Tiempo del verde reducido
// Amarillo intermitente
encenderAmarillo(RojoA, AmarilloA, VerdeA);
encenderAmarillo(RojoB, AmarilloB, VerdeB);
delay(1000); // Tiempo del amarillo reducido
// Semáforos de la vía C y D
encenderRojo(RojoC, AmarilloC, VerdeC); // Corregido: Encender el LED rojo del grupo C
encenderVerde(RojoD, AmarilloD, VerdeD);
delay(3000); // Tiempo del verde reducido
// Amarillo intermitente
encenderAmarillo(RojoC, AmarilloC, VerdeC);
encenderAmarillo(RojoD, AmarilloD, VerdeD);
delay(1000); // Tiempo del amarillo reducido
}
void detenerSemaforos() {
apagarSemaforo(RojoA, AmarilloA, VerdeA);
apagarSemaforo(RojoB, AmarilloB, VerdeB);
apagarSemaforo(RojoC, AmarilloC, VerdeC);
apagarSemaforo(RojoD, AmarilloD, VerdeD);
}
void encenderRojo(int pinRojo, int pinAmarillo, int pinVerde) {
digitalWrite(pinRojo, HIGH);
digitalWrite(pinAmarillo, LOW);
digitalWrite(pinVerde, LOW);
}
void encenderAmarillo(int pinRojo, int pinAmarillo, int pinVerde) {
digitalWrite(pinRojo, LOW);
digitalWrite(pinAmarillo, HIGH);
digitalWrite(pinVerde, LOW);
}
void encenderVerde(int pinRojo, int pinAmarillo, int pinVerde) {
digitalWrite(pinRojo, LOW);
digitalWrite(pinAmarillo, LOW);
digitalWrite(pinVerde, HIGH);
}
void apagarSemaforo(int pinRojo, int pinAmarillo, int pinVerde) {
digitalWrite(pinRojo, LOW);
digitalWrite(pinAmarillo, LOW);
digitalWrite(pinVerde, LOW);
}