const int redLedPin = 2, yellowLedPin = 3, greenLedPin = 4, pedestrianLedPin = 7;
const int buttonPin = 6, buzzerPin = 5, trigPin = 12, echoPin = 11;
bool pedestrianCrossing = false;
void setup() {
pinMode(redLedPin, OUTPUT); pinMode(yellowLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT);
pinMode(pedestrianLedPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
if (!pedestrianCrossing) trafficLightSequence();
if (digitalRead(buttonPin) == LOW) handlePedestrianCrossing();
if (pedestrianCrossing) {
int distance = measureDistance();
digitalWrite(pedestrianLedPin, HIGH);
digitalWrite(redLedPin, HIGH);
Serial.print("Distance: "); Serial.println(distance);
if (distance <= 10) tone(buzzerPin, 150);
else noTone(buzzerPin);
}
delay(100);
}
void trafficLightSequence() {
digitalWrite(pedestrianLedPin, LOW);
digitalWrite(redLedPin, HIGH); Serial.println("Traffic Light: RED"); delay(5000);
digitalWrite(redLedPin, LOW); digitalWrite(yellowLedPin, HIGH); Serial.println("Traffic Light: YELLOW"); delay(2000);
digitalWrite(yellowLedPin, LOW); digitalWrite(greenLedPin, HIGH); Serial.println("Traffic Light: GREEN"); delay(5000);
digitalWrite(greenLedPin, LOW); digitalWrite(yellowLedPin, HIGH); delay(2000);
digitalWrite(yellowLedPin, LOW); pedestrianCrossing = true;
}
void handlePedestrianCrossing() {
digitalWrite(redLedPin, HIGH); Serial.println("Pedestrian Light: OFF, Traffic Light: RED"); delay(7000);
digitalWrite(pedestrianLedPin, HIGH); Serial.println("Pedestrian Light: GREEN, Traffic Light: RED"); delay(7000);
pedestrianCrossing = false;
}
int measureDistance() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}