Python Online
Home     .
wiederholung

3. WIEDERHOLUNG

 

 

DU LERNST HIER...

 

wie du dem EV3 befehlen kannst, Bewegungen zu wiederholen. Es liegt ja im Wesen von Robotern, Abläufe mehrmals durchzuführen. Du kannst in diesem Kapitel deine Kenntnisse über Wiederholungsstrukturen auffrischen.

 

 

MUSTERBEISPIELE

 

Der Roboter soll 4 Orte erreichen, indem er jeweils eine Strecke vorwärts, dann die gleiche Strecke rückwärts fährt und danach um 90° links dreht. Um diese wiederholte Bewegung zu programmieren, verwendest du eine repeat- oder eine while-Schleife.

Die repeat-Schleife ist einfacher, da du dabei keine Variable verwenden musst.

 

Die while-Schleife ist aber allgemeiner und kommt praktisch in allen Programmiersprachen vor. Die Befehle, die wiederholt werden sollen, müssen eingerückt sein.

Programm:

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)

repeat 4:
   gear.forward(2000)
   gear.backward(2000)
   gear.right(600)
robot.exit()
► In Zwischenablage kopieren
 

Programm:

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
i = 0
while i < 4:
   gear.forward(2000)
   gear.backward(2000)
   gear.right(600)
   i = i + 1
robot.exit()
► In Zwischenablage kopieren

 

 

ENDLOSE WHILE-SCHLEIFE

 

Der Roboter soll sich "endlos" auf einem Kreisbogen bewegen. Zuerst setzst du den Roboer  mit dem "nicht blockierenden" Befehl leftArc(0.3), in den Zustand "fahre auf Linksbogen" mit dem Radius 0.3. Um zu vermeiden, dass der nächste Befehl robot.exit() ausgeführt wird, verwendest du einen in der Robotik weit verbreiteten Trick: Du "beschäftigst" ihn in einer Endlosschleife, die eigentlich gar nichts macht (darum der Befehl pass)

 

Programm:

from ev3robot import *

robot = LegoRobot()
gear = Gear();
robot.addPart(gear);
gear.leftArc(0.3)
while True:
   pass
robot.exit()
► In Zwischenablage kopieren

Der Hacken an diesem Trick ist aber, dass du das Programm nur mit einer "Holzhammermethode" abbrechen kannst, indem du die Batterie heraus nimmst.  Etwas besserr ist es, die Tasten ENTER + DOWN gleichzeitig zu drücken. Damit beendest du aber auch den Brickgate-Server und musst ihn wieder neu starten.

 

Es gibt aber eine elegantere Lösung:

  Dazu schreibst du dein Programm so, dass die Programmausführung mit einem Klick auf die ESCAPE-Taste auf dem EV3 beendet wird. Da robot.isEscapeHit() nur dann True zurückgibt, wenn du vorgängig die Taste gedrückt hast, wird im folgenden Programm die Schleife so lange wiederholt, bis du ESCAPE drückst.

Programm:

from ev3robot import *

robot = LegoRobot()
gear = Gear();
robot.addPart(gear);
gear.leftArc(0.3)
while not robot.isEscapeHit():
   pass
robot.exit()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Wiederhol-Schleifen kannst du mit repeat oder while programmieren. Die Schleifenbefehle müssen eingerückt sein.

Die "endlosen" while-Schleifen musst du so programmieren, dass du das laufende Programm auf dem EV3 interaktiv beenden kannst, beispielsweise durch Drücken der ESCAPE-Taste. Solche while-Schleifen spielen in der Robotik eine zentrale Rolle, insbesondere dann, wenn man Sensorwerte wiederholt abfragen will.

 

 

ZUM SELBST LÖSEN

 

 

1.
Verwende eine repeat- oder while-Schleife, um den Roboter ungefähr auf einem Quadrat zu bewegen.  

2.
Der Roboter soll sich auf einer treppenförmigen Bahn mit mehreren Tritten bewegen.  

 

3.
Der Roboter soll eine Wellenbahn zurücklegen.  

4.
Verwende eine endlose while-Schleife und lasse den Roboter auf einer 8-ter Bahn fahren.