Mit Zählschleifen könnt ihr Anweisungen wiederholen, mit globalen Variablen wird der Zum weniger vergesslich. Kombiniert Beide und euer Programm wird wieder ein Stückchen intelligenter!

Probiert es hier aus bitbloq.bq.com

Bitbloq 2 ist eine Programmiersprache, mit der ihr aus Blöcken einfache oder komplexe Programme für Arduino-kompatible Plattformen, wie den BQ ZUM erstellen könnt! Damit könnt ihr alle Fähigkeiten der C++ Sprache umsetzen, auf der Arduino basiert, ohne die komplizierte Syntax, Komma- und Klammerregeln der Sprache auswendig lernen zu müssen.

Mit Bitbloq 2 kann jeder ab 8 Jahren die Grundlagen der Programmierung und Robotik lernen!


Bis jetzt kennen wir zwei Konzepte, wie wir Anweisungen in einem Programm ausgeführt werden können – einerseits als Sequenz, bei der jede Anweisung nach der anderen ausgeführt wird, andererseits mit einer Bedingung, bei der die Anweisungen nur dann ausgeführt werden, wenn zum Beispiel ein Taster gedrückt wird. Was wir uns heute ansehen wollen, ist wie ihr einen Satz Anweisungen für eine bestimmte Anzahl an Durchläufen ausführen könnt.

Wie ihr eine LED blinken lassen könnt, wisst ihr schon, aber was, wenn ihr sie nur genau 10 mal blinken lassen wollt und dann anhalten wollt? Klar könntet ihr die Anweisung einfach 10 mal untereinander schreiben,aber das ist ziemlich ungeschickt, wenn ihr zum Beispiel etwas darin ändern wollt. Darum sehen wir uns heute die for-Schleife oder Zählschleife an, mit der ihr genau das viel einfacher machen könnt.

Bitbloq 2 Loop Hardware

Als Erstes schließt ihr wieder die LED an der Platine an und verbindet die LED auch in Bitbloq genauso. Im Bereich Software nehmen wir jetzt den Block für die for-Schleife her, den findet ihr im Bereich “Steuerung”. Der Block sieht ähnlich aus wie der für die Bedingungen und funktioniert auch ähnlich. Was der Block macht, ist das: Er fängt bei Null an zu zählen, führt alle Anweisungen im Block aus, zählt eins hoch und prüft, ob der neue Wert jetzt kleiner oder genauso groß ist wie unser Endwert 10. Wenn der Wert noch kleiner ist, werden die Anweisungen nochmal ausgeführt und der Wert nochmal hochgezählt, nochmal geprüft und so weiter, bis der Wert 10 erreicht, dann noch ein letztes Mal. Der Block hier führt die Anweisungen jetzt aber 11 mal aus, weil er bei 0 und nicht bei 1 zum Zählen anfängt. Wenn wir genau 10 Durchgänge wollen, können wir entweder bei 1 zum Zählen beginnen oder nur bis 9 zählen.

Bitbloq 2 for Loop

Um sich zu merken, wie oft der Block schon durchgelaufen ist, braucht der Block eine Variable, die müssen wir davor noch anlegen und dem Block mitgeben. Wenn es im Programm nur eine Variable gibt, schnappt sich der Block die auch automatisch. Wir brauchen jetzt nur noch die Anweisungen, um die LED einmal ein-und auszuschalten und schon sollte das Ganze funktionieren – also einmal LED an, warten, dann die LED wieder aus, und nochmal warten. Das Ganze führt der Block jetzt 10mal aus, also sollte auch die LED 10mal blinken, wenn wir unseren Microcontroller einschalten, nachdem wir das Programm hochgeladen haben.

Bitbloq 2 for Loop -1

Und das macht sie auch, aber auch der loop selbst führt all Anweisungen immer und immer wieder aus und damit eben auch die Schleife – 10mal, nochmal 10mal, und so weiter. Das heißt, irgendwie müssen wir jetzt verhindern, dass die Schleife noch ein zweites Mal ausgeführt wird. Das geht am einfachsten, indem ihr das komplette Programm vom loop in den Bereich setup verschiebt – Anweisungen, die ihr hier einstellt, werden nämlich genau ein Mal ausgeführt, und zwar bevor der loop zu laufen anfängt.

Ich möchte euch aber noch eine Möglichkeit zeigen, mit der ihr einzelne Teile oder den ganzen Inhalt im Loop praktisch ausblenden könnt. Und zwar nutzen wir hier wieder eine Bedingung, aber diesmal zusammen mit einer globalen Variable. Bis jetzt haben wir nur lokale Variablen genutzt – die bleiben nur solange bestehen, wie der spezifische Teil des Programms ausgeführt wird und können auch nur in dem Bereich verwendet werden. Zum Beispiel unsere “Zähler” Variable hier im Loop wird zwar einerseits mit jedem Durchlauf von uns neu angelegt, aber wird so oder so gelöscht, wenn der Loop durchgelaufen ist. Globale Variablen bleiben für immer bestehen, solange wir sie nicht absichtlich löschen oder den Arudino oder Zum neustarten. Das können wir jetzt nutzen, um am Ende der ersten Schleife zu speichern, dass die Schleife schon einmal durchgelaufen ist und beim nächsten Mal prüfen, ob wir diese Variable schon gesetzt haben. Dazu legen wird erst einmal die globale Variable an, das funktioniert wie jede andere Variable, nur dass wir sie logischerweise jetzt im Bereich “globale Variablen” anlegen müssen. Ich gebe der Variable “fertig” den Wert “Falsch” mit – den Wert setzen wir am Ende der Schleife auf “Wahr”, weil wir zu dem Zeitpunkt ja fertig sind.

Bitbloq 2 globale Variable

Damit das Programm auch nur einmal durchläuft brauchen wir jetzt noch eine Bedingung mit dem “Wenn” Block, den können wir entweder anlegen als “wenn die Variable fertig falsch ist” oder als “wenn die Variable fertig nicht wahr ist”. Beides prüft, ob wir noch nicht fertig sind und führt dann den Inhalt des Blocks aus.
Was unser Programm also jetzt macht, ist das: Zuerst wird die globale Variable angelegt, dann wird geprüft, ob die Variable wahr ist, also das Programm schon einmal durchgelaufen ist, wenn nicht, wird die Schleife ausgeführt. Dazu erstellen wir zuerst die Variable, die die Anzahl an Durchläufen speichert und führen die Schleife solange aus, bis der Zähler 10 erreicht wenn wir nach jedem Durchlauf um Eins hochzählen. Am Schluss setzen wir die “fertig” Variable auf Wahr, damit in den nächsten Durchläufen die Zählschleife komplett übersprungen wird.

Bitbloq 2 for Loop 2

Globale Variablen und Zählschleifen sind unglaublich praktisch, wenn es darum geht, nicht immer nur die gleiche Sequenz an Anweisungen auszuführen. Im nächsten Tutorial bringen wir Bewegung ins Spiel – mit den Servomotoren aus dem Zum Kit. Bis dann!