buttons

6. BUTTONS

 

 

DU LERNST HIER...

 

wie man die beiden Calliope-Buttons verwendet, um interaktive Programme zu entwickeln.

 

 

WIE FUNKTIONIEREN DIE BUTTONS

 

Der Calliope 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(100)). Diese Pausen sind wichtig, da sonst das System zu stark belastet wird.

 

from calliope_mini import *
from callibot import *

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

repeat:
    if button_a.is_pressed():
        blink(setLEDRight)
    if button_b.is_pressed():
        blink(setLEDLeft)
    delay(100)       
► In Zwischenablage kopieren

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


Beispiel 2: Auf das Klicken eines Buttons reagieren (nur Realmodus)

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.

Das Modul music kann nur im Realmodus importiert werden.

 

from calliope_mini import *
from callibot import *
from music import *

repeat: 
    if button_a.was_pressed():
        play(JUMP_UP)
    if button_b.was_pressed():
        play(JUMP_DOWN)    
► In Zwischenablage kopieren

 

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.


from calliope_mini import *
from callibot import *

setSpeed(30)
forward()
while not button_a.was_pressed():
    d = getDistance()
    if d < 10:
        backward()
        delay(1000)
        forward()
    delay(200)
stop() 
► In Zwischenablage kopieren

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.

Bei der Ausführung im Simulationsmodus erscheint zusätzlich ein Fenster mit einem Calliope- Bild (eventuell musst du das andere Grafikfenster verschieben). Die Buttons bedienst du mit Mausklick.

 

from calliope_mini import *
from callibot import *

RobotContext.useBackground("sprites/bg.gif")  
RobotContext.setStartPosition(310, 460)

forward()
repeat:
    v = irLeft.read_digital()
    if v == 0:
        backward()
        delay(500)
        stop()
    if button_a.was_pressed():
        left()
        delay(550)
        forward()
    elif button_b.was_pressed():
        right()
        delay(550)     
        forward()
    sleep(10)
► In Zwischenablage kopieren

 

 

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.

Mit Klick auf den Button a wird der Alarm ausgelöst, mit Klick auf den Button b wird der Befehl setAlarm(0) aufgerufen und der Alarm gestoppt.

 

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.

Der Roboter soll durch die Parcours durchfahren, indem du ihm mit Klick auf den Button a bzw. Button b mitteilst, ob er links oder rechts abbiegen soll.

Löse die Aufgabe im Simulationsmodus und verwende das Hintergrundbild bg2.gif

 

 
 


 

   

 

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