wie man die beiden Calliope-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.
Die Funktion button_a.is_pressed() gibt True zurück, wenn der linke Button 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)
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 (nicht mit gedrückt halten) eine Aktion auslösen. Dazu verwendest du die Funktion button_a.was_pressed(). Diese liefert True, wenn du irgendeinmal den Button kurz gedrückt hast.
In deinem Beispiel wird beim Klick auf den Button A das Image SQUARE und beim klicken des Buttons B das Image NO angezeigt. Im Unterschied zum ersten Beispiel, musst du die Buttons nicht gedrückt halten.
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)
So wie du es von den Mausklicks kennst, kannst du auch 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 200 ms blinken. Mit einem Klick auf den Button A wird das Blinken unterbrochen und während 1000 ms ein Quadrat anzeigen. Dann wird das Programm mit Blinken wieder fortgesetzt.
Du verwendest auch hier die Funktion button_a.was_pressed(). Der Klick wird als Event aufgefasst, der vom System auch dann registriert wird, wenn dein Programm gerade etwas anderes macht.
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)
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 gedrückt sein, damit True zurückgegeben wird, mit der Funktion was_pressed() wird True zurückgegeben, wenn der Button seit dem tart des Programms oder seit dem letzten Buttonklick 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:')