const int redPins[] = {2, 5, 8, 11}; // Red LEDs for each lane
const int amberPins[] = {3, 6, 9, 12}; // Amber LEDs
const int greenPins[] = {4, 7, 10, 13}; // Green LEDs
// Timing constants
const unsigned long greenDuration = 5000; // Time each green stays on
const unsigned long amberDuration = 2000; // Amber delay = 2 sec
const unsigned long redDelay = 5000; // Red delay = 5 sec
void setup() {
// Set all pins to OUTPUT mode
for (int i = 0; i < 4; i++) {
pinMode(redPins[i], OUTPUT);
pinMode(amberPins[i], OUTPUT);
pinMode(greenPins[i], OUTPUT);
}
setInitialLights();
}
void loop() {
for (int i = 0; i < 4; i++) {
int next = (i + 1) % 4;
// Step 1: Current (i) and Next (next) to Amber
digitalWrite(greenPins[i], LOW);
digitalWrite(amberPins[i], HIGH);
digitalWrite(redPins[next], HIGH); // Make sure next lane is Red
delay(amberDuration);
// Step 2: Current to Red, wait 5 sec, then Next to Green
digitalWrite(amberPins[i], LOW);
digitalWrite(redPins[i], HIGH); // Current lane turns Red
delay(redDelay); // Wait 5 sec
digitalWrite(greenPins[next], HIGH); // Next lane Green
digitalWrite(redPins[next], LOW);
delay(greenDuration);
}
}
// Set startup state: Lane 1 green, rest red
void setInitialLights() {
for (int i = 0; i < 4; i++) {
digitalWrite(redPins[i], HIGH); // All Red by default
digitalWrite(amberPins[i], LOW);
digitalWrite(greenPins[i], LOW);
}
digitalWrite(redPins[0], LOW); // Lane 1 = Green
digitalWrite(greenPins[0], HIGH);
}
Lane 4
Lane 1
Lane 2
Lane 3