Eine Spieluhr mit Loops

Lektion
Downloads

Nun lässt du deinen Arduino zur Abwechslung einmal selbst arbeiten, ohne Potis bedienen zu müssen. Du verwendest deinen Piezo, um darauf mit einer ganzen Reihe von Tone-Funktionen den Anfang des bekannten Stücks „Für Elise“ von Beethoven abzuspielen.

Das alleine wäre jedoch etwas einfach. Zusätzlich verwendest du einen For-Loop, um einzustellen, wie oft hintereinander diese Melodie ertönen soll.

Zunächst zur Melodie. Hier liegt ein Sketch auf Github zugrunde, der dir eine Menge Arbeit abnimmt. Hier hat sich der User spara die Mühe gemacht, jede einzelne Note, ihre Länge und die Pausen in einen Arduino-Sketch einzutragen. Hier zum Beispiel die ersten beiden:

  tone(10, 329.63, 300);
  delay(350);

  tone(10, 311.13, 300);
  delay(350);

All diese Noten befinden sich in der Funktion void setup() deines Sketchs. Das bedeutet, sie werden eigentlich nur ein Mal gespielt, sobald du deinen Arduino gestartet hast. Das ist schön, aber in dieser Lektion kommen die Loops ins Spiel, mit denen du selbst steuerst, wie oft das Stück gespielt wird.

___STEADY_PAYWALL___

Der For-Loop

Schauen wir uns zunächst den For-Loop an. Dieser wird in unserem Fall nach folgendem Schema erzeugt:

for (int i = 0; i < 3; i++) {
  //Code, der wiederholt werden soll
}

Zunächst natürlich der Befehl for, mit dem du den Loop einleitest. In den runden Klammern ( ) stehen dann einige weitere Parameter.

Zuerst die sogenannte Initialisierung. Das bedeutet im Prinzip nur, dass du eine Variable deklarierst und ihr einen Wert (hier Null) zuweist. Üblicherweise bezeichnet man diese Variable einfach mit dem Buchstaben i. Sie ist der Zähler, der nach jedem Durchlauf des Loops erhöht wird – solange bis eine bestimmte Bedingung nicht mehr true (wahr) ist.

Nun die Bedingung: Mit i < 3 prüfst du, ob die Variable i kleiner als 3 ist. Nur solange das der Fall ist, wird der Code im Loop wieder ausgeführt. Sobald i den Wert 3 besitzt, stoppt der Loop.

Zuletzt der Zähler, der sich nach jedem Durchlauf erhöht: Hierfür verwendest du i++

Wie du schon weißt, erhöhst du damit einen Wert um 1. Sobald der Code innerhalb der geschweiften Klammern { } also einmal durchgelaufen ist, erhöht dieser Befehl den Wert in der Variablen i von 0 auf 1.

Werfen wir einen Blick auf die einzelnen Durchläufe:

  • Vor dem ersten Durchlauf entspricht i dem Wert 0 -> Der Loop beginnt.
  • Nach dem ersten Durchlauf entspricht i dem Wert 1 -> Die Bedingung i < 3 ist wahr -> Der Loop läuft ein zweites Mal.
  • Nach dem zweiten Durchlauf entspricht i dem Wert 2 -> Die Bedingung ist immer noch wahr -> Der Loop läuft ein drittes Mal.
  • Nach dem dritten Durchlauf entspricht i dem Wert 3 -> Die Bedingung ist falsch -> Der Loop stoppt und wird nicht weiter ausgeführt.

Mit einem For-Loop kannst du also recht gut steuern, wie oft etwas hintereinander ausgeführt werden soll. Das kann zum Beispiel auch das Blinken deiner LED sein.

Der While-Loop

Es gibt noch eine weitere Methode, einen Loop in deinem Sketch zu erzeugen: while

Auch hier wird geprüft, ob eine Bedingung wahr ist und der Code zwischen den geschweiften Klammern wird solange ausgeführt, bis die Bedingung falsch wird.

int i = 0;

while (i < 3){
  //Code, der wiederholt werden soll
i++;
}

Es gibt jedoch zwei wichtige Unterschiede zum For-Loop: Zunächst muss die Variable für den Zähler – also i – noch vor dem Loop erzeugt werden. Außerdem erfolgt die Erhöhung des Zählers im Code, der wiederholt wird.

Ansonsten funktioniert dieser Loop genauso. Abgesehen davon, dass du für den For-Loop weniger Platz im Sketch brauchst, gibt es noch eine weitere Überlegung, die mal für for, mal für while spricht:

In einem For-Loop musst du bereits im Vorfeld wissen, wie oft er laufen soll. In einem While-Loop hingegen kann der „geloopte“ Code selbst Einfluss darauf nehmen, ob er noch ein weiteres Mal wiederholt wird. So kann zum Beispiel ein besonderes Ereignis den Zähler so weit erhöhen, dass der Loop stoppt.

Je mehr Erfahrung du im Programmieren sammelst, desto einfacher wird dir die Entscheidung zwischen den Loops fallen. Und dann wirst du auch irgendwann über die dritte Loop-Methode stolpern: do…while, die wir in diesem Kurs jedoch nicht behandeln.

Zurück zu Beethoven: Lade dir den Sketch aus den Downloads auf deinen Arduino. Hörst du etwas Klassik? 🙂