DAS PROJEKT
In diesem Projekt möchten wir dir zeigen, wie dein Roboter auf Bedingungen mit “wenn … dann …” reagiert. Du wirst sehen, dass ein Programm unterschiedlich ablaufen kann. Außerdem erklären wir dir, was eine Variable ist und wie man sie zum Zählen einsetzt. Lass dir von deinem Roboter anzeigen, wie oft er etwas getan hat.
DEINE MISSION
Zum Beginn werden wir etwas mit Ereignissen rumspielen. Jedes der Ereignisse, z.B. das Klatschen oder Drücken einer Taste, führt zu einer bestimmten Aktion. Werden Aktionen nur dann ausgeführt, wenn bestimmte Bedingungen erfüllt sind, heißt das “bedingte Anweisung“.
- Erstelle folgendes Programm (edison_bedinganweisung1_1.ees)
- Teste das Programm auf dem Edison. Tut das Programm, was du erwartest?
Das Programm funktioniert, wie wir es erwartet haben:
- Der Roboter wartet, bis geklatscht wird. Der Befehlsblock heißt “wait until” (warte bis) und der Ereignisblock “clap detected” (Klatschen erkannt). Zusammengesetzt lautet der Befehl “warte, bis ein Klatschen erkannt wird”.
- Dann dreht der Roboter auf der Stelle nach links. Er hört erst damit auf, wenn die dreieckige Starttaste gedrückt wird. Der Befehlsblock heißt “spin left until…” (drehe nach links bis…). In den Befehlsblock ist der Ereignisblock “triangle button pressed” (dreieckige Taste gedrückt) aus der Kategorie “Sensing” (Sensoren) eingefügt. Zusammengesetzt lautet der Befehl “drehe nach links, bis die dreieckige Taste gedrückt wird”.
- Wieder wartet der Roboter, bis geklatscht wird.
- Nun piept Edison in einer Schleife immer wieder. Die Schleife “repeat until” (wiederhole bis) wird erst beendet, wenn das Ereignis “round button pressed” (runde Taste gedrückt) eintritt.
In diesem Programm wird jede Aktionen solange ausgeführt, bis ein bestimmtes Ereignisse eintritt. Konntest du alles nachvollziehen? Sonst geh Schritt für Schritt das Programm nochmal durch.
Manchmal arbeiten Programme nicht, wie wir es erwarten. Wir werden dir jetzt ein Beispiel dafür zeigen.
- Nimm dir das Programm von oben vor und verändere es (edison_bedinganweisung2_1.ees):
- Teste das Programm erneut. Was passiert, wenn du die runde Taste drückst?
Hast du auch erwartet, dass Edison nach Drücken der runden Programmiertaste das Programm abbricht?
Nach dem Drücken der runden Taste passiert anscheinend nichts. Man muss die dreieckige Starttaste drücken, um die Fahrbefehle “Drehen links” und “Drehen rechts” zu beenden. Am Ende des Schleifendurchgangs piept Edison. Wurde zwischendurch die runde Taste gedrückt, beendet der Roboter nach dem Piepen das Programm. Wenn sie nicht gedrückt wurde, beginnt der nächsten Schleifendurchgang und Edison dreht sich wieder.
Der Roboter arbeitet erst die Aktionen in der Schleife nacheinander ab. Das Drehen lässt sich NUR durch Drücken der dreieckigen Taste beenden. Nach der letzten Aktion, hier dem Piepen, prüft das Programm die Schleifenbedingung “repeat until round button pressed” (wiederhole, bis die runde Taste gedrückt wurde). Wurde die Taste während des vorherigen Schleifendurchgangs gedrückt, ist die Bedingung erfüllt und ein neuer Schleifendurchgang wird nicht gestartet. Andernfalls beginnt ein neuer Durchgang.
Wie oft hat Edison das Drehen nach links und rechts ausgeführt, bevor das Programm beendet wurde? Du kannst natürlich während der Programmausführung zählen, aber es geht auch einfacher: wir lassen das Programm für uns zählen!
Für das Zählen arbeiten wir mit einer Variablen. Eine Variable ist ein Behälter, der Daten aufnehmen kann. Der Name der Variablen ändert sich nicht, aber die enthaltenen Daten können sich ändern – sie sind “variabel”. In unserem Beispiel hat die Variable “zaehler” erst den Wert = 0. Nach jeder Drehbewegung wird der Wert um 1 hochgezählt (das nennt man Inkrement-Operation). Die Variable “zaehler” hat nacheinander die Werte 0, 1, 2 usw.
Variablen erstellst du in einem EdScratch-Programm, indem du in die Kategorie “Data” wechselst. Dort klickst du auf “Make a variable”. Im Folgedialog gibst du der Variablen einen Namen (z.B. “zaehler”) und klickst “Create variable”. Jetzt werden dir unter Kategorie “Data” Blöcke zum Arbeiten mit Variablen angezeigt.
- Füge jetzt dem Programm Blöcke für die Variable “zaehler” und das Hochzählen hinzu. Zum Programmende lassen wir uns den Wert von “zaehler” als Piepen ausgeben (edison_bedinganweisung3_1.ees).
So funktioniert unser Programm:
- Zu Beginn machen wir die Variable “zaehler” im Programm bekannt und setzen sie auf den Wert 0.
- Es folgt die bekannte Schleife mit den Drehungen. Hinter jeder Drehung ist der Block “increment zaehler” eingefügt. “increment” bedeutet “erhöhe um 1”. Nach der ersten Drehung hat die Variable “zaehler” den Wert 1 und nach der zweiten Drehung den Wert 2. Kommen weitere Drehungen hinzu, wird jedesmal der Wert um 1 erhöht.
- Zum Ende haben wir die Schleife “repeat zaehler” (wiederhole Wert zaehler). Wurden vier Drehbewegungen gestartet, hat die Variable zaehler den Wert 4. Die Ausgabeschleife wird viermal durchlaufen und es piept viermal.
Kommen wir zum Ende dieses Projekts. Der Roboter durchläuft sein Programm und macht seine Drehbewegungen. Wie oft Edison das Drehen nach links und rechts ausgeführt hat, wird über Variable “zaehler” festgehalten und über Piepen ausgegeben.
Verändere die Ausgabe des Programms so:
- Wenn das Programm nach dem ersten Schleifendurchgang (Drehen links und rechts) beendet wird, soll Edison mit beiden LEDs drei Sekunden lang leuchten.
- Wird das Programm später beendet, soll Edison die Anzahl der Drehbewegungen als Piepen ausgeben.
Zum Lösen der Aufgabe benötigst du einen Befehlsblock, der erst einen “wenn dann”-Abschnitt und danach einen “ansonsten”-Abschnitt hat. Diesen Block (if-then-else) findest du unter Kategorie “Control”.
In dem Block siehst du zwischen “if” und “then” eine Aussparung für einen Bedingungsblock. Die Bedingung für deine Mission lautet, wenn weniger als 3 Drehungen, dann leuchten, ansonsten piepen. Blöcke für Vergleiche von Zahlen findest du unter Kategorie “Operators”.
Kannst du die Aufgabe lösen? Sonst schau einfach unseren Lösungsvorschlag…
Lösungsvorschlag:Wir haben uns folgende Lösung (edison_bedinganweisung4_1.ees) einfallen lassen:
- Bis zum if-then-else Block bleibt das Programm unverändert.
- Die Bedingung lautet “wenn zaehler < 3” (also vor der zweiten Runde), dann werden beide LEDs für 3 Sekunden angeschaltet.
- Ist zaehler 3 oder größer, dann hat der Roboter mindestens zwei Runden oder mehr durchlaufen. Für diesen “else”-Fall lassen wir uns die Anzahl der Drehungen als Piepen ausgeben.
Was du bei diesem Projekt lernen kannst:
- Es gibt in EdScratch einige Befehlsblöcke, die direkt mit einer Bedingung verknüpft sind.
- Schleifen mit “repeat until Bedingung” werden erst komplett durchlaufen. Danach wird geprüft, ob die Bedingung erfüllt ist. Wenn die Bedingung erfüllt ist, wird die Schleife beendet, ansonsten wird sie weiter ausgeführt.
- Bei dem Einsatz von mehreren Bedingungen kann es zu unerwarteten Verhalten kommen. Zur Fehlersuche gehe einfach Schritt für Schritt durch das Programm.
- Du kannst in einem Programm Dinge zählen. Dazu setzt du Variablen ein. Eine Variable ist ein Behälter, der Daten aufnehmen kann. Der Name der Variablen ändert sich nicht, aber die enthaltenen Daten (z.B. Zahlen) können sich ändern.
- Es gibt einen Block, mit dem das Roboterprogramm Entscheidungen treffen kann. Je nachdem, wie die Entscheidung ausfällt, nimmt das Programm den einen oder den anderen Weg. Dieser Block (if-then-else) hat erst einen “wenn dann”-Abschnitt und danach einen “ansonsten”-Abschnitt hat.