LBotics.at

Möchte man in einem Python-Skript darauf reagieren, ob ein Taster am CyberPi gedrückt wurde, so muss ein Bereich des Skript wiederholt ausgeführt werden, in dem laufend überprüft wird, ob ein Taster gedrückt wurde - im Gegensatz zu den bisherigen Skripts, die einmal durchgelaufen und dann beendet worden sind. Dies erreicht man mit sogenannten Schleifen. Dabei handelt es sich um Code-Strukturen, innerhalb derer Code wiederholt ausgeführt wird. In der Folge wird dazu eine while-Schleife verwendet.

Auch benötigt man für die Reaktion auf das Drücken eines Tasters eine Code-Struktur, mit der man überpüfen kann, ob ein Taster gedrückt wurde. Dazu wird meist eine if-Abfrage verwendet.

Bei der Verwendung von Schleifen und Abfragen ist zu beachten, dass Anweisungen, die zu einem Block zusammengefasst werden in Python zwingend eingerückt geschrieben werden müssen. Üblich ist es, jeweils 4 Leerzeichen einzurücken.

Eine while-Schleife für die laufend wiederholte Ausführung von Code in einem Skript

Soll Python-Code innerhalb eines Skripts laufend wiederholt ausgeführt werden solange das Skript läuft, so platziert man in diesem Skript eine while-Schleife, deren Bedingung immer erfüllt ist und somit eine Endlosschleife darstellt.

...
while True:
Anweisung 1
Anweisung 2
Anweisung 3
...

Bei einer while-Schleife, die endlos laufen soll, steht hinter dem Schlüsselwort while an der Stelle der Laufzeitbedingung der Schleife das Wort True. Danach folgt der Anweisungsblock, der ausgeführt werden soll, während die Schleife läuft. Die Anweisungen in diesem Block müssen eingerückt geschrieben werden, wodurch sich ein sehr übersichtlicher Code ergibt.

Die if-Abfrage

Mit einer if-Abfrage kann die weitere Ausführung von Code basierend auf einer Bedingung gesteuert werden.

...
if Bedingung:
Anweisung 1
Anweisung 2
Anweisung 3
...

Bei einer if-Abfrage steht nach dem Schlüsselwort if eine Bedingung. Ist die Bedingung erfüllt, so werden Anweisungen in dem darauffolgenden Code-Block, der wiederum eingerückt geschrieben werden muss, ausgeführt.

Sollen Anweisungen ausgeführt werden, wenn die Bedingung nicht erfüllt ist, so schreibt man diese in einem weiteren, eingerückten Code-Block hinter dem Schlüsselwort else.

... 
if Bedingung:
Anweisung 1
Anweisung 2
Anweisung 3
else:
Anweisung 1
Anweisung 2
Anweisung 3
...
Reaktion auf das Drücken eines Tasters oder des Joysticks am CyberPi

Das Python-Modul cyberpi stellt die Funktion cyberpi.controller.is_press(button) bereit, mit der überprüft werden kann, ob ein Taster oder der Joystick in eine Richtung gedrückt wurde. Diese Funktion liefert den Rückgabewert True oder False zurück, der mit einer if-Abfrage überprüft werden kann.

Beispiel - Schalten von LEDs mit zwei Tastern

Im folgenden Skript läuft eine Endlosschleife, deren Code wiederholt ausgeführt wird, solange das Skript läuft. In dieser Schleife wird mit zwei if-Abfragen überprüft, ob einer der beiden Taster A oder B gedrückt wurde. Hat man den Taster A gedrückt, so werden die beiden LEDs 1 und 5 am CyberPi eingeschaltet, wurde der Taster B gedrückt, werden die beiden LEDs ausgeschaltet.

import cyberpi

while True:
if cyberpi.controller.is_press("a")==True:
cyberpi.led.on("red",id=1)
cyberpi.led.on("red",id=5)
if cyberpi.controller.is_press("b")==True:
cyberpi.led.on("black",id=1)
cyberpi.led.on("black",id=5)
Erklärungen zu diesem Skript

In der folgenden Abbildung ist dargestellt, wie zusammenhängende Code-Blöcke in Python eingerückt geschrieben werden müssen (orange und blau) und, wie die wiederholte Ausführung der Anweisungen in der while-Schleife abläuft (grün).

3: while True:

In dieser Zeile beginnt eine while-Schleife, die hier eine Endlosschleife darstellt, da die Bedingung immer True - also erfüllt - ist. Die danach eingerückten Codezeilen 4 - 9 (orange Einrückung) werden wiederholt ausgeführt, solange die Schleife läuft.

4: if cyberpi.controller.is_press("a")==True:

In dieser Zeile erfolgt hinter dem Schlüsselwort if die Überprüfung einer Bedingung. In diesem Fall wird überprüft, ob der Rückgabewert der Funktion cyberpi.controller.is_press("a") den Wert True hat. Dies ist dann der Fall, wenn der Taster A am CyberPi gedrückt wurde. Die Überprüfung der Gleichheit der beiden Werte erfolgt mit dem vergleichenden Istgleich, das in Python mit == geschrieben wird.

4: cyberpi.controller.is_press("a")

Mit der Funktion cyberpi.controller.is_press(button) kann ermittelt werden, ob ein Taster gedrückt oder der Joystick in eine Richtung gedrückt wurde.

button: "a", "b", "up", "down", "left", "right", "middle" (Strings "a" für Taster A, "b" für Taster B, "up", "down", ... für die Richtungen des Joysticks)

return: True, False (boolscher Wert, True wenn ein Taster gedrückt wurde, sonst False)

5: cyberpi.led.on("red",id=1)
6: cyberpi.led.on("red",id=5)

Dieser Code-Block ist nach der Überprüfung der Bedingung der if-Abfrage eingerückt geschrieben und wird somit ausgeführt, wenn die Bedinung erfüllt ist. Hier werden die LEDs 1 und 5 eingeschaltet und leuchten rot.

Zusammenfassung - Was wurde in diesem Abschnitt gelernt?
mBot2
  • Mit der Funktion cyberpi.controller.is_press(button) kann ermittelt werden, ob ein Taster oder der Joystick auf dem CyberPi gedrückt wurde. Anstelle des Parameters button können der Funktion die Werte "a", "b", "up", "down", "left", "right", und "middle" übergeben werden.
  • Diese Funktion liefert einen Rückgabewert, der entweder True oder False sein kann - je nachdem, ob ein Taster gedrückt wurde oder nicht.
Python
  • Möchte man, das Python-Code laufend wiederholt ausgeführt wird, solange das Skript läuft, so wird dieser Code in einer Endlosschleife - die mit mit while True: eingeleitet wird - platziert.
  • Code-Zeilen, die zu einem Code-Block innerhalb einer Schleife gehören, werden in Python eingerückt geschrieben.
  • Mit einer if-Abfrage kann man in Python Bedingungen übeprüfen. Eine if-Abfrage wird mit if Bedingung: eingeleitet und der Code-Block, der ausgeführt werden soll, wenn die Bedingung erfüllt ist, wird im Anschulss daran eingerückt geschrieben.
  • In einer Bedingung werden zwei Werte auf ihre Gleichheit oder Ungleichheit überprüft. Zum Festellen der Gleichheit zweier Werte muss das vergleichende Istgleich, das mit zwei == geschrieben wird, verwendet werden!