Raspberry Pi Pico: Taster entprellen mit CircuitPython
Wenn Du einen Taster betätigst, dann führt das in der Regel zur Mehrfachausführung der damit verbundenen Funktion. Doch warum ist das so? Funktioniert das Programm nicht richtig? Nein. Das Problem sind die Taster. Die neigen zum Prellen. Beim Prellen schließt und öffnet sich die Kontaktstelle wegen der Mechanik sehr schnell mehrmals hintereinander.
In CircuitPython kann ein Taster-Zustand über einen digitalen Eingang abgefragt werden. Doch dieser digitale Eingang kann nicht entprellen. Darum muss sich der Programmierer selber kümmern. Die folgende Lösung kann man als Musterlösung ansehen, um den Zustand eines oder mehrerer Taster prellfrei auszuwerten.
Aufbau und Bauteile
Der GPIO15 (Pin 20) und GPIO7 (Pin 10) sind deshalb gewählt, damit man ein Taster-Modul vom Typ KY-004 im Steckbrett so einstecken kann, dass man keine Verbindungskabel braucht. Beim Drücken der Taster wird der GPIO mit GND verbunden.
Programmcode für CirucuitPython
In der Endlos-Schleife werden der Zustand „gedrückt“ und „losgelassen“ ausgewertet. Der Zustand „gedrückt gehalten“ ist nicht berücksichtigt.
# Bibliotheken laden import board import keypad import time # Taster-Pins (bei Bedarf ergänzen) BTN_PINS = ( board.GP15, ) # Taster initialisieren (mit Pullup-Widerstand) buttons = keypad.Keys(BTN_PINS, value_when_pressed=False, pull=True) # Wiederholung: Endlos-Schleife while True: time.sleep(0.1) event = buttons.events.get() # Wenn ein Ereignis eintritt if event: #print(event) if event.pressed: print('Gedrückt:', event.key_number) if event.released: print('Losgelassen:', event.key_number)
Der Programmcode ist so konzipiert, dass sich gleich mehrere Taster auf einmal initialisieren und entprellen lassen. Die GPIO-Pins, an denen die Taster angeschlossen sind, sind im Array BTN_PINS definiert. Sie sind mit einem Komma zu trennen.
Im folgenden Programmcode ist zusätzlich die Auswertung der Taster an den unterschiedlichen GPIOs berücksichtigt.
# Bibliotheken laden import board import keypad import time # Taster-Pins (bei Bedarf ergänzen) BTN_PINS = ( board.GP15, board.GP11, ) # Taster initialisieren (mit Pullup-Widerstand) buttons = keypad.Keys(BTN_PINS, value_when_pressed=False, pull=True) # Wiederholung: Endlos-Schleife while True: time.sleep(0.1) event = buttons.events.get() # Wenn ein Ereignis eintritt if event: #print(event) if event.pressed and event.key_number == 0: print('Taster an GPIO 15') if event.pressed and event.key_number == 1: print('Taster an GPIO 11')
Weitere verwandte Themen:
- Raspberry Pi Pico: Taster entprellen mit MicroPython
- Raspberry Pi Pico: Taster-Zustand auswerten und mit einer LED anzeigen
- Raspberry Pi Pico: Taster-Zustand invertieren (Inverter/NICHT-Funktion)
- Raspberry Pi Pico: LED mit Taster ein- und ausschalten
- Raspberry Pi Pico: Bootsel-Button als Taster nutzen
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.