// Variable hält Zeitpunkt, an dem als nächstes was gemacht werden soll
unsigned long nextActiveMillis;
// Variable hält aktuellen Schritt der Schrittkette:
// 0 - beide aus
// 1 - ROT an
// 2 - BEIDE an
int LEDstep;
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
// Anfangszustand herstellen: beide aus
digitalWrite(8, LOW);
digitalWrite(9, LOW);
LEDstep = 0; // der nächste Schritt ist dann 1 (ROT an)
nextActiveMillis = millis(); // wir beginnen sofort mit der ersten Aktion
}
void loop() {
// prüfen, ob wir aktiv werden müssen
if (millis() >= nextActiveMillis) {
// nächsten Schritt aktivieren
++LEDstep;
// bei Überschreiten des letzten Schritts wieder von vorne starten
if (LEDstep > 2)
LEDstep = 0;
// welchen Schritt führen wir als nächstes aus
if (LEDstep == 0) {
// beide ausschalten
digitalWrite(8, LOW);
digitalWrite(9, LOW);
// warte 300 ms bis zur nächsten Aktion
nextActiveMillis = millis() + 300;
}
else if (LEDstep == 1) {
// ROT anschalten, BLAU bleibt aus
digitalWrite(9, HIGH);
nextActiveMillis = millis() + 200;
}
else {
// BLAU auch anschalten
digitalWrite(8, HIGH);
nextActiveMillis = millis() + 500;
}
}
// hier könnten wir jetzt noch anderes Zeug machen, während wir auf das Eintreten des
// nächsten Schaltzustandes warten
}