// ---------------- LED PINS ----------------
#define R1 23
#define Y1 22
#define G1 21
#define R2 19
#define Y2 18
#define G2 5
#define R3 17
#define Y3 16
#define G3 4
// ---------------- SENSOR PINS ----------------
#define TRIG1 13
#define ECHO1 12
#define TRIG2 14
#define ECHO2 27
#define TRIG3 26
#define ECHO3 25
#define YELLOW_TIME 4000
long duration;
float distance;
// -------- Function to Measure Distance --------
float getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
float dist = duration * 0.034 / 2;
return dist;
}
// -------- Set All Red --------
void allRed() {
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(R3, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(G3, LOW);
digitalWrite(Y1, LOW);
digitalWrite(Y2, LOW);
digitalWrite(Y3, LOW);
}
// -------- Road Control Function --------
void operateRoad(int R, int Y, int G, float distance) {
int greenTime;
if (distance < 20) {
greenTime = 40000; // Heavy traffic
} else {
greenTime = 15000; // Low traffic
}
digitalWrite(R, LOW);
digitalWrite(G, HIGH);
delay(greenTime);
digitalWrite(G, LOW);
digitalWrite(Y, HIGH);
delay(YELLOW_TIME);
digitalWrite(Y, LOW);
digitalWrite(R, HIGH);
}
void setup() {
pinMode(R1, OUTPUT); pinMode(Y1, OUTPUT); pinMode(G1, OUTPUT);
pinMode(R2, OUTPUT); pinMode(Y2, OUTPUT); pinMode(G2, OUTPUT);
pinMode(R3, OUTPUT); pinMode(Y3, OUTPUT); pinMode(G3, OUTPUT);
pinMode(TRIG1, OUTPUT); pinMode(ECHO1, INPUT);
pinMode(TRIG2, OUTPUT); pinMode(ECHO2, INPUT);
pinMode(TRIG3, OUTPUT); pinMode(ECHO3, INPUT);
allRed();
}
void loop() {
float d1 = getDistance(TRIG1, ECHO1);
float d2 = getDistance(TRIG2, ECHO2);
float d3 = getDistance(TRIG3, ECHO3);
allRed();
operateRoad(R1, Y1, G1, d1);
allRed();
operateRoad(R2, Y2, G2, d2);
allRed();
operateRoad(R3, Y3, G3, d3);
}