const int redPins[3] = {32, 33, 12};
const int yellowPins[3] = {25, 26, 13};
const int greenPins[3] = {22, 23, 15};
const int switchPins[3] = {34, 35, 27};
const unsigned long redTime = 6000;
const unsigned long yellowTime = 2000;
const unsigned long greenTime = 6000;
unsigned long previousMillis[3] = {0, 0, 0};
enum LightState { RED, GREEN, YELLOW };
LightState currentState[3] = { RED, RED, RED };
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(redPins[i], OUTPUT);
pinMode(yellowPins[i], OUTPUT);
pinMode(greenPins[i], OUTPUT);
pinMode(switchPins[i], INPUT_PULLUP);
digitalWrite(redPins[i], HIGH);
digitalWrite(yellowPins[i], LOW);
digitalWrite(greenPins[i], LOW);
}
}
void loop() {
unsigned long currentMillis = millis();
for (int i = 0; i < 3; i++) {
bool switchState = digitalRead(switchPins[i]) == LOW;
if (switchState) {
digitalWrite(redPins[i], LOW);
digitalWrite(yellowPins[i], LOW);
digitalWrite(greenPins[i], LOW);
currentState[i] = RED;
previousMillis[i] = currentMillis; //
continue;
}
switch (currentState[i]) {
case RED:
if (currentMillis - previousMillis[i] >= redTime) {
digitalWrite(redPins[i], LOW);
digitalWrite(greenPins[i], HIGH);
previousMillis[i] = currentMillis;
currentState[i] = GREEN;
}
break;
case GREEN:
if (currentMillis - previousMillis[i] >= greenTime) {
digitalWrite(greenPins[i], LOW);
digitalWrite(yellowPins[i], HIGH);
previousMillis[i] = currentMillis;
currentState[i] = YELLOW;
break;
case YELLOW:
if (currentMillis - previousMillis[i] >= yellowTime) {
digitalWrite(yellowPins[i], LOW);
digitalWrite(redPins[i], HIGH);
previousMillis[i] = currentMillis;
currentState[i] = RED;
}
break;
}
}
}