/*******************************************************************************************
Ampelprogramm für eine Auto- und eine Fussgängerampel mit Schalter
von Stefan Hermann

Website: www.physical-computing.de
*******************************************************************************************/

int autoRot = 12;                   // Pin für die Autoampel Rot
int autoGelb = 10;                  // Pin für die Autoampel Gelb
int autoGruen = 8;                  // Pin für die Autoampel Grün
int fussRot = 7;                    // Pin für die Fußgängerampel Rot
int fussGruen = 4;                  // Pin für die Fußgängerampel Rot
int fussBtn = 2;                    // Button für die Fußgänger
int val = 0;                        // Hilfsvariable um den Zustand des Button zu speichern

void setup() {                      // Funktion, die nur einmal durchlaufen wird
  pinMode(fussRot, OUTPUT);         // Festlegen der Ampelpins als Ausgang
  pinMode(fussGruen, OUTPUT);       // Festlegen der Ampelpins als Ausgang
  pinMode(autoRot, OUTPUT);         // Festlegen der Ampelpins als Ausgang
  pinMode(autoGelb, OUTPUT);        // Festlegen der Ampelpins als Ausgang
  pinMode(autoGruen, OUTPUT);       // Festlegen der Ampelpins als Ausgang
  pinMode(fussBtn, INPUT);          // Festlegen des Button-Pins als Eingang
}

void loop(){                        // Funktion, die kontinuierlich durchlaufen wird
  digitalWrite (fussRot, HIGH);     // schaltet die Fußgängerampel auf rot
  digitalWrite (autoGruen, HIGH);   // schaltet die Autoampel auf grün
  val = digitalRead(fussBtn);       // speichern des Buttonwertes
  // Der Button sendet wenn er nicht gedrückt ist ein HIGH-Signal. Wenn man ihn drückt, wird ein LOW-Signal ausgegeben.
  if (val == LOW) {                 // wenn der Buttonwert LOW ist dann:
    delay(2000);                    // zwei Sekunden warten
    digitalWrite(autoGruen, LOW);   // Autoampel Grün ausschalten 
    digitalWrite(autoGelb, HIGH);   // Autoampel Gelb einschalten
    delay(3000);                    // drei Sekunden warten
    digitalWrite(autoGelb, LOW);    // Autoampel Gelb abschalten 
    digitalWrite(autoRot, HIGH);    // Autoampel Rot einschalten
    delay(3000);                    // drei Sekunden warten
    digitalWrite(fussGruen, HIGH);  // Fußgängerampel Grün einschalten
    digitalWrite(fussRot, LOW);     // Fußgängerampel Rot abschalten
    delay(10000);                   // zehn Sekunden warten (OK, das müssen schnelle Fussgänger sein.)
    digitalWrite(fussGruen, LOW);   // Fußgängerampel Grün abschalten
    digitalWrite(fussRot, HIGH);    // Fußgängerampel Rot einschalten    
    delay(3000);                    // drei Sekunden warten
    digitalWrite(autoGelb, HIGH);   // Autoampel Gelb einschalten
    delay(3000);                    // drei Sekunden warten
    digitalWrite(autoGelb, LOW);    // Autoampel Gelb abschalten
    digitalWrite(autoRot, LOW);     // Autoampel Rot abschalten
  }                                 // Ende der if-Abfrage
}