// Definimos los pines a utilizar
int vehicularVerdePin = 13;
int vehicularAmarilloPin = 12;
int vehicularRojoPin = 11;
int peatonalVerdePin = 4;
int peatonalRojoPin = 1;
int interruptorPin = 0;
// Variables para controlar el estado y el tiempo
bool peatonal = false;
unsigned long tiempoInicio;
void setup() {
// Configuramos los pines como salida
pinMode(vehicularVerdePin, OUTPUT);
pinMode(vehicularAmarilloPin, OUTPUT);
pinMode(vehicularRojoPin, OUTPUT);
pinMode(peatonalVerdePin, OUTPUT);
pinMode(peatonalRojoPin, OUTPUT);
// Configuramos el pin del interruptor como entrada
pinMode(interruptorPin, INPUT_PULLUP);
// Inicializamos el semáforo en estado verde para vehículos y rojo para peatonal
digitalWrite(vehicularVerdePin, HIGH);
digitalWrite(vehicularAmarilloPin, LOW);
digitalWrite(vehicularRojoPin, LOW);
digitalWrite(peatonalVerdePin, LOW);
digitalWrite(peatonalRojoPin, HIGH);
}
void loop() {
// Verificamos si se ha presionado el interruptor y el estado del semáforo peatonal
if (digitalRead(interruptorPin) == LOW && !peatonal) {
// Cambiamos a amarillo vehicular
digitalWrite(vehicularVerdePin, LOW);
digitalWrite(vehicularAmarilloPin, HIGH);
delay(1500);
// Cambiamos a rojo vehicular
digitalWrite(vehicularAmarilloPin, LOW);
digitalWrite(vehicularRojoPin, HIGH);
delay(4000);
// Cambiamos a verde peatonal
digitalWrite(peatonalRojoPin, LOW);
digitalWrite(peatonalVerdePin, HIGH);
// Marcamos el inicio del tiempo de espera peatonal
tiempoInicio = millis();
peatonal = true;
}
// Si el semáforo peatonal está activo, esperamos el tiempo correspondiente
if (peatonal) {
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoInicio >= tiempoEsperaPeatonal) {
// Titilamos el verde peatonal
digitalWrite(peatonalVerdePin, !digitalRead(peatonalVerdePin));
tiempoInicio = tiempoActual;
}
// Esperamos el tiempo de titilación
delay(tiempoTitilar);
// Apagamos el verde peatonal y encendemos rojo peatonal
digitalWrite(peatonalVerdePin, LOW);
digitalWrite(peatonalRojoPin, HIGH);
// Esperamos un segundo
delay(1000);
// Encendemos amarillo vehicular
digitalWrite(vehicularRojoPin, LOW);
digitalWrite(vehicularAmarilloPin, HIGH);
delay(tiempoAmarilloVehicular);
// Apagamos el amarillo vehicular
digitalWrite(vehicularAmarilloPin, LOW);
peatonal = false; // Reiniciamos el estado del semáforo peatonal
}
}