HO Hausbeleuchtung mit millis steuern

Brauche mal wieder Eure Hilfe.

Dies ist mein erster Versuch mit millis.

Mein Ziel ist die Beleuchtung der einzelne Räume so zu schalten, das erst im Treppenhaus die Beleuchtung angeht danach in einem Raum. Die Zeiten sollen sich überschneiden, so dass das Preiserlein nicht im Dunklen steht.
Den Sketch den ich geschrieben habe funktioniert beim ersten Durchlauf. Danach verschieben sich die einzelnen Zeiten. Erst bei jedem siebten Durchlauf stimmt die Reihenfolge wieder.

Wäre Euch dankbar wenn mir jemand erklärt wo mein Denkfehler liegt.

Danke im Voraus

unsigned long LED1_timestore;  
int LED1Status = LOW;
int LED1Pin = 13;
unsigned long LED2_timestore;  
int LED2Status = LOW;
int LED2Pin = 12;

void setup()
{
  pinMode(LED1Pin, OUTPUT);
  pinMode(LED2Pin, OUTPUT);
}

void loop() {
  if (LED1Status == LOW) {
    if (millis() - LED1_timestore > 10000 )
    {
      digitalWrite(LED1Pin, HIGH);
      LED1_timestore = millis();
      LED1Status = HIGH;
    }
  }
  else
  {
    if (millis() - LED1_timestore > 4000)
    {
      digitalWrite(LED1Pin, LOW);
      LED1Status = LOW;
    }
  }


  if (LED2Status == LOW)
  {
    if (millis() - LED2_timestore > 12000 )
    {
      digitalWrite(LED2Pin, HIGH);
      LED2_timestore = millis();
      LED2Status = HIGH;
    }
  }
  else
  {
    if (millis() - LED2_timestore > 4000)
    {
      digitalWrite(LED2Pin, LOW);
      LED2Status = LOW;
    }
  }

}

Mir sind die ganzen Bedingungen zu kompliziert.
Etwas naiver, wäre mir lieber.

Wie wäre es, mit einer einfachen Schrittkette?

Zur Anregung:

Simulation "belebtes Haus für die Modellbahn" by jurs

Lichtsteuerung Modellflugzeug (Standmodell)

Lichteffektsteuerung

Ein früher Versuch von mir für den ATtiny45:

// ATMEL ATTINY45 / ARDUINO
//
//                  +-\/-+
// Ain0 (D 5) PB5  1|    |8  Vcc
// Ain3 (D 3) PB3  2|    |7  PB2 (D 2) Ain1
// Ain2 (D 4) PB4  3|    |6  PB1 (D 1) pwm1
//            GND  4|    |5  PB0 (D 0) pwm0
//                  +----+

// Anregung durch "Leuchtturm LEDs schalten by Jurs" im Arduino-Forum Deutsch
//
#define N 7 	//Blink
#define B 8 	//Bad
#define W 9 	//Wohnzimmer
#define K 10	//Küche
#define L 11	//Laden
byte Zimmer[]             = {L, K, W, K, K, B, K, B, B, W, B, K, K, B, K, W, B, W, K, L, B};  // Pin-Nummer der zu schaltenden LED
unsigned int HausZeit[]   = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1};  // Sekunden Wartezeit (genauer Millisekunden/1024)
#define HausZeigerMax (sizeof(Zimmer)/sizeof(int *)) // Feldgroesse 
unsigned int HausZeigerakt = 0;   // Zeiger auf Feldelement
unsigned int HausZeitalt = 0;     // Sekundenzaehler bei letzter Aktion
//                            a    e    a    e    a    e     a    e    a    e      a
unsigned int BlinkZeit[] = {300, 100, 300, 300, 111, 300, 3333, 100, 300, 300, 20000};  // Millisekunden Wartezeit
#define BlinkZeigerMax (sizeof(Zimmer)/sizeof(int *)) // Feldgroesse 
unsigned int BlinkZeigerakt = 0;   // Zeiger auf Feldelement
unsigned long BlinkZeitalt = 0;   // Millisekundenzaehler bei letzter Aktion
boolean ein = HIGH;                // Wenn LEDs gegen +5V geschaltet sind, negiert sich die Logik
boolean aus = LOW;

void setup() {
  // Definiert die Ausgabepins
  pinMode(N, OUTPUT);	//Blink
  pinMode(B, OUTPUT);	//Bad
  pinMode(W, OUTPUT);	//Wohnzimmer
  pinMode(K, OUTPUT);	//Küche
  pinMode(L, OUTPUT);	//Laden
  digitalWrite(N, ein);
  digitalWrite(B, aus);
  digitalWrite(W, aus);
  digitalWrite(K, aus);
  digitalWrite(L, aus);
}


void Haus()
{
  if ((millis() >> 10) > (HausZeitalt + HausZeit[HausZeigerakt])) {
    if (HausZeigerakt < HausZeigerMax - 1) {                                      // Der Feldzeiger muss innerhalb des Feldes bleiben
      digitalWrite(Zimmer[HausZeigerakt], !digitalRead(Zimmer[HausZeigerakt]));   // Beleuchtung umschalten
      HausZeitalt = millis() >> 10;                                               // Sekunden merken
      HausZeigerakt++;                                                            // auf das naechste Feldelement zeigen
    } else {
      HausZeigerakt = 0;
    }
  }
}

void Blink()
{
  if (millis() > (BlinkZeitalt + BlinkZeit[BlinkZeigerakt])) {        // Zeit abwarten
    if (BlinkZeigerakt < BlinkZeigerMax - 1) {
      BlinkZeigerakt++;
    } else {
      BlinkZeigerakt = 0;
    }
    digitalWrite(N, !digitalRead(N));           // Blink-LED umschalten
    BlinkZeitalt = millis();                    // Milisekunden merken
  }
}

void loop() {
  Haus();
  Blink();
}

Danke für die Anregung und den Sketch.

Werde mich über Weihnachten damit beschäftigen.

Ich wünsche Euch allen ein Frohes Weihnachten.

Gruß BJS