const byte led1 = 2;
const byte led2 = 5;
const byte led3 = 8;
enum {IDLE, LED1, LED2, LED3} state = IDLE;
// will return true when done
bool process(bool forceReset = false) {
static unsigned long t0;
if (forceReset) {
t0 = millis();
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
state = LED1;
return false;
}
switch (state) {
case IDLE: break;
case LED1:
if (millis() - t0 >= 5000) {
t0 = millis();
digitalWrite(led2, HIGH);
state = LED2;
}
break;
case LED2:
if (millis() - t0 >= 2000) {
t0 = millis();
digitalWrite(led3, HIGH);
state = LED3;
}
break;
case LED3:
if (millis() - t0 >= 3000) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
state = IDLE;
return true;
}
break;
}
return false;
}
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
process(true); // start our process
}
void loop() {
if (process()) {
delay(1000); // wait 1s
process(true); // and relaunch
}
}