// Definición de pines usando #define
#define LED_VERDE_COCHES 19
#define LED_ROJO_COCHES 15
#define LED_AMARILLO_COCHES 14
#define LED_VERDE_PEATONES 18
#define LED_AMARILLO_PEATONES 21
#define BOTON_PEATONES 27
// Constantes de tiempo
#define INTERVALO_PARPADEO 300 // 300 ms para parpadear
#define TIEMPO_ESPERA_COCHES 5000 // 5 segundos de espera para iniciar el cambio
#define TIEMPO_AMARILLO_COCHES 1000 // 1 segundo para el amarillo coches
#define TIEMPO_VERDE_PEATONES 4000 // 4 segundos de paso peatones
#define TIEMPO_ESPERA_VERDE_COCHES 1000 // 1 segundo adicional para coches
// Variables globales
unsigned long tiempoAnterior = 0;
unsigned long tiempoInicioVerde = 0;
bool estadoAmarillo = LOW; // Estado inicial del LED amarillo peatones
bool boton_pulsado = false;
void setup() {
// Configuración de los pines
pinMode(LED_VERDE_COCHES, OUTPUT);
pinMode(LED_ROJO_COCHES, OUTPUT);
pinMode(LED_AMARILLO_COCHES, OUTPUT);
pinMode(LED_VERDE_PEATONES, OUTPUT);
pinMode(LED_AMARILLO_PEATONES, OUTPUT);
pinMode(BOTON_PEATONES, INPUT_PULLUP);
// Inicialización de los LEDs
digitalWrite(LED_VERDE_COCHES, HIGH); // Verde coches encendido
digitalWrite(LED_ROJO_COCHES, LOW); // Rojo coches apagado
digitalWrite(LED_AMARILLO_COCHES, LOW); // Amarillo coches apagado
digitalWrite(LED_VERDE_PEATONES, LOW); // Verde peatones apagado
digitalWrite(LED_AMARILLO_PEATONES, LOW); // Amarillo peatones apagado
tiempoInicioVerde = millis(); // Tiempo inicial
}
void loop() {
unsigned long tiempoActual = millis();
// Parpadeo del LED amarillo de peatones (solo si no están pasando)
if (!boton_pulsado && (tiempoActual - tiempoAnterior >= INTERVALO_PARPADEO)) {
tiempoAnterior = tiempoActual;
estadoAmarillo = !estadoAmarillo; // Cambiar estado del amarillo peatones
digitalWrite(LED_AMARILLO_PEATONES, estadoAmarillo);
}
// Leer botón de peatones
if (digitalRead(BOTON_PEATONES) == LOW) {
boton_pulsado = true; // Botón pulsado
}
// Verificar si pasaron al menos 5 segundos desde que los coches están en verde
if (boton_pulsado && (tiempoActual - tiempoInicioVerde >= TIEMPO_ESPERA_COCHES)) {
// Secuencia para detener el tráfico de coches
digitalWrite(LED_VERDE_COCHES, LOW); // Apagar verde coches
digitalWrite(LED_AMARILLO_COCHES, HIGH); // Encender amarillo coches
delay(TIEMPO_AMARILLO_COCHES); // Esperar 1 segundo
digitalWrite(LED_AMARILLO_COCHES, LOW); // Apagar amarillo coches
digitalWrite(LED_ROJO_COCHES, HIGH); // Encender rojo coches
// Permitir paso a peatones
digitalWrite(LED_AMARILLO_PEATONES, LOW); // Apagar amarillo peatones
digitalWrite(LED_VERDE_PEATONES, HIGH); // Encender verde peatones
delay(TIEMPO_VERDE_PEATONES); // Esperar 4 segundos
// Apagar verde peatones
digitalWrite(LED_VERDE_PEATONES, LOW);
boton_pulsado = false; // Reiniciar botón
// Esperar 1 segundo adicional antes de encender el semáforo de coches
delay(TIEMPO_ESPERA_VERDE_COCHES); // Esperar 1 segundo adicional
// Restablecer semáforo de coches
digitalWrite(LED_ROJO_COCHES, LOW); // Apagar rojo coches
digitalWrite(LED_VERDE_COCHES, HIGH); // Encender verde coches
tiempoInicioVerde = millis(); // Reiniciar tiempo para coches en verde
}
}