int greenLED = 0; // Pin para el LED verde
int yellowLED = 2; // Pin para el LED amarillo
int redLED = 3; // Pin para el LED rojo
int pedestrianButton = 4;// Pin para el botón peatonal
int pedestrianLED = 1; // Pin para el LED de solicitud de cruce peatonal
int buttonState = 0; // Variable para almacenar el estado del botón
bool pedestrianRequested = false;
unsigned long buttonPressTime = 0;
void setup() {
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(pedestrianLED, OUTPUT);
pinMode(pedestrianButton, INPUT_PULLUP);
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
digitalWrite(pedestrianLED, LOW);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(pedestrianButton);
if (buttonState == LOW && !pedestrianRequested) {
Serial.println("Botón peatonal presionado");
pedestrianRequested = true;
digitalWrite(pedestrianLED, HIGH);
buttonPressTime = millis();
}
if (pedestrianRequested && millis() - buttonPressTime >= 2000) {
changeToRed();
pedestrianRequested = false;
digitalWrite(pedestrianLED, LOW);
} else if (!pedestrianRequested) {
normalSequence();
}
}
void normalSequence() {
Serial.println("Semáforo verde encendido");
digitalWrite(greenLED, HIGH);
delay(10000);
Serial.println("Semáforo verde apagado, amarillo parpadeando");
digitalWrite(greenLED, LOW);
for (int i = 0; i < 3; i++) {
digitalWrite(yellowLED, HIGH);
delay(500);
digitalWrite(yellowLED, LOW);
delay(500);
}
changeToRed();
}
void changeToRed() {
Serial.println("Semáforo rojo encendido");
digitalWrite(redLED, HIGH);
delay(10000);
Serial.println("Semáforo rojo apagado");
digitalWrite(redLED, LOW);
}