drehen-und-druck
Bauteil: EC11 Rotary Encoder ยท Kategorie: input
Wie drehen-zaehler, zusaetzlich der Taster im Knopf: auf den Knopf druecken setzt den Zaehler zurueck auf 0 und gibt einen kurzen Ton aus.
Material
| Anzahl | Bauteil |
|---|---|
| 1 | micro:bit V2.2 |
| 1 | Rotary Encoder EC11 (mit Push) |
| 1 | Steckbrett |
| 5 | Jumperkabel |
Verkabelung
micro:bit EC11
+---------+ +----------+
| P0 |--------| A (CLK) |
| GND |--------| C (COM) |
| P1 |--------| B (DT) |
| P2 |--------| SW 1 |
| GND |--------| SW 2 |
+---------+ +----------+
Interne Pull-ups fuer P0, P1, P2 per Code. Knopf gedrueckt -> P2 = 0.
CLK und DT (Pin A und Pin B) sind vertauschbar - die beiden Drehsignale
sind gleichwertig und je nach Encoder anders beschriftet. Vertauscht man sie,
dreht sich nur die Zaehlrichtung um. Falsch herum: P0 und P1 tauschen.
Die Taster-Pins sind davon nicht betroffen.
Foto der Verkabelung
Nach dem Test ein Foto in wiring/ ablegen und hier einbinden:
Wie der Code funktioniert
Zwei Dinge in einer Schleife:
| Teil | Aufgabe |
|---|---|
| Drehen | fallende Flanke an CLK -> zaehler +/- 1 (auf 0..9 begrenzt) |
| Druck (Flanke) | zaehler = 0, kurzer Ton music.pitch(660, 80, pin=None) |
Der Druck wird - wie beim Pushbutton - ueber eine Flanke (war_gedrueckt)
erkannt, damit ein Reset nur einmal pro Druck ausgeloest wird.
Programm
Ganzer Code, Quelle main.py (hier automatisch eingefuegt):
# Sample: drehen-und-druck (EC11 Rotary Encoder mit Push)
# Board: BBC micro:bit V2.2
# Sprache: MicroPython
#
# Ziel: Drehen aendert einen Zaehler (0..9, LED-Matrix zeigt die Ziffer).
# Auf den Knopf druecken -> Zaehler zurueck auf 0 + kurzer Ton.
#
# --------------------------------------------------------------------------
# Verkabelung (EC11, Standard-Bauform)
# --------------------------------------------------------------------------
# Encoder-Seite (3 Pins):
# Pin A (CLK) -> P0
# Pin C (COM) -> GND (mittlerer Pin)
# Pin B (DT) -> P1
#
# Taster-Seite (2 Pins):
# SW 1 -> P2
# SW 2 -> GND
#
# Interne Pull-ups fuer P0, P1 und P2 werden per Code aktiviert.
# - Knopf losgelassen: P2 = 1
# - Knopf gedrueckt: P2 = 0
# Hinweis: Pin A (CLK) und Pin B (DT) sind gleichwertig / je nach Encoder
# anders beschriftet. Vertauschen dreht nur die Zaehlrichtung um.
# Dreht der Zaehler falsch herum -> P0 und P1 tauschen.
# --------------------------------------------------------------------------
from microbit import *
import music
pin0.set_pull(pin0.PULL_UP) # CLK
pin1.set_pull(pin1.PULL_UP) # DT
pin2.set_pull(pin2.PULL_UP) # SW (Taster im Knopf)
zaehler = 0
letzter_clk = pin0.read_digital()
war_gedrueckt = False
display.show(str(zaehler))
while True:
# ----- Drehen auswerten -----
clk = pin0.read_digital()
if clk != letzter_clk and clk == 0:
if pin1.read_digital() == 1:
zaehler = zaehler + 1
else:
zaehler = zaehler - 1
zaehler = max(0, min(9, zaehler))
display.show(str(zaehler))
print("Zaehler:", zaehler)
letzter_clk = clk
# ----- Druck auswerten (Flanke) -----
gedrueckt = (pin2.read_digital() == 0)
if gedrueckt and not war_gedrueckt:
zaehler = 0
music.pitch(660, 80, pin=None)
display.show(str(zaehler))
print("Reset")
war_gedrueckt = gedrueckt
sleep(1)
Auf den micro:bit uebertragen
https://python.microbit.org/v/3 -> Code einfuegen -> Connect -> Send to micro:bit. Details: ../../../../docs/setup.md.
Erwartetes Verhalten
- Drehen -> Ziffer 0..9 aendert sich
- Knopf druecken -> Ziffer springt auf 0, kurzer Ton
Moegliche Erweiterungen
- Kurzer Druck = Reset, langer Druck = andere Funktion
- Druck schaltet zwischen zwei Modi um (z. B. Schrittweite 1 oder 5)