Kommen wir zu einem weiteren wichtigen Konzept beim Programmieren: Bedingte Anweisungen – auch bekannt als if…else… Mit Hilfe dieser Anweisungen kannst du in deinem Sketch Abzweigungen für bestimmte Ereignisse einbauen.
Zum Einsatz kommt wieder die LED, die sich bereits auf deinem Breadboard befindet. Außerdem verwendest du wieder den Zähler, der jede Sekunde eine Zahl um 1 erhöht und diese im Seriellen Monitor ausgibt.
Die LED soll diesmal immer nur aufleuchten, wenn die aktuelle Zahl durch 3 teilbar ist. Bei allen anderen Zahlen bleibt sie aus.
Hierfür eignen sich bedingte Anweisungen. Aber eins nach dem anderen. Zunächst deklarierst du zu Beginn des Sketchs einige Variablen:
___STEADY_PAYWALL___
int ledPin = 9;
int zahl = 1;
int rest;
Die ersten beiden kennst du schon aus früheren Lektionen. Die dritte Variable rest benötigst du, um zu testen, ob die aktuelle zahl durch 3 teilbar ist. Den Wert von rest setzt du zu Beginn auf 1.
Im Code oben siehst du eine weitere Kurzform. Statt zu schreiben
int rest = 1;
reicht auch einfach der Name der Variablen und ein abschließendes Semikolon ;
Das funktioniert übrigens auch mit Strings:
String text; // erzeugt ebenso einen leeren String wie:
String text = "";
Die Setup-Funktion
In der Funktion void setup() befindet sich ebenfalls Code, den du bereits kennst. Hier startest du den Seriellen Monitor und definierst den pinMode des ledPin:
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
Die Loop-Funktion
Im Loop gibst du zunächst den aktuellen Wert der Variable zahl im Seriellen Monitor aus – beim ersten Durchlauf also die 1.
Serial.println(zahl);
Anschließend folgt der Test, ob diese Zahl durch 3 teilbar ist. Das machst du mit dem sogenannten Modulo.
rest = zahl % 3;
Den Modulo schreibst du mit einem Prozentzeichen %. Er berechnet den Rest, wenn eine ganze Zahl durch eine andere geteilt wird. Wenn du eine 3 durch eine 3 teilst – ist der Rest 0. Teilst du die 4 durch 3 ist der Rest 1. Diesen Rest speicherst du in der gleichnamigen Variablen.
Wenn der Rest 0 ist…dann…
Jetzt kommt die bedingte Anweisung ins Spiel. Immer wenn in der Variablen rest der Wert 0 steckt (die aktuelle Zahl also durch 3 teilbar ist), soll die LED aufleuchten. Wenn nicht, dann soll sie ausgeschaltet bleiben.
Das funktioniert so:
if (rest == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
In Pseudocode ausgedrückt, würde diese Anweisung folgendermaßen aussehen:
wenn rest 0 ist, dann
schalte die LED an;
wenn nicht, dann
schalte sie aus;
In der ersten Anweisung if prüfst du, ob etwas wahr ist – in unserem Fall, ob in der Variablen rest die Zahl 0 gespeichert (und die aktuelle Zahl also durch 3 teilbar) ist. Falls das tatsächlich wahr ist, wird der Code zwischen den geschweiften Klammern { } ausgeführt. Das ist die erste mögliche Abzweigung in deinem Code.
Anschließend gibst du mit else für alle anderen Fälle eine weitere Abzweigung vor, die sich in den geschweiften Klammern dahinter befindet. In diesen Fällen wird die LED ausgeschaltet.
Vergleichsoperatoren
Immer wenn du prüfst, ob etwas wahr oder falsch ist, benötigst du die sogenannten Vergleichsoperatoren.
Im Code oben hast du diese Prüfung mit einem doppelt Gleichheitszeichen == angestellt:
rest == 0
Wenn in der Variablen rest der Wert 0 gespeichert war, ergab diese Prüfung wahr bzw. true und der der Code in den geschweiften Klammern wurde ausgeführt.
In allen anderen Fällen ergab die Prüfung false und der Code in den geschweiften Klammern hinter else wurde ausgeführt.
Es gibt noch einige andere Vergleichsoperatoren, die du sicherlich schon aus dem Mathe-Unterricht kennst:
== | ist etwas gleich? |
!= | ist etwas ungleich? |
< | ist etwas kleiner? |
<= | ist etwas kleiner oder gleich? |
> | ist etwas größer? |
>= | ist etwas größer oder gleich? |
Mit ihnen kannst du zum Beispiel prüfen, ob eine Zahl kleiner oder größer als eine andere ist. Etwas Besonderes ist !=, denn hiermit wird etwas true, wenn die eine Seite nicht der anderen entspricht:
3 != 4 // ist wahr, also true
Zurück zum Sketch. Es fehlen nämlich noch zwei Zeilen für den Zähler, die du jedoch auch schon kennst.
zahl++;
delay(1000);
In der ersten Zeile erhöhst du den Wert in der Variablen zahl um 1 und in der zweiten Zeile wartest du eine Sekunde, bis du den nächsten Durchlauf der Loop-Funktion startest. Lade den Sketch aus den Downloads nun auf deinen Arduino und probiere ihn aus.
In der nächsten Lektion kommt ein weiteres Bauteil hinzu: ein Poti, mit dem du die LED dimmen kannst.