#include <NewPing.h>
// Traffic light pins
const int red = 7;
const int yellow = 8;
const int green = 9;
// Pedestrian light pins
const int pred = 11;
const int pgreen = 12;
// Ultrasonic sensor pins
const int trigPin1 = 2;
const int echoPin1 = 3;
const int trigPin2 = 4;
const int echoPin2 = 5;
// PIR sensor pin
const int pirPin = 6;
// Maximum distance to be detected (in cm)
const int maxDistance = 200;
// Create NewPing instances for ultrasonic sensors
NewPing sonar1(trigPin1, echoPin1, maxDistance);
NewPing sonar2(trigPin2, echoPin2, maxDistance);
void setup() {
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop() {
int distance1 = sonar1.ping_cm();
int distance2 = sonar2.ping_cm();
int pedestrian = digitalRead(pirPin);
Serial.print("Distance 1: ");
Serial.print(distance1);
Serial.print(" cm, Distance 2: ");
Serial.print(distance2);
Serial.print(" cm, Pedestrian: ");
Serial.println(pedestrian);
// Adjust traffic light timing based on detected traffic and pedestrian presence
if (distance1 < maxDistance && distance2 < maxDistance) {
// Both directions have traffic
if (pedestrian) {
pedestrianLightSequence();
} else {
normalLightSequence();
}
} else if (distance1 < maxDistance) {
// Only direction 1 has traffic
directionLightSequence();
} else {
// No traffic detected
normalLightSequence();
}
delay(1000);
}
void normalLightSequence() {
digitalWrite(red, HIGH);
delay(4000);
digitalWrite(yellow, HIGH);
digitalWrite(red, HIGH);
delay(1000);
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
delay(200);
digitalWrite(green, HIGH);
delay(3400);
digitalWrite(green, LOW);
delay(200);
digitalWrite(yellow, HIGH);
delay(1000);
digitalWrite(yellow, LOW);
delay(200);
}
void pedestrianLightSequence() {
digitalWrite(pgreen, HIGH);
digitalWrite(pred, LOW);
delay(2000);
for (int i=0; i<10; i++){
digitalWrite(pgreen, LOW);
digitalWrite(pred, HIGH);
delay(150);
digitalWrite(pred, LOW);
digitalWrite(pgreen, HIGH);
delay(50);
digitalWrite(pgreen, LOW);
digitalWrite(pred, HIGH);
delay(6000);
}
digitalWrite(red, HIGH);
delay(6000);
}
void directionLightSequence() {
digitalWrite(red, HIGH);
delay(4000);
digitalWrite(yellow, HIGH);
delay(1000);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
delay(1000);
digitalWrite(green, LOW);
for (int i=0; i<10; i++){
digitalWrite(green, HIGH);
delay(200);
digitalWrite(green, LOW);
delay(200);};
digitalWrite(yellow, HIGH);
delay(1000);
digitalWrite(yellow, LOW);
}
}