// Definición de pines para los LEDs
// Vía A
const int A_R = 17;
const int A_Y = 16;
const int A_G = 32;
// Vía B
const int B_R = 33;
const int B_Y = 25;
const int B_G = 26;
// Vía C
const int C_R = 27;
const int C_Y = 14;
const int C_G = 12;
// Vía D
const int D_R = 15;
const int D_Y = 2;
const int D_G = 4;
void setup() {
// Configurar todos los pines como salidas
int leds[] = {
A_R, A_Y, A_G,
B_R, B_Y, B_G,
C_R, C_Y, C_G,
D_R, D_Y, D_G
};
for (int i = 0; i < 12; i++) {
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW);
}
}
void loop() {
controlarSemaforo(A_R, A_Y, A_G);
controlarSemaforo(B_R, B_Y, B_G);
controlarSemaforo(C_R, C_Y, C_G);
controlarSemaforo(D_R, D_Y, D_G);
}
void controlarSemaforo(int rojo, int amarillo, int verde) {
// Encender todos los rojos excepto el actual
encenderTodosRojosExcepto(rojo);
// Verde encendido
digitalWrite(verde, HIGH);
delay(5000);
// Verde off, amarillo on
digitalWrite(verde, LOW);
digitalWrite(amarillo, HIGH);
delay(2000);
// Amarillo off, rojo on
digitalWrite(amarillo, LOW);
digitalWrite(rojo, HIGH);
}
void encenderTodosRojosExcepto(int currentRed) {
int reds[] = {A_R, B_R, C_R, D_R};
for (int i = 0; i < 4; i++) {
if (reds[i] != currentRed) {
digitalWrite(reds[i], HIGH);
} else {
digitalWrite(reds[i], LOW); // Apagar el rojo de la vía que va a tener luz verde
}
}
// Apagar todos los verdes y amarillos
int others[] = {A_Y, A_G, B_Y, B_G, C_Y, C_G, D_Y, D_G};
for (int i = 0; i < 8; i++) {
digitalWrite(others[i], LOW);
}
}