repeat

3. BEFEHLE WIEDERHOLEN, FUNKTIONEN

 

 

DU LERNST HIER...

 

wie ein Roboter bestimmte Befehlssequenzen wiederholen kann und wie du mit benannten Programmblöcken (Funktionen) deine Programme besser strukturieren kannst.

 

 

MUSTERBEISPIELE

 


Beispiel 1: Quadrat fahren
Um ein Quadrat zu fahren, muss der Roboter vier Mal eine Strecke vorwärts fahren und um 90° drehen. Für die sich wiederholende Bewegung verwendest du eine repeat-Schleife. Diese wird mit repeat eingeleitet gefolgt von Anzahl Wiederholungen und einem Doppelpunkt. Die Befehle, die wiederholt werden sollen, müssen eingerückt sein.

 

from callibot import *
            
repeat 4: 
    forward()
    delay(2000)
    left()
    delay(550)
stop()
► In Zwischenablage kopieren

Führe das Programm zuerst im Simulationsmodus aus. Im Realmodus musst du eventuell die Zeit beim Linksdrehen anpassen.

Im Unterschied zur Simulation, bei der der Roboter ein Quadrat ganz exakt abfahren kann, ist es beim realen Roboter schwierig, exakt geradeaus zu fahren und exakt in einem rechten Winkel abzubiegen. Dies entspricht der Wirklichkeit, denn kein Auto wird bei starrer Radstellung, d.h. blockierter Steuerung, je exakt geradeaus fahren, man muss immer wieder regulierend eingreifen. Deswegen sind Roboter mit Sensoren ausgerüstet, die ihnen helfen, diese Ungenauigkeiten zu korrigieren. Verwende also nicht zu viel Zeit, um dem Roboter ein exaktes Quadrat fahren beizubringen.


 

Beispiel 2: Befehle beliebig oft wiederholen
In vielen Situationen führt ein Roboter gewisse Tätigkeiten "endlos" aus, bzw. solange bis er abgeschaltet oder das Programm abgebrochen wird. Zum Beispiel, wenn er ständig Sensordaten zurückmelden muss. Dafür verwendet man eine repeat-Schleife ohne Anzahl Wiederholungen.

In deinem Beispiel besucht der Roboter endlos vier Orte, die auf Wegen liegen, die rechtwinklig zu einander stehen und fährt jeweils wieder rückwärts zum Ausgangspunkt.

 


from callibot import *
            
repeat: 
    forward()
    delay(2000)
    backward()
    delay(2000)
    left()
    delay(550)
► In Zwischenablage kopieren

Hier ist es nützlich zu wissen, wie man ein laufendes Programm abbrechen kann: Am einfachsten geht es mit Drücken des blauen Buttons hinten am Chassis.

 

 

Beispiel 3: Programme mit eigenen Funktionen strukturieren
Mit benannten Programmblöcken, in Python Funktionen genannt, kannst du deine Programme besser strukturieren. Es ist eine wichtige Programmiertechnik, denn komplexere Programme können mit Hilfe von Funktionen in kleinere, leichtprogrammierbare Teilprogramme zerlegt werden. Mit Vorteil werden Funktionen auch eingesetzt, wenn ein Programmblock mehrmals verwendet wird.

Eine Funktionsdefinition beginnt immer mit dem Schlüsselwort def. Darauf folgen ein Funktionsname, eine Parameterklammer und ein Doppelpunkt. Die Anweisungen im Funktionskörper sind eingerückt. Im Hauptprogramm wird die Funktion aufgerufen.

In deinem Beispiel definierst du eine Funktion blink(), die das einmalige aufleuchten der roten LED bewirkt. Im Hauptprogramm fährt der Roboter zuerst 200 ms vorwärts und danach 2000 ms rückwärts. Während des Rückwärtsfahren blinkt er zweimal mit beiden LEDs. Diese Bewegung wiederholt er zweimal.
from callibot import *

def blink():
    setLED(1)
    delay(500)
    setLED(0)
    delay(500)

repeat 2:
    forward()
    delay(2000)
    backward()
    blink()
    blink()
    stop()
► In Zwischenablage kopieren
 




 

MERKE DIR...

 

Um ein Programmblock n mal zu wiederholen, verwendest du eine repeat-Schleife:
 repeat n:
     Anweisungen

Um ein Programmblock endlos zu wiederholen, verwendest du eine  Endlos-Schleife:
 repeat:
     Anweisungen

Die eingerückten Zeilen werden so lange wiederholt, bis man das Programm mit Schliessen des Terminalfensters abbricht.

Mit Funktionen kannst du deine Programme besser strukturieren und Code-Dupplikation vermeiden. Du musst zwischen der Funktionsdefinition und Funktionsaufruf unterscheiden.

Definition:

Aufruf:
def name():
     Anweisungen
name()

 

 

ZUM SELBST LÖSEN

 

 

1.
Der Roboter startet in der Mitte, fährt eine kurze Strecke vorwärts, dreht um 180° und fährt zurück zum Ausgangspunkt und dreht wieder in die Startrichtung. Dann dreht er etwa um 120° nach rechts. Diese Befehlssequenz wiederholt er drei Mal.  


2.
Der Roboter soll "endlos" zuerst einen Kreis auf dem Linksbogen und dann einen Kreis auf dem Rechtsbogen fahren.  


3.
Definiere eine Funktion step(), mit der dein Roboter ein Tritt abfährt. Rufe die Funktion dann dreimal auf, so dass der Roboter die nebenstehende Figur abfährt. Löse die Aufgabe zuerst im Simulationsmodus.  
4.
Der Roboter bewegt sich "endlos" auf einer Kreisbahn mit dem Radius 0.2 m. Jedesmal wenn er einen ganze Kreis zurückgelegt hat, hält er für 3 Sekunden an und schaltet während dieser Zeit den Alarm ein. Danach schaltet er den Alarm aus und bewegt sich weiter auf der Kreisbahn. Löse die Aufgabe zuerst im Simulationsmodus.