#define RED 1
#define YELLOW 5
#define GREEN 9
#define RED2 10
#define YELLOW2 11
#define GREEN2 12
#define TRIG1 2
#define ECHO1 3
#define TRIG2 19
#define ECHO2 18
long duration1, distance1;
long duration2, distance2;
void setup() {
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(YELLOW2, OUTPUT);
pinMode(GREEN2, OUTPUT);
pinMode(TRIG1, OUTPUT);
pinMode(ECHO1, INPUT);
pinMode(TRIG2, OUTPUT);
pinMode(ECHO2, INPUT);
Serial.begin(9600);
}
void loop() {
// Measure distance for road 1
digitalWrite(TRIG1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG1, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG1, LOW);
duration1 = pulseIn(ECHO1, HIGH);
distance1 = duration1 * 0.034 / 2;
// Measure distance for road 2
digitalWrite(TRIG2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG2, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG2, LOW);
duration2 = pulseIn(ECHO2, HIGH);
distance2 = duration2 * 0.034 / 2;
// Check which road has more traffic
if (distance1 < 31) {
// Clear traffic for road 1 first
clearTraffic(GREEN, YELLOW, RED);
} else if (distance2 < 31) {
// Clear traffic for road 2 first
clearTraffic(GREEN2, YELLOW2, RED2);
} else {
// Normal traffic rule
clearTraffic(GREEN, YELLOW, RED);
clearTraffic(GREEN2, YELLOW2, RED2);
}
}
void clearTraffic(int greenPin, int yellowPin, int redPin) {
digitalWrite(greenPin, HIGH);
digitalWrite(redPin, LOW);
delay(3000);
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, HIGH);
delay(500);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, HIGH);
delay(2000);
digitalWrite(yellowPin, HIGH);
delay(500);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, LOW);
}