In dieser Lektion lernt ihr zwei neue Dinge:

  • Wie man eine Sequenz von Handlungen wiederholt
  • Wie man Wiederholungen mit einer for-Schleife mit verschiedenen Peripheriegeräten durchführt

Wir benötigen hierfür:

  • Eine Steuerplatine der Arduino-Familie
  • Vier LEDs

Flusskontrolle

Die sequentielle Programmierung besteht darin, eine Reihe von Anweisungen und Kommandos nacheinander auszuführen. Diese Kommandos können Informationen lesen (über die Sensoren), Handlungen ausführen (zum Beispiel einen Servo bewegen) oder einfach nur interne Operationen durchführen (wie beispielsweise eine Summe zu bilden). In der vorigen Lektion haben wir uns ein Beispiel angesehen, in dem die Reihenfolge bei der Ausführung des Programms mit der if-else-Bedingung variiert wurde. Diese Anweisungen nennt man Flusskontroll-Anweisungen. Stell dir ein Programm vor, das eine LED einschaltet wenn die ausgelesene Lichtmenge kleiner als 300 ist und sich im umgekehrten Fall ausschaltet. In Abhängigkeit einer Variablen führen wir die Handlung LED einschalten oder die Handlung LED ausschalten durch. Dies wird deutlicher anhand der folgenden Abbildung:if_else

Handlungen wiederholen mit der for-Schleife

Die for-Schleife stellt eine andere Möglichkeit dar, die Ausführungsart des Programms zu ändern, indem eine Reihe von Anweisungen eine bestimmte Anzahl von Malen wiederholt wird, wie zum Beispiel, eine LED zehnmal hintereinander blinken zu lassen. Der Programmfluss würde dann folgendermaßen aussehen. forWir erstellen dieses Programm und erklären es Schritt für Schritt.

Analysieren wir dies blockweise

In diesem Block verwenden wir globale Variablen, um die Nummer des PIN anzugeben, der mit der LED verbunden wird. Außerdem erstellen wir eine boolsche Variable (die die Werte richtig und falsch annehmen kann). Wir verwenden diese Variable,wenn wir wissen wollen, ob das Programm zum ersten Mal ausgeführt wird. Dies ist ein Standardvorgang beim Programmieren wenn die Funktion loop() eins ums andere Mal ausgeführt wird. Wollen wir erreichen, dass das Programm nur ein einziges Mal ausgeführt wird, müssen wir eine Aktion wie die folgende durchführen.

Wenn die Funktion loop() erstmalig ausgeführt wird, hat die Variable primeraVez den Wert true (wahr). Dadurch kommen wir zur if-Bedingung und führen die kommende Anweisung durch. Das erste Kommando besteht darin, der Variable primeraVez den Wert false (falsch) zuzuweisen. Das nächste Mal, wenn die Funktion loop() ausgeführt wird, wird die Bedingung nicht mehr erfüllt und es wird daher digitalWrite(led_pin, LOW) ausgeführt. Die LED bleibt so dauerhaft ausgeschaltet. Analysieren wir jetzt die for-Schleife:

Als erstes:

Die for-Schleife besteht aus drei Teilen:

  • Die Variable mit der sie wiederholt wird und der Anfangswert, in diesem Fall int i=0. Wir wiederholen mit einer  Variable i, bei der es sich um eine ganze Zahl mit dem Anfangswert 0 handelt.
  • Die Steuerungsbedingung,was bedeutet, dass sich die for-Schleife so lange wiederholt wie die Bedingung zutrifft: i < 10 . Diese Überprüfung findet zu Beginn jeder Wiederholung statt. Das heißt, ist die Bedingung beim ersten Mal nicht erfüllt, gibt es keinerlei Wiederholung.
  • Die Aktion, die am Ende jeder Wiederholung ausgeführt wird, in diesem Fall i=i+1. Das bedeutet, dass nach jeder Wiederholung eine Einheit hinzukommt (es könnte auch jede andere Aktion sein). Es ist wichtig zu wissen, dass dies am Ende der Wiederholung erfolgt. Daher entspricht i in der ersten Wiederholung 0.

Daher sieht die Sequenz folgendermaßen aus:

  • i=0, ¿ i < 10 ? : Ja,wenn ich ein Mal blinke, erhöhe ich um i. Daher i=1
  • i=1, ¿ i < 10 ? : Ja, wenn ich ein Mal blinke, erhöhe ich um i. Daher i=2
  • i=2, ¿ i < 10 ? : Ja, wenn ich ein Mal blinke, erhöhe ich um i. Daher i=3
  • i=9, , ¿ i < 10 ? : Ja, wenn ich ein Mal blinke, erhöhe ich um i. Daher i=10
  • i=10, , ¿ i < 10 ? : Nein, ich verlasse die for-Schleife

Wiederholung mit der for-Schleife

Eine andere Verwendung für die for-Schleife ist der Gebrauch der Steuervariable, wie i im vorigen Beispiel, die wir verwendet haben, um eine Operation durchzuführen. Kannst du dich an die Lichter des fantastischen Autos erinnern? Wir werden 5 LEDs so einschalten, dass sich zunächst immer eine mehr einschaltet, bevor sie am Ende alle zusammen ausgehen. Wenn wir annehmen, dass die LEDs mit den Pins 2-6 verbunden sind, sieht die Sequenz folgendermaßen aus:

  1. Alle aus
  2. LED 2 eingeschaltet
  3. LEDs 2, 3 eingeschaltet
  4. LEDs 2, 3, 4 eingeschaltet
  5. LEDs 2, 3, 4, 5 eingeschaltet
  6. LEDs 2, 3, 4, 5, 6 eingeschaltet

…und so immer weiter. Wie würde der entsprechende Code aussehen?

In der Funktion setup() stellen wir alle Pins in den OUTPUT Modus. Anstatt dies der Reihe nach zu tun, verwenden wir for und sparen so Code. Dies entspricht dem folgenden:

In der Funktion loop() schalten wir zunächst alle LEDs aus (auf die gleiche Weise) und machen anschließend eine Pause von 100 Millisekunden. Danach schalten wir, im Abstand von 200 Millisekunden, eine nach der anderen ein, um den gewünschten Effekt zu erzielen. Sobald alle eingeschaltet sind, beginnen wir erneut mit der Funktion loop(), schalten also alle LEDs aus und dann eine nach der anderen wieder ein. So geht es immer weiter. Wie sähe ein Programm aus, das sie nicht alle gleichzeitig ausschaltet, sondern einzeln nacheinandner? Nochmal mit anderen Worten, es wird eine nach der anderen im Abstand von 200 Millisekunden eingeschaltet und dann in umgekehrter Reihenfolge wieder ausgeschaltet. Weitere Informationen zu for finden sich unter Reference bei Arduino.