Arduino
Mit diesem Programm passiert das Gleiche wie auf der Seite zuvor.
Die rote LED blinkt 3 mal, je mit Pausen und dann die Grüne und die Blaue, auch je mit Pause dazwischen.
Nur nutzen wir hier eine andere Möglichkeit der Abfrage, ob die Variable zaehlerRot ihren Wert erreicht hat.
Ein Hinweis noch; es gibt unterschiede zwischen for, while, if, if else.
Um es nur erst mal kurz anzusprechen, bei manchen gibt es auf jeden Fall wenigstens einen Durchlauf, bevor eine Abfrage gestartet wird und mit der Bedingung verglichen und dann gibt es auch, dass gleich abgefragt wird und die Funktion gar nicht erst startet, da die Bedingung schon beim Start erfüllt ist.
Hier aber zunächst das Programm mit WHILE:
int rot = 12;
int gruen = 8;
int blau = 7;
int pause = 1000;
int zaehlerRot = 0;
void roteLed() {
digitalWrite(rot, HIGH);
delay(pause);
digitalWrite(rot, LOW);
delay(pause);
}
void uebrigeLed(){
digitalWrite(gruen, HIGH);
delay(pause);
digitalWrite(gruen, LOW);
delay(pause);
digitalWrite(blau, HIGH);
delay(pause);
digitalWrite(blau, LOW);
delay(pause);
}
void setup() {
pinMode(rot, OUTPUT);
pinMode(gruen, OUTPUT);
pinMode(blau, OUTPUT);
}
void loop() {
while (zaehlerRot < 3) {
roteLed();
zaehlerRot = zaehlerRot +1;
}
uebrigeLed();
zaehlerRot = 0;
}
Auch hier erzeuge ich erst Variablen mit dem Typ int für Ganzzahlen, um die Ausgänge besser zuordnen zu können. An Pin 12 ist die Rote LED angeschlossen, an Pin 8 die Grüne, … dann die pause auf 1000 Millisekunden festlegen (hier könnte man auch eine Konstante nutzen, wenn man nicht vor hätte sie im Laufe des Programms zu ändern. Und zum Schluss noch die Variable um die Durchläuft für rot zu erzeugen – zaehlerRot.
Wieder eine Funktion für die roteLed schreiben, in der wir mit digitalWrite sagen, dass hier etwas ausgegeben werden soll. Mit dem Wort rot greifen wir im Grunde nur auf den Wert zu, der sich dahinter versteckt, weil das unsere Variable ist – also 12.
Die grüne und blaue LED kommt dieses mal zusammen in eine Funktion und heißt hier uebrigeLed. Wenn man sich die Zeilen anschaut, dann ist das nur ein Ablauf von einschalten, ausschalten und Pausen dazwischen. Die Pausen werden mit delay und der Zeit in Millisekunden angegeben. Da wir oben eine Variable pause mit 1000 angelegt haben, kann hinter delay also auch der Name der Variablen eingetragen werden. Bei delay pausiert der Arduino für die angegebene Zeit, es passiert also nichts anderes für die angegebene Zeit. Für unseren Zweck ist das ausreichend. Es gibt aber Programme, da sollte im Hintergrund schon noch was laufen und nicht alles stillstehen. Dafür gibt es einen anderen Befehl – dazu später dann.
Zum wichtigen Teil:
Solange (zaehlerRot kleiner als 3 ist) führe folgendes aus
Funktion roteLed();
Nach dem Blinken ist zeahlerRot = zaehlerRot +1; wird also um 1 erhöht.
Dann vergleiche wieder ob zeahlerRot immer noch kleiner 3 ist. Ist es kleiner, dann blink noch
mal und erhöhe die Variable zahlerRot noch mal um +1.
Hat zaehlerRot 3 erreicht, weil 3 nicht mehr kleiner als 3 ist, dann gehe zur nächsten Funktion.
Funktion uebrigeLed();
dazu schaut das Programm was ganz am Anfang in die Funktion uebrigeLed() geschrieben
wurde und läuft es Schritt für Schritt ab.
Ist es fertig, dann setze die Variable zeahlerRot wieder auf 0 zurück.
Genau hier ist der Unterschied. Würde die Variable zeahlerRot hier am Ende nicht wieder auf 0 zurückgesetzt werden, dann würde auch hier die Rote LED beim zweiten Durchlauf nicht blinken, da die Bedingung (kleiner 3) nicht mehr erfüllt ist, weil sie ja noch 3 hat.
Schreibt man diesen Rücksetzer der Variablen auch in die for Abfrage (Seite zuvor), dann blinkt auch da die Rote LED wieder beim zweiten Durchlauf.