#define LED_Red 2
#define LED_Yellow 4
#define LED_Green 8
int i = 0;
uint32_t timer = 0;
void setup() {
pinMode(LED_Red, OUTPUT);
pinMode(LED_Yellow, OUTPUT);
pinMode(LED_Green, OUTPUT);
}
void loop() {
switch (i) {
case 0:
digitalWrite(LED_Red, 1); // Включился красный
timer = millis();
i++;
break;
case 1:
if (millis() - timer >= 5000) // 5000 ms. К красному добавляется жёлтый
{
digitalWrite(LED_Yellow, 1);
timer = millis();
i++;
}
break;
case 2:
if (millis() - timer >= 2000) { // 2000 ms. Загорается зелёный, остальные выключаются
digitalWrite(LED_Red, 0);
digitalWrite(LED_Yellow, 0);
digitalWrite(LED_Green, 1);
timer = millis();
i++;
}
break;
case 3:
if (millis() - timer >= 5000) { // После 5000 мс зелёный выключается
digitalWrite(LED_Green, 0);
timer = millis();
i++;
}
break;
case 4:
case 6:
case 8:
case 10:
case 12:
if (millis() - timer >= 500) { // Через 500 мс зелёный включается
digitalWrite(LED_Green, 1);
timer = millis();
i++;
}
break;
case 5:
case 7:
case 9:
case 11:
case 13:
if (millis() - timer >= 500) { // Через 500 мс зелёный отключается
digitalWrite(LED_Green, 0);
timer = millis();
i++;
}
break;
case 14:
digitalWrite(LED_Yellow, 1);
timer = millis();
i++;
break;
case 15:
if (millis() - timer >= 2000) { // Жёлтый выключается
digitalWrite(LED_Yellow, 0);
timer = millis();
i = 0;
}
break;
/*default: // Не обязательно. Работает и без default. Ведь до setup i и так жёстко задано i = 0.
i = 0;
break;*/
}
}