// Define ultrasonic sensor pins and LED pins for each section
// Ultrasonic A
#define TRIGGER_PIN1 0
#define ECHO_PIN1 1
int red_led1 = 2;
int green_led1 = 3;
int yellow_led1 = 4;
// Ultrasonic B
#define TRIGGER_PIN2 5
#define ECHO_PIN2 6
int red_led2 = 7;
int green_led2 = 8;
int yellow_led2 = 9;
// Ultrasonic C
#define TRIGGER_PIN3 10
#define ECHO_PIN3 11
int red_led3 = 12;
int green_led3 = 13;
int yellow_led3 = A0;
// Ultrasonic D
#define TRIGGER_PIN4 A1
#define ECHO_PIN4 A2
int red_led4 = A3;
int green_led4 = A4;
int yellow_led4 = A5;
void setup() {
// Set ultrasonic sensor pins as input
pinMode(TRIGGER_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIGGER_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(TRIGGER_PIN3, OUTPUT);
pinMode(ECHO_PIN3, INPUT);
pinMode(TRIGGER_PIN4, OUTPUT);
pinMode(ECHO_PIN4, INPUT);
// Set LED pins as output
pinMode(red_led1, OUTPUT);
pinMode(green_led1, OUTPUT);
pinMode(yellow_led1, OUTPUT);
pinMode(red_led2, OUTPUT);
pinMode(green_led2, OUTPUT);
pinMode(yellow_led2, OUTPUT);
pinMode(red_led3, OUTPUT);
pinMode(green_led3, OUTPUT);
pinMode(yellow_led3, OUTPUT);
pinMode(red_led4, OUTPUT);
pinMode(green_led4, OUTPUT);
pinMode(yellow_led4, OUTPUT);
}
void loop() {
// Normal traffic system
normalTraffic();
// Check for emergency condition
if (checkEmergency()) {
// Emergency traffic condition
emergencyTraffic();
}
}
void normalTraffic() {
// Section D: Green ON
digitalWrite(green_led4, HIGH);
digitalWrite(red_led1, HIGH);
digitalWrite(red_led2, HIGH);
digitalWrite(red_led3, HIGH);
delay(3000);
digitalWrite(green_led4, LOW);
digitalWrite(red_led1, LOW);
digitalWrite(red_led2, LOW);
digitalWrite(red_led3, LOW);
// Section C: Green ON
digitalWrite(green_led3, HIGH);
digitalWrite(red_led1, HIGH);
digitalWrite(red_led2, HIGH);
digitalWrite(red_led4, HIGH);
delay(3000);
digitalWrite(green_led3, LOW);
digitalWrite(red_led1, LOW);
digitalWrite(red_led2, LOW);
digitalWrite(red_led4, LOW);
// Section B: Green ON
digitalWrite(green_led2, HIGH);
digitalWrite(red_led1, HIGH);
digitalWrite(red_led3, HIGH);
digitalWrite(red_led4, HIGH);
delay(3000);
digitalWrite(green_led2, LOW);
digitalWrite(red_led1, LOW);
digitalWrite(red_led3, LOW);
digitalWrite(red_led4, LOW);
// Section A: Green ON
digitalWrite(green_led1, HIGH);
digitalWrite(red_led4, HIGH);
digitalWrite(red_led2, HIGH);
digitalWrite(red_led3, HIGH);
delay(3000);
digitalWrite(green_led1, LOW);
digitalWrite(red_led4, LOW);
digitalWrite(red_led2, LOW);
digitalWrite(red_led3, LOW);
}
bool checkEmergency() {
// Check for obstacle in any section
if (checkObstacle(TRIGGER_PIN1, ECHO_PIN1) || checkObstacle(TRIGGER_PIN2, ECHO_PIN2) || checkObstacle(TRIGGER_PIN3, ECHO_PIN3) || checkObstacle(TRIGGER_PIN4, ECHO_PIN4)) {
return true; // Emergency condition detected
} else {
return false; // No emergency condition
}
}
bool checkObstacle(int triggerPin, int echoPin) {
// Read distance from ultrasonic sensor
long duration, distance;
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
// Check if distance is less than 15 cm
if (distance < 15) {
return true; // Obstacle detected
} else {
return false; // No obstacle
}
}
void emergencyTraffic() {
// Determine which section detected obstacle
if (checkObstacle(TRIGGER_PIN1, ECHO_PIN1)) {
// Section A detected obstacle
digitalWrite(green_led1, HIGH);
digitalWrite(red_led1, LOW);
digitalWrite(yellow_led1, LOW);
digitalWrite(red_led2, HIGH);
digitalWrite(green_led2, LOW);
digitalWrite(yellow_led2, LOW);
digitalWrite(red_led3, HIGH);
digitalWrite(green_led3, LOW);
digitalWrite(yellow_led3, LOW);
digitalWrite(red_led4, HIGH);
digitalWrite(green_led4, LOW);
digitalWrite(yellow_led4, LOW);
} else if (checkObstacle(TRIGGER_PIN2, ECHO_PIN2)) {
// Section B detected obstacle
digitalWrite(green_led2, HIGH);
digitalWrite(red_led2, LOW);
digitalWrite(yellow_led2, LOW);
digitalWrite(red_led1, HIGH);
digitalWrite(green_led1, LOW);
digitalWrite(yellow_led1, LOW);
digitalWrite(red_led3, HIGH);
digitalWrite(green_led3, LOW);
digitalWrite(yellow_led3, LOW);
digitalWrite(red_led4, HIGH);
digitalWrite(green_led4, LOW);
digitalWrite(yellow_led4, LOW);
} else if (checkObstacle(TRIGGER_PIN3, ECHO_PIN3)) {
// Section C detected obstacle
digitalWrite(green_led3, HIGH);
digitalWrite(red_led3, LOW);
digitalWrite(yellow_led3, LOW);
digitalWrite(red_led1, HIGH);
digitalWrite(green_led1, LOW);
digitalWrite(yellow_led1, LOW);
digitalWrite(red_led2, HIGH);
digitalWrite(green_led2, LOW);
digitalWrite(yellow_led2, LOW);
digitalWrite(red_led4, HIGH);
digitalWrite(green_led4, LOW);
digitalWrite(yellow_led4, LOW);
} else if (checkObstacle(TRIGGER_PIN4, ECHO_PIN4)) {
// Section D detected obstacle
digitalWrite(green_led4, HIGH);
digitalWrite(red_led4, LOW);
digitalWrite(yellow_led4, LOW);
digitalWrite(red_led1, HIGH);
digitalWrite(green_led1, LOW);
digitalWrite(yellow_led1, LOW);
digitalWrite(red_led2, HIGH);
digitalWrite(green_led2, LOW);
digitalWrite(yellow_led2, LOW);
digitalWrite(red_led3, HIGH);
digitalWrite(green_led3, LOW);
digitalWrite(yellow_led3, LOW);
}
// Wait until obstacle is removed
while (checkEmergency()) {
// Continue monitoring for obstacle
}
// Return to normal traffic system
normalTraffic();
}