/* Einschaltzeiten mit millis() erzeugen
 * Ein PIR-Sensor triggert jeweils zusätzlich das Stockwerk oben und unten, die Ausschaltzeiten werden jeweils gespeichert.
 * Wenn die Ausschaltzeit der jeweiligen LED erreicht ist, wird diese ausgeschaltet.
 */
//***** Taster und LEDs wie auf bleuer Platine **********************
const int LED7=32, LED6=33, LED5=25, LED4=26, LED3=27, LED2=14,LED1=12, LED0=13;
const int PIR7=23, PIR6=22, PIR5=21, PIR4=19, PIR3=18, PIR2=5, PIR1=17, PIR0=16;

//***** Globale Variablen *******************************************
unsigned long Aus7, Aus6, Aus5, Aus4, Aus3, Aus2, Aus1, Aus0;
unsigned long Laufzeit;

//***** Setup, wird 1x ausgeführt ***********************************
void setup() {
  Serial.begin(115200);
  pinMode(LED7, OUTPUT);  pinMode(LED6, OUTPUT);
  pinMode(LED5, OUTPUT);  pinMode(LED4, OUTPUT);
  pinMode(LED3, OUTPUT);  pinMode(LED2, OUTPUT);
  pinMode(LED1, OUTPUT);  pinMode(LED0, OUTPUT);
  pinMode(PIR7, INPUT);  pinMode(PIR6, INPUT);
  pinMode(PIR5, INPUT);  pinMode(PIR4, INPUT);
  pinMode(PIR3, INPUT);  pinMode(PIR2, INPUT);
  pinMode(PIR1, INPUT);  pinMode(PIR0, INPUT);
  
  Laufzeit = 10000; // 10 Sekunden
}

//***** Loop wird immer wieder ausgeführt ****************************
void loop() {
	unsigned long currentMillis = millis ( );
	// nachtriggerbar, wenn der Sensor bei leuchtender LED
	// wieder aktiviert wird, wird die Zeit verlängert
	if(digitalRead(PIR7) ) { // Kein Stockwerk darüber
		digitalWrite(LED7, HIGH );     // EINschalten
		digitalWrite(LED6, HIGH );     // EINschalten
		Aus7 = Aus6 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus7 ) digitalWrite(LED7, LOW );     // AUSschalten
	
	if(digitalRead(PIR6) ) {
		digitalWrite(LED7, HIGH );     // EINschalten
		digitalWrite(LED6, HIGH );     // EINschalten
		digitalWrite(LED5, HIGH );     // EINschalten
		Aus7 = Aus6 = Aus5 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus6 ) digitalWrite(LED6, LOW );     // AUSschalten
	
	if(digitalRead(PIR5) ) {
		digitalWrite(LED6, HIGH );     // EINschalten
		digitalWrite(LED5, HIGH );     // EINschalten
		digitalWrite(LED4, HIGH );     // EINschalten
		Aus6 = Aus5 = Aus4 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus5 ) digitalWrite(LED5, LOW );     // AUSschalten
	
	if(digitalRead(PIR4) ) {
		digitalWrite(LED5, HIGH );     // EINschalten
		digitalWrite(LED4, HIGH );     // EINschalten
		digitalWrite(LED3, HIGH );     // EINschalten
		Aus5 = Aus4 = Aus3 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus4 ) digitalWrite(LED4, LOW );     // AUSschalten
	
	if(digitalRead(PIR3) ) {
		digitalWrite(LED4, HIGH );     // EINschalten
		digitalWrite(LED3, HIGH );     // EINschalten
		digitalWrite(LED2, HIGH );     // EINschalten
		Aus4 = Aus3 = Aus2 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus3 ) digitalWrite(LED3, LOW );     // AUSschalten
	
	if(digitalRead(PIR2) ) {
		digitalWrite(LED3, HIGH );     // EINschalten
		digitalWrite(LED2, HIGH );     // EINschalten
		digitalWrite(LED1, HIGH );     // EINschalten
		Aus3 = Aus2 = Aus1 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus2 ) digitalWrite(LED2, LOW );     // AUSschalten
	
	if(digitalRead(PIR1) ) {
		digitalWrite(LED2, HIGH );     // EINschalten
		digitalWrite(LED1, HIGH );     // EINschalten
		digitalWrite(LED0, HIGH );     // EINschalten
		Aus2 = Aus1 = Aus0 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus1 ) digitalWrite(LED1, LOW );     // AUSschalten
	
	if(digitalRead(PIR0) ) {  // kein Stockwrek darunter
		digitalWrite(LED1, HIGH );     // EINschalten
		digitalWrite(LED0, HIGH );     // EINschalten
		Aus1 = Aus0 = currentMillis + Laufzeit;
	}
	if ( currentMillis >= Aus0 ) digitalWrite(LED0, LOW );     // AUSschalten
		
}

LED32
LED33
LED25
LED26
LED27
LED14
LED13
LED12
Treppenhauslicht, 8 Stockwerke mit Bewegungsmeldern
5.OG
4.OG
6.OG
3.OG
2.OG
1.OG
UG
EG