// Definimos los pines para los LEDs del semáforo
const int pinLedRojo = 15;
const int pinLedAmarillo = 2;
const int pinLedVerde = 0;
// Definimos el pin para el botón
const int pinBoton = 27;
// Variables para el control del semáforo
int estadoSemaforo = 0;
unsigned long tiempoAnterior = 0;
const long intervalo = 5000; // 5 segundos para cada fase
void setup() {
// Configuramos los pines de los LEDs como salidas
pinMode(pinLedRojo, OUTPUT);
pinMode(pinLedAmarillo, OUTPUT);
pinMode(pinLedVerde, OUTPUT);
// Configuramos el pin del botón como entrada sin resistencia pull-up
pinMode(pinBoton, INPUT);
// Iniciamos el semáforo en rojo
cambiarEstadoSemaforo(0);
}
void loop() {
unsigned long tiempoActual = millis();
// Leemos el estado actual del botón
int estadoBoton = digitalRead(pinBoton);
// Si el botón está presionado (HIGH), activamos el verde
if (estadoBoton == HIGH) {
cambiarEstadoSemaforo(1); // Verde
tiempoAnterior = tiempoActual;
} else {
// Si el botón no está presionado, seguimos con el ciclo normal
if (tiempoActual - tiempoAnterior >= intervalo) {
estadoSemaforo = (estadoSemaforo + 1) % 3;
cambiarEstadoSemaforo(estadoSemaforo);
tiempoAnterior = tiempoActual;
}
}
}
void cambiarEstadoSemaforo(int nuevoEstado) {
estadoSemaforo = nuevoEstado;
// Actualizamos el estado de los LEDs según el nuevo estado del semáforo
switch (estadoSemaforo) {
case 0: // Rojo
digitalWrite(pinLedRojo, HIGH);
digitalWrite(pinLedAmarillo, LOW);
digitalWrite(pinLedVerde, LOW);
break;
case 1: // Verde
digitalWrite(pinLedRojo, LOW);
digitalWrite(pinLedAmarillo, LOW);
digitalWrite(pinLedVerde, HIGH);
break;
case 2: // Amarillo
digitalWrite(pinLedRojo, LOW);
digitalWrite(pinLedAmarillo, HIGH);
digitalWrite(pinLedVerde, LOW);
break;
}
}