Raspberry Pi - Taste - Langes Drücken Kurzes Drücken

Dieses Tutorial erklärt dir, wie du mit dem Raspberry Pi den langen und den kurzen Tastendruck der Taste erkennen kannst. Um es einfach zu halten, erläutern wir es anhand der folgenden Beispiele:

Im letzten Abschnitt werden wir untersuchen, wie man Entprellung in der Praxis einsetzt. Für weitere Informationen darüber, warum Entprellung bei Tastern notwendig ist, verweisen Sie bitte auf diesen Artikel. Ohne Entprellung ist es möglich, einen kurzen Tastendruck des Tasters falsch zu erkennen.

Erforderliche Hardware

1×Raspberry Pi 5
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über die Schaltfläche

Wenn Sie mit Tastern nicht vertraut sind (einschließlich Pinbelegungen, wie sie funktionieren und wie man sie programmiert), können Ihnen die folgenden Tutorials helfen.

Verdrahtungsdiagramm

Raspberry Pi Taster-Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

In diesem Tutorial verwenden wir den internen Pull-up-Widerstand. Dadurch ist der Zustand des Tasters, wenn er nicht gedrückt ist, HIGH, und wenn er gedrückt wird, LOW.

So erkennen Sie einen kurzen Tastendruck

Wir berechnen die Zeitdauer zwischen dem Drücken und dem Loslassen. Wenn der Zeitraum unter einer vorgegebenen Zeit liegt, erkennen wir ein kurzes Drücken.

Geben Sie die Dauer eines kurzen Tastendrucks an.

SHORT_PRESS_TIME = 0.5 # 500 Millisekunden
  • Ermitteln Sie, ob der Knopf gedrückt wurde, und zeichnen Sie den Zeitpunkt des Knopfdrucks auf.
if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Knopf ist gedrückt press_time_start = time.time()
  • Ermitteln Sie, wann der Knopf losgelassen wurde, und protokollieren Sie die Zeit des Loslassens.
if prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Taste wird losgelassen press_time_end = time.time()
  • Bestimme die Druckdauer.
press_duration = press_time_end - press_time_start
  • Vergleichen Sie die Betätigungsdauer mit der definierten Zeit für einen kurzen Tastendruck, um einen kurzen Tastendruck zu identifizieren.
if press_duration < SHORT_PRESS_TIME: print("A short press is detected")

Raspberry-Pi-Code zur Erkennung eines kurzen Tastendrucks

Schnelle Schritte

  • Stelle sicher, dass Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf deinem Raspberry Pi installiert ist.
  • Stelle sicher, dass dein Raspberry Pi mit demselben lokalen Netzwerk wie dein PC verbunden ist.
  • Stelle sicher, dass dein Raspberry Pi mit dem Internet verbunden ist, falls du Bibliotheken installieren musst.
  • Falls dies das erste Mal ist, dass du den Raspberry Pi verwendest, sieh dir Anleitung zur Einrichtung des Raspberry Pi an.
  • Verbinde deinen PC per SSH mit dem Raspberry Pi, entweder über den integrierten SSH-Client unter Linux und macOS oder PuTTY unter Windows. Siehe wie man den PC über SSH mit dem Raspberry Pi verbindet.
  • Stelle sicher, dass die RPi.GPIO-Bibliothek installiert ist. Falls nicht, installiere sie mit dem folgenden Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Erstelle eine Python-Skriptdatei short_press.py und füge den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 SHORT_PRESS_TIME = 0.5 # 500 milliseconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration < SHORT_PRESS_TIME: print("A short press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 short_press.py
  • Drücke den Knopf mehrmals kurz hintereinander.
  • Schau dir das Ergebnis im Terminal an.
PuTTY - Raspberry Pi
A short press is detected A short press is detected A short press is detected

Das Skript läuft kontinuierlich in einer Endlosschleife, bis Sie im Terminal Strg + C drücken.

So erkennen Sie einen langen Druck

Es gibt zwei Szenarien, um einen langen Druck zu erkennen:

  • Das Langdruck-Ereignis wird unmittelbar nach dem Loslassen der Schaltfläche erkannt.
  • Das Langdruck-Ereignis wird erkannt, während die Schaltfläche gedrückt gehalten wird, selbst bevor sie losgelassen wird.

Im ersten Szenario wird die Dauer zwischen dem Drücken- und dem Loslassen-Ereignis berechnet. Überschreitet diese Dauer eine festgelegte Zeit, wird ein Langdruck-Ereignis identifiziert.

Im zweiten Szenario wird die Dauer des Drucks kontinuierlich überwacht, bis der Knopf losgelassen wird. Solange der Knopf gedrückt gehalten wird, wird das Langdruck-Ereignis erkannt, sobald die Dauer eine vorgegebene Zeit überschreitet.

Raspberry Pi-Code zur Erkennung eines langen Drückens beim Loslassen

Schnelle Schritte

  • Erstelle eine Python-Skriptdatei long_press_1.py und füge den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 LONG_PRESS_TIME = 1.0 # 1 seconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration >= LONG_PRESS_TIME: print("A long press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 long_press_1.py
  • Drücken Sie die Taste zwei Sekunden lang und lassen Sie sie danach los.
  • Überprüfen Sie das Ergebnis im Terminal.
PuTTY - Raspberry Pi
A long press is detected

Das Langdruck-Ereignis wird erst erkannt, wenn die Taste losgelassen wird.

Raspberry-Pi-Code zur Erkennung eines langen Tastendrucks während des Drückens

Schnelle Schritte

  • Erstelle eine Python-Skriptdatei long_press_2.py und füge den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 LONG_PRESS_TIME = 1.0 # 1000 milliseconds (1 second) # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 is_pressing = False is_long_detected = False # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() is_pressing = True is_long_detected = False elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released is_pressing = False if is_pressing and not is_long_detected: press_duration = time.time() - press_time_start if press_duration > LONG_PRESS_TIME: print("A long press is detected") is_long_detected = True # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Speichere die Datei und führe das Python-Skript aus, indem du den folgenden Befehl im Terminal ausführst:
python3 long_press_2.py
  • Drücken Sie den Knopf und halten Sie ihn einige Sekunden lang gedrückt, dann lassen Sie ihn los.
  • Schauen Sie sich das Ergebnis am seriellen Monitor an.
PuTTY - Raspberry Pi
A long press is detected

Das Langdruck-Ereignis wird nur erkannt, auch wenn die Taste noch nicht losgelassen wurde.

Wie man sowohl langes Drücken als auch kurzes Drücken erkennt

Schnelle Schritte

  • Erstelle eine Python-Skriptdatei long_short_press.py und füge den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 SHORT_PRESS_TIME = 0.5 # 500 milliseconds LONG_PRESS_TIME = 1.0 # 1 seconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration < SHORT_PRESS_TIME: print("A short press is detected") elif press_duration >= LONG_PRESS_TIME: print("A long press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 long_short_press.py
  • Drücken Sie den Knopf sowohl kurz als auch lang.
  • Schauen Sie sich die Ergebnisse im Terminal an.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Warum Lang- und Kurzdrücken nötig sind

  • Um die Anzahl der Tasten zu minimieren, kann eine Taste verwendet werden, um mehrere Funktionen auszuführen. Zum Beispiel kann ein kurzer Tastendruck verwendet werden, um den Betriebsmodus zu wechseln, während ein langer Tastendruck verwendet werden kann, um das Gerät auszuschalten.
  • Die Verwendung eines langen Tastendrucks hilft, versehentliches kurzes Drücken zu verhindern. Zum Beispiel verwenden einige Geräte einen Knopf, um einen Werksreset zu initiieren. Wenn der Knopf unbeabsichtigt gedrückt wird, könnte dies gefährlich sein. Um dies zu verhindern, ist das Gerät so konzipiert, dass es einen Werksreset nur dann initiiert, wenn der Knopf eine bestimmte Zeit lang gedrückt gehalten wird (z. B. 5 Sekunden).

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!