buttons

4. BUTTONS

 

 

DU LERNST HIER...

 

wie man die beiden Tastenschalter (Buttons) verwendet, um interaktive Programme zu entwickeln.

 

 

AUF DRÜCKEN EINES BUTTONS REAGIEREN

 

Der Calliope verfügt über zwei programmierbare Buttons. Der blaue wird mit A, der rote mit B bezeichnet und mit den Objektvariablen button_a bzw. 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()).

 

 

 

Dein Programm wartet in einer Endlosschleife, bis du den Button A drückst. Dann werden die im Kreuz angeordneten LEDs eingeschaltet und zwar so lange du den Button gedrückt hältst.

 


Programm:

from calliope_mini import *

while True:
    if button_a.is_pressed():
        display.show(Image.NO)
    else:    
        display.clear()    
    sleep(10)    
► In Zwischenablage kopieren

Das überflüssig erscheinende sleep(10) ist wichtig, damit du nicht unnötig viele Rechnerressourcen verschwendest, wenn das Programm nichts anderes machen muss, als zu überprüfen, ob der Button gedrückt ist. In der Fachsprache sagt man auch, dass der Zustand des Buttons in der Endlosschleife "gepollt" wird.

 

 

AUF KLICKEN EINES BUTTONS REAGIEREN

 

So wie du es von den Mausklicks kennst, möchtest du hier mit einem Button-Klick ein laufendes Programm unterbrechen und eine andere Aktion ausführen. In einer endlosen while-Schleife lässt du die mittlere LED mit einer Periode von 2 s blinken. Ein Klick auf den Button A soll das Blinken unterbrechen und ein Quadrat anzeigen.

 
Leider funktioniert das folgende Programm mit button_a.is_pressed() nicht richtig.

Programm:

from calliope_mini import *

def blink(x, y):
    display.set_pixel(x, y, 9)
    sleep(500)    
    display.set_pixel(x, y, 0)
    sleep(500)  

while True:
    if button_a.is_pressed():
        display.show(Image.SQUARE)
        sleep(1000)
        display.clear()
    blink(2, 2)
    sleep(10)

► In Zwischenablage kopieren

Da das Programm die meiste Zeit in der blink-Funktion verbringt, kann es nicht merken, wenn du während dieser Zeit den Button drückst und wieder loslässt.

Um einen Klicks trotzdem zu erfassen, musst du die Funktion button_a.was_pressed() verwenden. Diese liefert True, wenn du irgend einmal den Button geklickt hast. Der Klick wird als Event aufgefasst, der vom System auch dann registriert wird,  wenn dein Programm gerade etwas anderes macht.

Das so korrigierte Programm reagiert nun wunschgemäss auf Klicks.

Programm:

from calliope_mini import *

def blink(x, y):
    display.set_pixel(x, y, 9)
    sleep(500)    
    display.set_pixel(x, y, 0)
    sleep(500)    

while True:
    if button_a.was_pressed():
        display.show(Image.SQUARE)
        sleep(1000)
        display.clear()
    blink(2, 2)
    sleep(10)    

► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Du kannst  interaktive Programme entwickeln, die auf  einen gedrückt gehaltenen Button oder auf einen Button-Klick reagieren. Mit der Funktion is_pressed() muss der Button im Moment des Funktionsaufrufs gedrückt sein, damit sie True zurückgibt, mit der Funktion was_pressed() wird True zurückgegeben, wenn seit dem dem Start des Programms oder seit dem letzten Aufruf der Button irgendwann mal geklickt wurde.

 

 

ZUM SELBST LÖSEN

 

 

1.

Programmiere die Buttons wie folgt:

Wenn du den Button A drückst, so erscheint ein Pfeil, der nach links zeigt (ARROW_W), wenn du den rechten Button drückst, so erscheint ein Pfeil nach rechts (ARROW_E).
 

2.

Programmiere einen Klickzähler: Bei jedem Klick auf den Button A wird die Anzahl n, die zu Beginn 0 ist, um eins vergrössert und zur Kontrolle im Terminalfenster ausgeschrieben. Beim Klick auf den Button B soll die Totalzahl als Lauftext auf dem Display erscheinen.

Bemerkung Der Befehl scroll() kann nur Texte anzeigen. Mit str(n) kannst du eine Zahl in einen Text umwandeln.

3.

Du simulierst mit dem Calliope das Werfen eines Würfels. Bei jedem Klicken auf den Button A wird auf dem Display das Bild einer zufälligen Würfelseite dargestellt.

Anmerkung:
Am einfachsten erstellst du die Bilder als Images z. B. die Vier mit
img = Image('00000:09090:00000:09090:00000:')

2-1
Fachliche Hinweise:

Bilder, die in der Klasse Image definiert sind:

HEART, HEART_SMALL, HAPPY, SMILE, SAD, CONFUSED, ANGRY, ASLEEP, SURPRISED,
SILLY, FABULOUS, MEH, YES, NO, CLOCK12, CLOCK11, CLOCK10, CLOCK9, CLOCK8,
CLOCK7, CLOCK6, CLOCK5, CLOCK4, CLOCK3, CLOCK2, CLOCK1, ARROW_N,
ARROW_NE, ARROW_E, ARROW_SE, ARROW_S, ARROW_SW, ARROW_W, ARROW_NW,
TRIANGLE, TRIANGLE_LEFT, CHESSBOARD, DIAMOND, DIAMOND_SMALL, SQUARE,
SQUARE_SMALL, RABBIT, COW, MUSIC_CROTCHET, MUSIC_QUAVER, MUSIC_QUAVERS,
PITCHFORK, XMAS, PACMAN, TARGET, TSHIRT, ROLLERSKATE, DUCK, HOUSE,
TORTOISE, BUTTERFLY, STICKFIGURE, GHOST, SWORD, GIRAFFE, SKULL, SNAKE