/*----------------------------------------------------
Simulation einer österreichischen Auto-Verkehrsampel
----------------------------------------------------*/
// Pin-Belegung der 3 LEDs, Digitale Pins 2, 6 und 10
// Globale Variablen, die im gesamten Programm erkannt werden
// - Schlüsselwort const: Der Wert der Variablen (Pinbelegung) kann
// dadurch später nicht mehr verändert werden.
// - Datentyp int (=Integer, Ganzzahl: 1, 2, 3, ..., 1386, 501938, usw.)
// - Eindeutige Variablen-Namen: led_red, led_yellow ...
const int led_red = 2;
const int led_yellow = 6;
const int led_green = 10;
/* Funktion setup() - für Arduino erforderlich!
Funktion wird zu Beginn 1x ausgeführt
hier werden Aus-/Eingänge definiert und Diverses eingerichtet
*/
void setup() {
// LED-Pins werden als Ausgänge (OUTPUT) definiert
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
// Serieller Monitor wird gestartet mit Baudrate 9600
// Ist sinnvoll für das Nachvollziehen des Programms und
// beim Finden von Fehlern oder bei eigenartigem Verhalten
// (zB. falschen Ergebnissen) im Programm
// Serial.begin(9600);
}
/* Funktion loop() - für Arduino erforderlich!
Funktion wird direkt nach der setup-Funktion ausgeführt
und wird danach ständig wiederholt
*/
void loop() {
// 1. Phase: Rot leuchtet
digitalWrite(led_red, HIGH); // legt bei Pin led_red 5V an
delay(3000); // Verzögerung, Programm wird für 3 Sekunden pausiert
// 2. Phase: Rot+Gelb leuchten
digitalWrite(led_yellow, HIGH);
delay(1000);
// 3. Phase: Grün leuchtet
digitalWrite(led_red, LOW); // led_red wird wieder ausgeschaltet - 0V
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, HIGH);
delay(3000);
// i++ Kurzform für i = i + 1
// 4. Phase: Grün blinkt
int wert = blinkPhase(300);
// 5. Phase: Gelb leuchtet
digitalWrite(led_yellow, HIGH);
delay(1000);
digitalWrite(led_yellow, LOW);
}
int blinkPhase(int delayZeit) {
for (int i = 0; i < 4; i++) {
digitalWrite(led_green, LOW);
delay(delayZeit);
digitalWrite(led_green, HIGH);
delay(delayZeit);
}
digitalWrite(led_green, LOW);
return 5;
}
/* Eigens definierte Funktion blinken() für die 4. Phase
void ist der Datentyp der Funktion, die keinen Rückgabewert hat
*/
void blinken() {
/* for-Schleife
i ist Zählvariable für die Anzahl der Schleifenwiederholung
1) int i = 0 ... i wird mit Startwert 0 initialisiert
2) i <= 3 ...... for-Schleife wird durchlaufen, solange
i kleiner oder gleich 3 ist
3) i++ ......... Kurzform für i = i + 1
(i wird nach jedem Durchlauf um 1 erhöht)
*/
for (int i = 0; i <= 3; i++) {
Serial.println(i); // Ausgabe der Zählvariable am seriellen Monitor
digitalWrite(led_green, LOW);
delay(500);
digitalWrite(led_green, HIGH);
delay(500);
}
// nach dem Blinken wird die grüne LED abgedreht
digitalWrite(led_green, LOW);
}