TigerJython | xx für Gymnasien |
Deutsch English |
Der micro:bit verfügt über zwei programmierbare Buttons, die es ermöglichen, interaktiv während der Programmausführung den Programmablauf zu beeinflussen. Der linke wird mit der Variablen button_a, der rechte mit button_b angesprochen. Die Funktion button_a.is_pressed() gibt True zurück, wenn der linke Button im Moment des Aufrufs gedrückt ist (analog button_b_is pressed()). |
Beispiel 1: Auf das Drücken eines Buttons reagieren
Das Programm wartet in einer Endlosschleife, bis der Button A oder der Button B gedrückt wird. Wenn Button A gedrückt wird, blinken die LEDs, und zwar so lange der Button gedrückt wird. Beim des Buttons B leuchten die beiden LEDs
# Mr4a.py from microbit import * from mbrobot import * #from mbrobot_plusV2 import * def blink(): setLED(1) delay(500) setLED(0) delay(500) while True: if button_a.is_pressed(): blink() delay(100) |
Erklärungen zum Programmcode:
def blink(): Es ist sinnvoll für das Blinken der LEDs eine Funktion zu schreiben und diese dann beim Drücken des Buttons A aufzurufen | |
if button_a.is_pressed() Gibt True zurück, während der Button gedrückt ist |
Beispiel 2: Auf das Klicken eines Buttons reagieren
In einer endlosen while-Schleife lässt man die rechte und linke LED mit einer Periode von 1 s blinken. Ein Klick auf den Button A oder B soll das Blinken kurzzeitig unterbrechen und einen Sound abspielen.
Da das Programm die meiste Zeit in der blink-Funktion verbringt, kann es nicht merken, wenn man während dieser Zeit den Button drückt und wieder loslässt. Um einen Klicks trotzdem zu erfassen, muss man die Funktion button_a.was_pressed() verwenden. Diese liefert True, wenn irgend einmal der Button geklickt wurde. Der Klick wird als Event aufgefasst, der vom System auch dann registriert wird, wenn das Programm gerade etwas anderes macht.
# Mr4b.py from microbit import * from mbrobot import * from music import * def blink(): ledLeft.write_digital(1) ledRight.write_digital(1) delay(500) ledLeft.write_digital(0) ledRight.write_digital(0) delay(500) while True: if button_a.was_pressed(): play(JUMP_UP) if button_b.was_pressed(): play(JUMP_DOWN) blink() |
Erklärungen zum Programmcode:
if button_a.was_pressed() Gibt True zurück, falls der Button seit dem letzten Aufruf gedrückt wurde | |
from music import *: Importiert das Modul music | |
play(JUMP_UP): Spielt einen kurzen Song ab. Einige Songs sind in der Distribution von TigerJython enthalten (siehe Doc) |
Beispiel 3: Ein fahrender Roboter wird mit einem Button-Klick gestoppt
Bei den fahrenden Robotern ist es vorteilhaft eine while-Schleife zu verwenden, die nur so lange wiederholt wird, bis ein Button gedrückt wurde.
Solange der Button A nicht gedrückt wurde, wiederholt der Roboter die Befehle in der while-Schleife. Mit dem Buttonklick wird die Schleife beendet und das Programm geht weiter zum Befehl stop().
# Mr4c.py from microbit import * from mbrobot import * setSpeed(15) forward() while not button_a.was_pressed(): d = getDistance() if d < 10: backward() delay(1000) forward() delay(200) stop() |
Erklärungen zum Programmcode:
while not button_a.was_pressed() Quasi endlose while-Schleife, die beim Drücken des Button A beendet wird |
Aufgaben: |
1) |
|
2) |
|
3) |
|