// Define pin numbers
const int redVehiclePin = 13;
const int yellowVehiclePin = 11;
const int greenVehiclePin = 12;
const int redPedestrianPin = 5;
const int greenPedestrianPin = 3;
const int pedestrianButtonPin = 6;
// Define timings
const int greenVehicleDuration = 20000; // 20 seconds
const int yellowVehicleDuration = 5000; // 5 seconds
const int redVehicleDuration = 5000; // 5 seconds
const int greenPedestrianDuration = 15000; // 15 seconds
const int blinkingGreenDuration = 5000; // 5 seconds blinking
const int allRedDuration = 3000; // 3 seconds all red
void setup() {
pinMode(redVehiclePin, OUTPUT);
pinMode(yellowVehiclePin, OUTPUT);
pinMode(greenVehiclePin, OUTPUT);
pinMode(redPedestrianPin, OUTPUT);
pinMode(greenPedestrianPin, OUTPUT);
pinMode(pedestrianButtonPin, INPUT);
}
void loop() {
// Initial state - Green for vehicles
digitalWrite(greenVehiclePin, HIGH);
delay(greenVehicleDuration);
// Yellow for vehicles
digitalWrite(greenVehiclePin, LOW);
digitalWrite(yellowVehiclePin, HIGH);
delay(yellowVehicleDuration);
// Red for vehicles
digitalWrite(yellowVehiclePin, LOW);
digitalWrite(redVehiclePin, HIGH);
delay(redVehicleDuration);
// Check for pedestrian button press during vehicle green
if (digitalRead(pedestrianButtonPin) == HIGH) {
// Transition smoothly to next state - Yellow for vehicles
digitalWrite(redVehiclePin, LOW);
digitalWrite(redPedestrianPin, LOW);
digitalWrite(greenPedestrianPin, HIGH);
delay(greenPedestrianDuration);
// Blinking green for pedestrians
for (int i = 0; i < 5; i++) {
digitalWrite(greenPedestrianPin, HIGH);
delay(500);
digitalWrite(greenPedestrianPin, LOW);
delay(500);
}
// Turn on red lights for both pedestrians and vehicles for 3 seconds
digitalWrite(greenPedestrianPin, LOW);
digitalWrite(redPedestrianPin, HIGH);
digitalWrite(redVehiclePin, HIGH);
delay(allRedDuration);
// Return to initial state
digitalWrite(redVehiclePin, LOW);
digitalWrite(redPedestrianPin, HIGH);
}
}