TigerJython | xx für Gymnasien |
Deutsch English |
Zwei micro:bits können über Bluetooth miteinander kommunizieren. In einer typischen Applikation wird ein mbRobot mit einem zweiten micro:bit ferngesteuert. Die dazu notwendigen Funktionen werden aus dem Modul radio importiert. Die nachfolgenden Beispiele funktionieren nur im Realmodus.
In diesem Kommunkationsmodell ist jeder micro:bit (auch Knoten gennannt) gleichzeitig ein Sender und ein Empfänger. Mit radio.on()erstellen zuerst beide Knoten eine drahtlose Bluetooth-Verbindung. Mit radio.send(msg) sendet der eine Knoten eine Message (als String) an den anderen Knoten, der dort im Empfangsspeicher abgelegt wird. Mit dem Befehl radio.receive() holt dieser die älteste Message aus seinem Empfangsspeicher.
In den folgenden Beispielen werden der nicht im mbRobot eingebaute micro:bit als Sender und der mbRobot als Empfänger verwendet.
Beispiel 1: Die roten LEDs des Roboters ferngesteuert ein- und ausgeschalten
Die beiden Geräte erstellen mit dem Befehl radio.on() die Bluetooth-Verbindung. Die Fernsteuerung erfolgt durch das Klicken des linken bzw. des rechten Buttons auf dem Sendergerät.
Beim Klicken des linken Buttons wird der Befehl radio.send("on") ausgeführt und die Message "on" gesendet , beim Klicken des rechten Buttons die Message "off". Der Roboter empfängt mit dem Befehl radio.receive() den gesendeten String und schaltet beide LEDs ein bzw. aus.
Sender (micro:bit): | Empfänger (mbRobot) | |
#Mr5a.py from microbit import * import radio radio.on() while True: if button_a.was_pressed(): radio.send("on") elif button_b.was_pressed(): radio.send("off") |
# Mr5b.py (receiver) import radio from microbit import * from mbrobot import * radio.on() while not button_a.was_pressed(): rec = radio.receive() if rec != None: if rec == "on": ledLeft.write_digital(1) ledRight.write_digital(1) elif rec == "off": ledLeft.write_digital(0) ledRight.write_digital(0) stop() |
Erklärungen zum Programmcode:
import radio: Importiert das Modul radio, welches die Befehle für die Bluetooth-Kommunikation enthält | |
radio.on(): Schaltet den Verbindungskanal ein | |
radio.send("on") Sendet den String "on" | |
rec = radio.receive() Holt die älteste Message aus dem Empfangsbuffer (None, falls leer) |
Beispiel 2: Roboter fernsteuern
Mit einem zweiten micro:bit wird der Roboter wie folgt ferngesteuert:
• | Kein Button gedrückt → angehalten (state = "STOP") |
• | Linker Button gedrückt → links fahren (state = "LEFT") |
• | Rechter Button gedrückt → rechts fahren (state = "RIGHT") |
• | beide Buttons gedrückt → geradeaus fahren (state = "FORWARD") |
Es ist vorteilhaft, bei solchen Aufgaben eine Variable state einzuführen, wo der momentane Zustand gespeichert wird. Insbesondere wird eine Message nur dann gesendet, wenn der Zustand geändert hat.
Sender (micro:bit): | Empfänger (Roboter) | |
#Mr5c.py from microbit import * import radio radio.on() state = "STOP" oldState = "" while True: if button_a.is_pressed() and button_b.is_pressed(): state = "FORWARD" display.show('F') elif button_a.is_pressed(): state = "LEFT" display.show('L') elif button_b.is_pressed(): state = "RIGHT" display.show('R') else: state = "STOP" display.show('S') if oldState != state: radio.send(state) oldState = state |
# Mr5d.html (receiver) import radio from mbrobot import * radio.on() setSpeed(15) while True: rec = radio.receive() if rec == "FORWARD": forward() elif rec == "LEFT": leftArc(0.1) elif rec == "RIGHT": rightArc(0.1) elif rec == "STOP": stop() delay(100) |
Erklärungen zum Programmcode:
display.show("F") Auf dem LED-Display des micro:bits wird der Buchstabe F angezeigt | |
radio.send(state) Je nach dem, welche Buttons gedrückt wurden, wird FORWARD, LEFT, RIGHT oder STOP gesendet | |
if oldState != state: Eine Message wird nur dann gesendet, wenn der Zustand geändert hat |
Aufgaben: |
1) |
|
2) |
Markiere 4 Orte gemäss Vorlage und schreibe ein Programm so, dass der Roboter ferngesteuert jeweils zu jedem Ort hinfährt und dann wieder zum Ausgangsort zurückfährt. Dazu muss er auch rückwärts fahren können. |