Python Online
Home    
buttons

6. BUTTONS

 

 

DU LERNST HIER...

 

wie man die beiden micro:bit-Buttons verwendet, um interaktive Programme zu entwickeln.

 

 

WIE FUNKTIONIEREN DIE BUTTONS

 

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 gedrückt ist (analog button_b_is pressed()).

 

 

 

MUSTERBEISPIELE

 

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. Dann beginnt die rechte bzw. linke LED mit einer Periode von 1s zu blinken, und zwar so lange der Button gedrückt ist.

Der Zustand der Button wird alle 200 Millisekunden abgefragt (delay(200)). Diese Pausen sind wichtig, da sonst das System zu stark belastet wird.

 

Programm:

from microbit import *
from mbrobot import *

def blink(led):
    led.write_digital(1)
    delay(500)
    led.write_digital(0)    
    delay(500)

repeat:
    if button_a.is_pressed():
        blink(ledRight)
    if button_b.is_pressed():
        blink(ledLeft)    
    delay(200) 


Um das Programm besser zu strukturieren, definierst du eine Funktion blink(led), die eine LED einmal ein- und ausschaltet. Der Parameter led kann ledRight oder ledLeft sein, je nachdem, ob der linke oder rechte Button gedrückt wird. Die Befehle für die Buttons sind im Modul microbit, das du zusätzlich importieren musst.


Beispiel 2: Auf das Klicken eines Buttons reagieren

Mit einem Klick auf den Button A oder B soll eine kurze Melodie abgespielt werden. Die Funktion button_a.was_pressed() gibt True zurück, wenn der Button a kurz gedrückt wurde. Der Befehl play(JUMP_UP) aus dem Modul music spielt eine kurze Melodie ab. Einige Melodien sind im Modul music eingebaut.

 

Programm:

from microbit import *
from music import *

repeat: 
    if button_a.was_pressed():
        play(JUMP_UP)
    if button_b.was_pressed():
        play(JUMP_DOWN)    

 

Beispiel 3: Ein Programm mit Button abbrechen

Bei den fahrenden Robotern ist es vorteilhaft eine Endlos-Schleife zu verwenden, die nur so lange wiederholt wird, bis ein Button gedrückt wurde.

Der Roboter fährt zum Hindernis, das er mit seinem Ultraschallsensor detektiert und wieder zurück.

 

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 wird mit dem Befehl stop() fortgesetzt.


Programm:

from microbit import *
from mbrobot import *

setSpeed(20)
forward()
while not button_a.was_pressed():
    d = getDistance()
    if d < 10:
        backward()
        delay(1000)
        forward()
    delay(200)
stop() 


Beispiel 4: Den Roboter mit Buttons steuern

Mit Klick auf die Button a bzw. b sollst du den Roboter durch das Labyrinth führen. Der Roboter fährt jeweils vorwärts, wenn er mit seinen Lichtsensoren dunkel "sieht" fährt er kurz zurück und bleibt stehen. Wenn du den Button a drückst, dreht er 90° nach links und fährt wieder vorwärts, bis zur nächsten dunklen Kante. Mit Klick auf Button b biegt er rechts ab.

 

 

Programm:

from microbit import *
from mbrobot import *

setSpeed(30)
forward()
repeat:
    v = irLeft.read_digital()
    if v == 0:
        backward()
        delay(500)
        stop()
    if button_a.was_pressed():
        left()
        delay(900)
        forward()
    elif button_b.was_pressed():
        right()
        delay(900)     
        forward()
    delay(100)

 

 

MERKE DIR...

 

Mit Buttons kannst du  interaktive Programme entwickeln. Die Funktion is_pressed() gibt True zurück, wenn der Button gedrückt ist. Die Funktion was_pressed() gibt True zurück, wenn seit dem Start des Programms oder seit dem letzten Aufruf irgendwann mal geklickt wurde.

 

 

ZUM SELBST LÖSEN

 

 

1.

Definiere eine Funktion blink(), die beiden LEDs 500 ms ein- und dann 500 ms ausschaltet. Mit Drücken des Buttons a soll der Roboter mit beiden LEDs blinken.

 

2.

Mit Klick auf den Button a soll der Roboter 2000 Millisekunden vorwärts fahren und anhalten, beim Klicken des Buttons b 2000 Millisekunden rückwärtsfahren und anhalten.

3.

Programmiere einen SOS-Sender.
Im Morse-Alphabet wir s mit drei kurzen und o mit drei langen Signalen dargestellt. Dein Programm soll wie folgt senden:
Beim Klicken des Buttons A wird ein kurzer Ton abgespielt. Beim Drücken des Buttons B wird ein langer Ton abgespielt.

Du importierst das Modul music (from music import *) und verwendest den Befehl
pitch(frequency, time) um einen Ton abzuspielen (z.B. pitch(440, 100) für einen kurzen Ton und pitch(440, 400) für einen langen ton).
Falls du mehr in Morse senden willst, kannst du die Kodierung der einzelnen Buchstaben hier sehen.

 

 

ZUSATZSTOFF: ROBOTER FERNSTEUERN

 


Beispiel 5
: Roboter via Bluetooth fernsteuern


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 mit dem Modul radio importiert.

Mit radio.on() erstellen zuerst beide Geräte eine Bluetooth-Verbindung. Mit radio.send(msg) sendet der micro:bit eine Message (als String) an den Roboter, der diese Meldung mit dem Befehl radio.receive() holt.

Der Roboter wird mit den Buttons des micro:bits wie folgt gesteuert:

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.

 


Programm für den micro:bit:

# Mq6d.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

 

Programm für den mbRobot:

# Mq6e.py 
import radio
from microbit import *
from mbrobot import *

radio.on()
setSpeed(30)
while True:
    rec = radio.receive()    
    if rec == "FORWARD":
        forward()  
    elif rec == "LEFT":
        leftArc(0.2)
    elif rec == "RIGHT":
        rightArc(0.2) 
    elif rec == "STOP":
        stop()     
    delay(100)


Führe zuerst das Programm für den Roboter (Mq6e.py) aus. Nachdem du es heruntergeladen hast, kannst du den Roboter vom USB-Anschluss wegnehmen, das micro:bit anschliessen und das Programm Mq6d.py in den Editor nehmen. Der micro:bit benötigt für die Programmausführung eine Stromversorgung. Du kannst ihn nach dem Programmdownload mit Computer verbunden lassen oder eine PowerBank anschliessen.

 

 

ZUM SELBST LÖSEN

 

 

4.

Ändere die Programme aus dem letzten Beispiel so, dass der Robot beim Drücken des Linken bzw. Rechten Button nicht auf einem Kreisbogen fährt sondern am Ort oder auf einem kleineren Kreisbogen abbiegt. Steuere dann der Roboter durch einen ähnlichen Parcours, wie in der Aufgaben 3.



5.
Schreibe Programme für micro:bit und für den mbRobot mit welchen die LEDs des Roboters ferngesteuert ein und ausgeschaltet werden.

 

 

 

   

 

6-1
Fachliche Hinweise:

Melodien, die Modul music definiert sind (nur Realmodus):

ADADADUM - Eröffnung von Beethoven’s 5. Sinfonie in C Moll
ENTERTAINER - Scott Joplin’s Ragtime Klassiker
PRELUDE -J.S.Bach’s 48 Preludien und Fugen
ODE - “Ode an Joy” Thema aus Beethoven’s 9. Sinfonie in D Moll
NYAN - das Nyan Cat Thema
RINGTONE - ein Klingelton
FUNK - ein Geräusch für Geheimagente
n BLUES - ein Boogie-Woogie Blues
BIRTHDAY - “Happy Birthday to You...”
WEDDING - der Chorus des Bräutigams aus Wagner’s Oper “Lohengrin”
FUNERAL - der “Trauerzug”, Chopin’s Klaviersonate
PUNCHLINE - a lustiger Tonclip, nachdem ein Witz gemacht wurde
PYTHON - aus “Monty Python’s Flying Circus”
BADDY - Filmclip aus "The Baddy"
CHASE - Filmclick aus einer Jagdszene
BA_DING - ein Signalton, der darauf hinweist, dass etwas geschehen ist
WAWAWAWAA - ein trauriger Posaunenklang
JUMP_UP - für Spiele, um auf eine Aufwärtsbewegung hinzuweisen
JUMP_DOWN - für Spiele, um auf eine Abwärtsbewegung hinzuweisen
POWER_UP - ein Fanfarenklang
POWER_DOWN - ein trauriger Fanfarenklang, wenn etwas verloren gegangen ist

6-2
Morse

 

 a : .-    ,  b : -...  ,  c : -.-.  ,  d : -..   ,  e : .     ,
 f : ..-.  ,  g : --.   ,  h : ....  ,  i : ..    ,  j : .---  ,
 k : -.-   ,  l : .-..  ,  m : --    ,  n : -.    ,  o : ---   ,
 p : .--.  ,  q : --.-  ,  r : .-.   ,  s : ...   ,  t : -     ,
 u : ..-   ,  v : ...-  ,  w : .--   ,  x : -..-  ,  y : -.--  ,
 z : --..