a-b-zaehler
Bauteil: Knoepfe A und B · Kategorie: onboard
Knopf A zaehlt hoch, Knopf B runter, A+B gemeinsam setzt auf 0. Der Wert (0..9) steht auf der LED-Matrix.
Material
| Anzahl | Bauteil |
|---|---|
| 1 | micro:bit V2.2 |
Hardware
Eingebaut, kein Aufbau noetig. Die Knoepfe A und B sitzen links und rechts der LED-Matrix.
Wie der Code funktioniert
button_a.is_pressed() and button_b.is_pressed()wird zuerst geprueft - sonst wuerde ein Druck auf beide Knoepfe erst hoch-/runterzaehlen.button_a.was_pressed()liefertTruegenau einmal pro Druck (Flanke). Der micro:bit puffert das intern, darum verpasst die Schleife keinen Druck und es prellt nicht.max(0, min(9, zaehler))klemmt den Wert auf 0..9 fest.
Programm
Ganzer Code, Quelle main.py (hier automatisch eingefuegt):
# Sample: a-b-zaehler (eingebaute Knoepfe A und B)
# Board: BBC micro:bit V2.2
# Sprache: MicroPython
#
# Ziel: Knopf A zaehlt einen Wert hoch, Knopf B zaehlt ihn runter,
# beide zusammen setzen ihn auf 0 zurueck. Der Wert (0..9) steht
# auf der LED-Matrix.
#
# --------------------------------------------------------------------------
# Hardware
# --------------------------------------------------------------------------
# Nichts anschliessen - die Knoepfe A und B sind fest eingebaut
# (links und rechts neben der LED-Matrix).
# --------------------------------------------------------------------------
from microbit import *
zaehler = 0
display.show(str(zaehler))
while True:
# Beide Knoepfe gleichzeitig -> zuerst pruefen, sonst zaehlt es mit
if button_a.is_pressed() and button_b.is_pressed():
zaehler = 0
# was_pressed(): reagiert einmal pro Druck (Flanke), kein Prellen
elif button_a.was_pressed():
zaehler = zaehler + 1
elif button_b.was_pressed():
zaehler = zaehler - 1
# Auf den Bereich 0..9 begrenzen (eine Ziffer auf der Matrix)
zaehler = max(0, min(9, zaehler))
display.show(str(zaehler))
sleep(50)
Auf den micro:bit uebertragen
https://python.microbit.org/v/3 -> Code einfuegen -> Connect -> Send to micro:bit. Details: ../../../../docs/setup.md.
Erwartetes Verhalten
- Start:
0 - A druecken ->
1,2, … bis9(dann stehen bleiben) - B druecken -> wieder runter bis
0 - A und B zusammen ->
0
Moegliche Erweiterungen
button_a.get_presses()stattwas_pressed()- zaehlt schnelle Mehrfachdruecke- Bereich auf 0..99 erweitern und den Wert mit
display.scroll()anzeigen - langer Druck (mit
running_time()messen) = Sprung um 10