TigerJython4Kids | Robotique
Robotik
|
DU LERNST HIER... |
wie man die Oxocard-Tasten (Buttons) verwendet, um interaktive Programme zu entwickeln. |
Oxocard-Buttons |
|
MUSTERBEISPIELE |
Pollen, um den aktuellen Status (gedrückt/losgelassen) zu erfassen Mit button = Button(BUTTON_R2) erzeugst du ein Objekt der Klasse Button, mit dem du den rechten unteren Button ansprechen kannst. Dazu musst du zuerst das Modul button importieren. Die Klasse stellt dir verschiedene Funktionen zur Verfügung, die man auch Methoden nennt, da sie zu einer Klasse gehören.
Programm: from oxocardext import * from oxobutton import * button = Button(BUTTON_R2) while True: if button.isPressed(): fillRectangle(2, 2, 4, 4, RED) sleep(0.2) clear() sleep(0.2)
So wie du es von den Mausklicks kennst, möchtest du hier mit einem Button-Klick eine Aktion ausführen. Du kannst aber ein kurzes Klicken nicht mit isPressed() erfassen, da dein Programm nicht mit Sicherheit gerade dann diese Funktion aufruft, wenn der Button gedrückt ist. Die Methode wasPressed() "erinnert" sich aber, ob der Button seit dem letzten Aufruf gedrückt und wieder losgelassen wurde.
Wenn du die Wartezeit auf 1 s erhöhst, kannst du demonstrieren, dass der Klick tatsächlich auch dann erkannt wird, wenn das Programm gerade schläft. Programm: from oxocard import * from oxobutton import * button1 = Button(BUTTON_R2) button2 = Button(BUTTON_L2) while True: if button1.wasPressed(): clear() arrow(3, 3, 0, 5, RED) if button2.wasPressed(): clear() arrow(4, 3, 4, 5, BLUE) sleep(0.1)
Programm: from oxosnake import * from oxobutton import * makeSnake(speed = 100) button = Button(BUTTON_R2) while not button.wasPressed(): forward(2) right(45) sleep(0.1) hide()
Buttonklicks als Events erfassen Die Ereignissteuerung verlangt eine spezielle Programmiertechnik: Du definierst dazu in einer Funktion (Callbackfunktion), was beim Auftreten des Events (hier ein Buttonklick) geschehen soll. Die Callbackfunktion wird nie explizit von deinem Programm aufgerufen, sondern direkt vom System, wenn der Button geklickt wurde. Du teilst dem System den Namen deiner Callbackfunktion beim Erzeugen des Buttons mit, z.B. wenn die Callbackfunktion onEvent heisst: Button(BUTTON_KONSTANTE, onEvent) Man nennt dies auch "Registrieren des Callbacks".
Programm: from oxosnake import * from oxobutton import * def onClick(pin): growTail() makeSnake(pos = (0, 7)) Button(BUTTON_R2, onClick) while True: forward(7) right(90) Globale Variablen in Callbackfunktionen
Programm: from oxocard import * from oxobutton import * def onClick(pin): global count count += 1 count = 0 Button(BUTTON_R2, onClick) while True: display(count) sleep(0.1) |
MERKE DIR... |
Beim Pollen eines Buttons überprüfst du ständig mit der Methode button.isPressed(),ob der Button gerade gedrückt ist oder mit button.wasPressed(), ob der Button seit dem letzten Aufruf dieser Methode gedrückt wurde. Bei der Eventsteuerung definierst du in einer Callbackfunktion, wie auf ein Buttonklick zu reagieren ist. Die Callbackfunktion muss beim Erzeugen des Buttons registriert werden. |
ZUM SELBST LÖSEN |
|
Die Buttons sind an folgenden Pins angeschlossen:
BUTTON_L1 | Pin(0) |
BUTTON_L2 | Pin(32) |
BUTTON_L3 | Pin(33) |
BUTTON_R1 | Pin(14) |
BUTTON_R2 | Pin(13) |
BUTTON_R3 | Pin(27) |