#define RED 8
#define YELLOW 9
#define GREEN 10
#define T_RED 5000 // красный — 5 сек
#define T_GREEN 5000 // зелёный — 5 сек
#define T_YELLOW 2000 // жёлтый — 2 сек
enum { S_RED, S_GREEN, S_YELLOW };
byte state = S_RED;
unsigned long timer = 0; // момент последнего переключения
void setup() {
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
digitalWrite(RED, HIGH); // старт — красный
timer = millis();
}
void loop() {
unsigned long now = millis();
switch (state) {
case S_RED:
if (now - timer >= T_RED) {
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
state = S_GREEN;
timer = now;
}
break;
case S_GREEN:
if (now - timer >= T_GREEN) {
digitalWrite(GREEN, LOW);
digitalWrite(YELLOW, HIGH);
state = S_YELLOW;
timer = now;
}
break;
case S_YELLOW:
if (now - timer >= T_YELLOW) {
digitalWrite(YELLOW, LOW);
digitalWrite(RED, HIGH);
state = S_RED;
timer = now;
}
break;
}
}