// Arduino code to control a 4-way traffic light with countdown timers
// Define pins for each traffic light's Red, Yellow, and Green LEDs
const int TL1_R = 2, TL1_Y = 1, TL1_G = 0;
const int TL2_R = 8, TL2_Y = 9, TL2_G = 10;
const int TL3_R = 6, TL3_Y = 5, TL3_G = 4;
const int TL4_R = 11, TL4_Y = 12, TL4_G = 13;
// Timer settings
const int greenDuration = 10; // Duration of green light in seconds
const int yellowDuration = 3; // Duration of yellow light in seconds
int countdownTimer = 0;
void setup() {
// Set all LED pins as output
pinMode(TL1_R, OUTPUT);
pinMode(TL1_Y, OUTPUT);
pinMode(TL1_G, OUTPUT);
pinMode(TL2_R, OUTPUT);
pinMode(TL2_Y, OUTPUT);
pinMode(TL2_G, OUTPUT);
pinMode(TL3_R, OUTPUT);
pinMode(TL3_Y, OUTPUT);
pinMode(TL3_G, OUTPUT);
pinMode(TL4_R, OUTPUT);
pinMode(TL4_Y, OUTPUT);
pinMode(TL4_G, OUTPUT);
// Initialize all lights to red
setAllRed();
}
void loop() {
// Cycle through each traffic light
for (int i = 1; i <= 4; i++) {
// Green light phase
startGreenPhase(i, greenDuration);
// Yellow light phase
startYellowPhase(i, yellowDuration);
}
}
void startGreenPhase(int lightNumber, int duration) {
// Set all lights to red
setAllRed();
// Turn on green light for the given light number
switch (lightNumber) {
case 1:
digitalWrite(TL1_R, LOW);
digitalWrite(TL1_G, HIGH);
break;
case 2:
digitalWrite(TL2_R, LOW);
digitalWrite(TL2_G, HIGH);
break;
case 3:
digitalWrite(TL3_R, LOW);
digitalWrite(TL3_G, HIGH);
break;
case 4:
digitalWrite(TL4_R, LOW);
digitalWrite(TL4_G, HIGH);
break;
}
// Countdown timer for green light
countdownTimer = duration;
while (countdownTimer > 0) {
delay(1000); // 1 second delay
countdownTimer--;
}
}
void startYellowPhase(int lightNumber, int duration) {
// Turn off green light and turn on yellow light for the given light number
switch (lightNumber) {
case 1:
digitalWrite(TL1_G, LOW);
digitalWrite(TL1_Y, HIGH);
break;
case 2:
digitalWrite(TL2_G, LOW);
digitalWrite(TL2_Y, HIGH);
break;
case 3:
digitalWrite(TL3_G, LOW);
digitalWrite(TL3_Y, HIGH);
break;
case 4:
digitalWrite(TL4_G, LOW);
digitalWrite(TL4_Y, HIGH);
break;
}
// Countdown timer for yellow light
countdownTimer = duration;
while (countdownTimer > 0) {
delay(1000); // 1 second delay
countdownTimer--;
}
// Turn off yellow light and set light to red
switch (lightNumber) {
case 1:
digitalWrite(TL1_Y, LOW);
digitalWrite(TL1_R, HIGH);
break;
case 2:
digitalWrite(TL2_Y, LOW);
digitalWrite(TL2_R, HIGH);
break;
case 3:
digitalWrite(TL3_Y, LOW);
digitalWrite(TL3_R, HIGH);
break;
case 4:
digitalWrite(TL4_Y, LOW);
digitalWrite(TL4_R, HIGH);
break;
}
}
void setAllRed() {
// Turn all traffic lights to red
digitalWrite(TL1_R, HIGH);
digitalWrite(TL1_Y, LOW);
digitalWrite(TL1_G, LOW);
digitalWrite(TL2_R, HIGH);
digitalWrite(TL2_Y, LOW);
digitalWrite(TL2_G, LOW);
digitalWrite(TL3_R, HIGH);
digitalWrite(TL3_Y, LOW);
digitalWrite(TL3_G, LOW);
digitalWrite(TL4_R, HIGH);
digitalWrite(TL4_Y, LOW);
digitalWrite(TL4_G, LOW);
}