Micro Python Tutorial Teil 2 - Taster
| MicroPython
Onboard LED leuchten lassen
Als erstes lassen wir die LED vom Pico leuchten indem wir den Taster am Board betätigen. Dafür laden wir folgendes Script.
# Bibliotheken laden from machine import Pin # Initialisierung von GPIO25 als Ausgang led_onboard = Pin(25, Pin.OUT) # Initialisierung von GPIO14 als Eingang mit internem PULLDOWN-Widerstand btn = Pin(14, Pin.IN, Pin.PULL_DOWN) # Funktion zur Taster-Auswertung while True: led_onboard.toggle()
Im Prinzip ganz simpel, wird deklarieren die LED und den Button mit den jeweiligen Pins und bei Klick togglen wir den Status der LED. Zur genauen Beschreibung des Buttons. Wir sagen dieses mal Pin.IN sodass wir die Zustände des Schalters lesen können. Pin.PULL_DOWN aktiviert einen internen Pull-Down-Widerstand sodass der Pin standardmäßig auf 0V (LOW) gesetzt ist. Wird der Schaltkreis nun durch den Taster geschlossen, so ändert sich der Pin auf 3.3V (HIGH) und der Pico erkennt, durch den Pin.IN nun eine Veränderung des Zustandes. Dieses Wissen ist wichtig um zu verstehen, wie diese Logik nun genau funktioniert! Weiters ist der Pull-Down-Widerstand notwending, da es sonst passieren kann, dass der Schalter dynamisch zwischen HIGH/LOW wechselt.
Externes Gerät Togglen
Das vorherige Wissen habe ich genutzt um einen Elektro Motor anzutreiben. Die Herausforderung war, dass ich die 3.3V Versorgung an den Motor bekomme. Die Spannung vom GPIO war irgendwie nicht ausreichend. Deshalb musste ich mein Wissen über PNP und NPN Transistorer noch einmal aufrischen, wann dieser Schalter aufgeht und wo die Pins nun genau sind. Im Prinzip habe ich nun einen NPN Transistor genutzt und den Elektro Motor an den Kollektor verbunden. Den Eingang des GPIO hab ich an die Basis angeschlossen und der Kreis schließt sich mit einer Verbindung zum Emitter-Anschluss.
Im unteren Bereich habe ich den Taster wie aus der vorherigen Schaltung platziert mit dem ich den Zustand abfrage. Drücke ich den Schalter, macht dieser den Transistor auf und der Motor geht an. Drücke ich nochmal geht er aus und das immer so weiter.
Eine Schwierigkeit bei Tastern die ich noch nicht erwähnt habe ist das wir diesen “Entprellen” müssen. Beim mehrmaligen klicken, kann es sonst vorkommen, dass die Funktion öfters aufgerufen wird. Beim vorherigen Test mit der LED ist das klar ersichtlich, da nach einem Klick die LED manchmal an und gleich wieder aus geht. Im folgenden Script ist die Entprellung implementiert (mit Hilfe von ChatGPT und manchmal kommt es noch zu Bugs aber zu 90% der Klicks funktionierts!)
# Bibliotheken laden from machine import Pin, Timer from time import sleep # Initialisierung von GPIO25 als Ausgang led_onboard = Pin(25, Pin.OUT, value=0) # Initialisierung von GPIO17 als Eingang mit internem PULLDOWN-Widerstand btn = Pin(17, Pin.IN, Pin.PULL_DOWN) led = Pin(18, Pin.OUT) pressed = False led.off() # Entprell-Timer und Statusvariable debounce_timer = Timer() debouncing = False # Variable, um den Timer-Status zu verfolgen # Taster-Funktion mit Entprellung def button_handler(pin): global debouncing if not debouncing: debouncing = True # Timer startet, also auf "entprellt" setzen debounce_timer.init(mode=Timer.ONE_SHOT, period=100, callback=debounce_callback) # Funktion, die nach der Entprell-Zeit ausgeführt wird def debounce_callback(timer): global pressed, debouncing if btn.value() == 1: # Überprüfen, ob der Button immer noch gedrückt ist pressed = not pressed # Wert zwischen True und False wechseln print("Led an:", pressed) if pressed: led.on() else: led.off() debouncing = False # Entprellung ist abgeschlossen # Taster-Auslösung mit IRQ und Entprellung btn.irq(trigger=Pin.IRQ_RISING, handler=button_handler)
Gib mir Feedback!
Hab ich Blödsinn geschrieben oder etwas vergessen? Dann zögere nicht weiter und lass es mich sofort wissen indem du hier einen Kommentar hinterlässt!