// Pin Definitions
int red = 8;
int yellow = 7;
int green = 6;
int requestButton = 5; // Button to request pedestrian crossing
int pedestrianWaitingLED = 3; // LED to indicate pedestrian waiting
int pedestrianCrossingLED = 4; // LED to indicate pedestrian crossing
bool pedestrianRequest = false; // Flag to indicate if a pedestrian has requested to cross
void setup() {
// Initialize traffic light LEDs as outputs
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
// Initialize pedestrian LEDs as outputs
pinMode(pedestrianWaitingLED, OUTPUT);
pinMode(pedestrianCrossingLED, OUTPUT);
// Initialize request button as input with pull-down resistor
pinMode(requestButton, INPUT); // External pull-down resistor will be used
// Initial LED states
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
digitalWrite(pedestrianWaitingLED, LOW);
digitalWrite(pedestrianCrossingLED, LOW);
}
void loop() {
// Check if the pedestrian has requested to cross by pressing the button
if (digitalRead(requestButton) == HIGH) { // Button press will read HIGH with pull-down configuration
pedestrianRequest = true; // Set the pedestrianRequest flag
}
// Traffic light sequence
if (pedestrianRequest) {
// Handle pedestrian crossing request
digitalWrite(green, LOW); // Ensure green is off
digitalWrite(yellow, LOW); // Ensure yellow is off
digitalWrite(red, HIGH); // Turn on red light
digitalWrite(pedestrianWaitingLED, HIGH); // Turn on "Pedestrian Waiting" LED
delay(3000); // Wait for 3 seconds before allowing crossing
digitalWrite(pedestrianWaitingLED, LOW); // Turn off "Pedestrian Waiting" LED
digitalWrite(pedestrianCrossingLED, HIGH); // Turn on "Pedestrian Crossing" LED
delay(8000); // Give pedestrian 8 seconds to cross
digitalWrite(pedestrianCrossingLED, LOW); // Turn off "Pedestrian Crossing" LED
pedestrianRequest = false; // Reset pedestrianRequest flag
} else {
digitalWrite(green, HIGH);
delay(900);
digitalWrite(green, LOW);
digitalWrite(yellow, HIGH);
delay(300);
digitalWrite(yellow, LOW);
digitalWrite(red, HIGH);
delay(800);
digitalWrite(red, LOW);
}
}