// GPIO pins for each traffic signal light (red, yellow, green)
int signal1[] = {5,35,19};
int signal2[] = {26,25,33};
int signal3[] = {32, 34, 18};
int signal4[] = {15, 1, 21};
// Ultrasonic sensor pins
int triggerpin1 = 13;
int echopin1 = 12;
int triggerpin2 = 27;
int echopin2 = 14;
int triggerpin3 = 22;
int echopin3 = 23;
int triggerpin4 = 2;
int echopin4 = 4;
long duration; // Time for ultrasonic signal to return
int S1, S2, S3, S4; // Distance measurements from each sensor
int t = 5; // Threshold distance to check for traffic presence
void setup()
{
// Initialize traffic signal LEDs as outputs
for (int i = 0; i < 3; i++)
{
pinMode(signal1[i], OUTPUT);
pinMode(signal2[i], OUTPUT);
pinMode(signal3[i], OUTPUT);
pinMode(signal4[i], OUTPUT);
}
// Initialize ultrasonic sensor pins
pinMode(triggerpin1, OUTPUT);
pinMode(echopin1, INPUT);
pinMode(triggerpin2, OUTPUT);
pinMode(echopin2, INPUT);
pinMode(triggerpin3, OUTPUT);
pinMode(echopin3, INPUT);
pinMode(triggerpin4, OUTPUT);
pinMode(echopin4, INPUT);
}
void loop()
{
// Measure distance from each ultrasonic sensor
S1 = readDistance(triggerpin1, echopin1);
S2 = readDistance(triggerpin2, echopin2);
S3 = readDistance(triggerpin3, echopin3);
S4 = readDistance(triggerpin4, echopin4);
if(S1<t){
digitalWrite(signal1[1], HIGH);
delay(500);
digitalWrite(signal1[1], LOW);
while (S1 < t) {
digitalWrite(signal1[2], HIGH);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[0], HIGH);
S1 = readDistance(triggerpin1, echopin1);
}
digitalWrite(signal1[2], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[0], LOW);
}
else{
signal1Function();
}
if(S2<t){
digitalWrite(signal2[1], HIGH);
delay(500);
digitalWrite(signal2[1], LOW);
while (S2 < t) {
digitalWrite(signal1[0], HIGH);
digitalWrite(signal2[2], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[0], HIGH);
S2 = readDistance(triggerpin2, echopin2);
}
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[2], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[0], LOW);
}
else{
signal2Function();
}
if(S3<t){
digitalWrite(signal3[1], HIGH);
delay(500);
digitalWrite(signal3[1], LOW);
while (S3 < t) {
digitalWrite(signal1[0], HIGH);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal3[2], HIGH);
digitalWrite(signal4[0], HIGH);
S3 = readDistance(triggerpin3, echopin3);
}
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[2], LOW);
digitalWrite(signal4[0], LOW);
}
else{
signal3Function();
}
if(S4<t){
digitalWrite(signal4[1], HIGH);
delay(500);
digitalWrite(signal4[1], LOW);
while (S4 < t) {
digitalWrite(signal1[0], HIGH);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[2], HIGH);
S4 = readDistance(triggerpin4, echopin4);
}
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[2], LOW);
}
else{
signal4Function();
}
}
int readDistance(int triggerPin, int echoPin)
{
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // Convert to cm
}
// Define functions for handling each signal
void signal1Function()
{
digitalWrite(signal2[0], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[0], HIGH);
digitalWrite(signal1[1], HIGH);
delay(500);
digitalWrite(signal1[1], LOW);
digitalWrite(signal1[2], HIGH);
delay(2000);
digitalWrite(signal1[2], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[0], LOW);
}
void signal2Function()
{
digitalWrite(signal1[0], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[0], HIGH);
digitalWrite(signal2[1], HIGH);
delay(500);
digitalWrite(signal2[1], LOW);
digitalWrite(signal2[2], HIGH);
delay(2000);
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[2], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[0], LOW);
}
void signal3Function()
{
digitalWrite(signal1[0], HIGH);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal4[0], HIGH);
digitalWrite(signal3[1], HIGH);
delay(500);
digitalWrite(signal3[1], LOW);
digitalWrite(signal3[2], HIGH);
delay(2000);
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[2], LOW);
digitalWrite(signal4[0], LOW);
}
void signal4Function()
{
digitalWrite(signal1[0], HIGH);
digitalWrite(signal2[0], HIGH);
digitalWrite(signal3[0], HIGH);
digitalWrite(signal4[1], HIGH);
delay(500);
digitalWrite(signal4[1], LOW);
digitalWrite(signal4[2], HIGH);
delay(2000);
digitalWrite(signal1[0], LOW);
digitalWrite(signal2[0], LOW);
digitalWrite(signal3[0], LOW);
digitalWrite(signal4[2], LOW);
}