// Define pin numbers for traffic lights
int red1 = 2;
int yellow1 = 3;
int green1 = 4;
int red2 = 5;
int yellow2 = 6;
int green2 = 7;
int red3 = 8;
int yellow3 = 9;
int green3 = 10;
int red4 = 11;
int yellow4 = 12;
int green4 = 13;
// Define pin numbers for emergency switches
int emergencySwitch1Pin = A0;
int emergencySwitch2Pin = A1;
int emergencySwitch3Pin = A2;
int emergencySwitch4Pin = A3;
void setup()
{
// Set pin modes for traffic lights
for (int i = 2; i <= 13; i++) {
pinMode(i, OUTPUT);
}
// Set pin modes for emergency switches
pinMode(emergencySwitch1Pin, INPUT);
pinMode(emergencySwitch2Pin, INPUT);
pinMode(emergencySwitch3Pin, INPUT);
pinMode(emergencySwitch4Pin, INPUT);
}
void loop()
{
// Check if any emergency switch is activated
if (digitalRead(emergencySwitch1Pin) == HIGH) {
handleEmergency1(green1);
} else if (digitalRead(emergencySwitch2Pin) == HIGH) {
handleEmergency2(green2);
} else if (digitalRead(emergencySwitch3Pin) == HIGH) {
handleEmergency3(green3);
} else if (digitalRead(emergencySwitch4Pin) == HIGH) {
handleEmergency4(green4);
} else {
// If no emergency, operate traffic lights normally
normalOperation();
}
}
// Function to handle traffic lights during an emergency for a specific direction
void handleEmergency1(int emergencyGreenPin)
{
// Turn off all lights
allLightsOff();
// Prioritize specific direction (green light)
digitalWrite(emergencyGreenPin, HIGH);
digitalWrite(5,1);
digitalWrite(8,1);
digitalWrite(11,1);
}
void handleEmergency2(int emergencyGreenPin)
{
// Turn off all lights
allLightsOff();
// Prioritize specific direction (green light)
digitalWrite(emergencyGreenPin, HIGH);
digitalWrite(2,1);
digitalWrite(8,1);
digitalWrite(11,1);
}
void handleEmergency3(int emergencyGreenPin)
{
// Turn off all lights
allLightsOff();
// Prioritize specific direction (green light)
digitalWrite(emergencyGreenPin, HIGH);
digitalWrite(5,1);
digitalWrite(2,1);
digitalWrite(11,1);
}
void handleEmergency4(int emergencyGreenPin)
{
// Turn off all lights
allLightsOff();
// Prioritize specific direction (green light)
digitalWrite(emergencyGreenPin, HIGH);
digitalWrite(5,1);
digitalWrite(8,1);
digitalWrite(2,1);
}
// Function to operate traffic lights normally
/*void normalOperation()
{
// Simulate traffic light cycle for each direction
// (Adjust timings as needed)
trafficLightCycle(red1, yellow1, green1, 2000);
trafficLightCycle(red2, yellow2, green2, 2000);
trafficLightCycle(red3, yellow3, green3, 2000);
trafficLightCycle(red4, yellow4, green4, 2000);
}
// Function to simulate traffic light cycle
// Function to simulate traffic light cycle
void trafficLightCycle(int redPin, int yellowPin, int greenPin, int greenDuration)
{
// Turn on green light
digitalWrite(greenPin, HIGH);
delay(greenDuration);
// Turn off green light
digitalWrite(greenPin, LOW);
// Turn on yellow light
digitalWrite(yellowPin, HIGH);
delay(1000); // Adjust yellow light duration
// Turn off yellow light
digitalWrite(yellowPin, LOW);
// Turn on red light
digitalWrite(redPin, HIGH);
delay(2000); // Adjust red light duration
// Turn off red light
digitalWrite(redPin, LOW);
}
*/
void normalOperation()
{
direction(red1, yellow1, green1, red2, yellow2, green2, red3, yellow3, green3, red4, yellow4, green4);
direction(red2, yellow2, green2, red1, yellow1, green1, red3, yellow3, green3, red4, yellow4, green4);
direction(red3, yellow3, green3, red1, yellow1, green1, red2, yellow2, green2, red4, yellow4, green4);
direction(red4, yellow4, green4, red1, yellow1, green1, red2, yellow2, green2, red3, yellow3, green3);
}
// Function to turn off all lights
void allLightsOff()
{
for (int i = 2; i <= 13; i++) {
digitalWrite(i, LOW);
}
}
void direction(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l)
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
digitalWrite(h, LOW);
digitalWrite(i, LOW);
digitalWrite(j, HIGH);
digitalWrite(k, LOW);
digitalWrite(l, LOW);
delay(5000);
digitalWrite(c, LOW);
digitalWrite(b, HIGH);
delay(3000);
}