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

Raspberry Pi Pico mit Taster-Modul KY-004

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:

Elektronik-Sets für das Hardware-nahe Programmieren

Elektronik-Sets für das Hardware-nahe Programmieren

Programmieren mit dem Raspberry Pi Pico
Online-Meeting

Programmieren mit dem Raspberry Pi Pico

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

Frag Elektronik-Kompendium.de