// Pines de LEDs
#define LED_VERDE 23
#define LED_AMARILLO 22
#define LED_ROJO 21
// Pines de control
#define PULSADOR 19
#define SWITCH_MODO 18
bool sistemaActivo = false;
bool estadoPulsadorAnterior = LOW;
void setup() {
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
pinMode(PULSADOR, INPUT); // Con resistencia pull-down externa
pinMode(SWITCH_MODO, INPUT); // Con resistencia pull-down externa
apagarLEDs();
}
void loop() {
bool estadoPulsador = digitalRead(PULSADOR);
bool modoIntermitente = digitalRead(SWITCH_MODO);
// Cambio de estado con flanco de subida en pulsador
if (estadoPulsador == HIGH && estadoPulsadorAnterior == LOW) {
sistemaActivo = !sistemaActivo;
apagarLEDs();
delay(300); // Antirrebote
}
estadoPulsadorAnterior = estadoPulsador;
if (sistemaActivo) {
if (modoIntermitente) {
// Modo intermitente (LED amarillo parpadea)
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, HIGH);
delay(500);
digitalWrite(LED_AMARILLO, LOW);
delay(500);
} else {
// Modo normal de semáforo
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
delay(4000);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, HIGH);
delay(12000);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(3000);
digitalWrite(LED_ROJO, LOW);
}
} else {
apagarLEDs();
}
}
void apagarLEDs() {
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
}