Arduino Nano - Taste - langes Drücken kurzes Drücken

Dieses Tutorial zeigt dir, wie man mit dem Arduino Nano das lange Drücken und das kurze Drücken einer Taste erkennt. Im Detail werden wir die folgenden Beispiele durchgehen:

Im letzten Abschnitt lernen wir, wie man die Entprellung verwendet, um Tastendrücke in praktischen Anwendungen zu erkennen. Um mehr darüber zu erfahren, warum die Entprellung bei Tasten notwendig ist, lesen Sie bitte diesen Artikel. Ohne sie könnten wir fälschlicherweise einen kurzen Tastendruck des Tasters erkennen.

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

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 Pinbelegung, Funktion und Programmierung), können Ihnen die folgenden Tutorials helfen:

Verdrahtungsdiagramm

Arduino Nano Taster-Schaltplan

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

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

Wie man einen kurzen Tastendruck erkennt

Wir berechnen das Intervall zwischen dem Drücken- und dem Loslassen-Ereignis. Wenn die Dauer kürzer ist als eine vordefinierte Zeit, wird das Kurzdrücken-Ereignis identifiziert.

Geben Sie die Dauer eines kurzen Tastendrucks an.

const int SHORT_PRESS_TIME = 500; // 500 Millisekunden
  • Bestimmen Sie, wann der Knopf gedrückt wurde, und erfassen Sie den Zeitpunkt des Drückens.
if(prev_button_state == HIGH && button_state == LOW) time_pressed = millis();
  • Erkennen, wann der Knopf losgelassen wird, und die Zeit des Loslassens aufzeichnen.
if(prev_button_state == LOW && button_state == HIGH) time_released = millis();
  • Druck
  • Berechnen Sie die Dauer und den angewendeten Druck.
long press_duration = time_released - time_pressed;
  • Vergleiche die Betätigungsdauer mit der vorgegebenen kurzen Betätigungszeit, um einen kurzen Tastendruck zu identifizieren.
if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected");

Arduino Nano-Code zur Erkennung eines kurzen Tastendrucks

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ const int BUTTON_PIN = 2; // The number of the pushbutton pin const int SHORT_PRESS_TIME = 500; // 500 milliseconds int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin unsigned long time_pressed = 0; unsigned long time_released = 0; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) // button is pressed time_pressed = millis(); else if(prev_button_state == LOW && button_state == HIGH) { // button is released time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected"); } // save the the last state prev_button_state = button_state; }

Schnelle Schritte

  • Lade den Code auf den Arduino Nano hoch, mit der Arduino-IDE.
  • Drücke den Knopf mehrmals kurz.
  • Überprüfe die Ausgabe im seriellen Monitor.
COM6
Send
A short press is detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Der serielle Monitor kann mehrere kurze Betätigungen für einen einzelnen Druck anzeigen. Dies ist das erwartete Verhalten des Knopfs, bekannt als das „Prellphänomen“. Wir werden dieses Problem im abschließenden Teil dieses Tutorials behandeln.

So erkennen Sie einen langen Druck

Es gibt zwei Szenarien zur Erkennung eines langen Drucks:

  • Das Langdruck-Ereignis wird erkannt, sobald die Schaltfläche losgelassen wurde.
  • Das Langdruck-Ereignis wird erkannt, während die Schaltfläche gedrückt gehalten wird, sogar noch bevor sie losgelassen wird.
  1. Für die anfängliche Anwendung werden wir die Zeitspanne zwischen den gedrückten und losgelassenen Ereignissen berechnen. 2. Wenn die Dauer länger ist als eine vordefinierte Zeit, wird das Langdruck-Ereignis identifiziert.

Im zweiten Anwendungsfall wird beim Drücken der Taste die Druckdauer kontinuierlich gemessen und das Langdruck-Ereignis wird bis zum Loslassen der Taste geprüft. Solange die Taste gedrückt wird, wird geprüft, ob die Druckdauer eine vorab festgelegte Zeit überschreitet; das Langdruck-Ereignis wird dann erkannt.

Arduino Nano Code zur Erkennung eines langen Tastendrucks beim Loslassen

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ const int BUTTON_PIN = 2; // The number of the pushbutton pin const int LONG_PRESS_TIME = 1000; // 1000 milliseconds int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin unsigned long time_pressed = 0; unsigned long time_released = 0; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) // button is pressed time_pressed = millis(); else if(prev_button_state == LOW && button_state == HIGH) { // button is released time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration > LONG_PRESS_TIME ) Serial.println("A long press is detected"); } // save the the last state prev_button_state = button_state; }

Schnelle Schritte

  • Lade den Code auf den Arduino Nano mit der Arduino IDE hoch.
  • Warte eine Sekunde und drücke dann den Knopf und lasse ihn los.
  • Schau dir das Ergebnis im Serial Monitor an.
COM6
Send
A long press is detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Das Langdrücken-Ereignis wird erst erkannt, wenn der Knopf losgelassen wird.

Arduino Nano-Code zur Erkennung eines langen Tastendrucks

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ const int BUTTON_PIN = 2; // The number of the pushbutton pin const int LONG_PRESS_TIME = 1000; // 1000 milliseconds int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin unsigned long time_pressed = 0; bool is_pressing = false; bool is_long_detected = false; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) { // button is pressed time_pressed = millis(); is_pressing = true; is_long_detected = false; } else if(prev_button_state == LOW && button_state == HIGH) { // button is released is_pressing = false; } if(is_pressing == true && is_long_detected == false) { long press_duration = millis() - time_pressed; if( press_duration > LONG_PRESS_TIME ) { Serial.println("A long press is detected"); is_long_detected = true; } } // save the the last state prev_button_state = button_state; }

Schnelle Schritte

  • Lade den Code mit der Arduino-IDE auf den Arduino Nano hoch.
  • Drücke den Knopf einige Sekunden lang und halte ihn gedrückt.
  • Überprüfe die Ausgabe im Serial Monitor.
COM6
Send
A long press is detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Das Ereignis des langen Drückens wird nur registriert, wenn die Schaltfläche nicht losgelassen wurde.

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

Kurzer Tastendruck und langer Tastendruck nach dem Loslassen

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ const int BUTTON_PIN = 2; // The number of the pushbutton pin const int SHORT_PRESS_TIME = 1000; // 1000 milliseconds const int LONG_PRESS_TIME = 1000; // 1000 milliseconds int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin unsigned long time_pressed = 0; unsigned long time_released = 0; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) // button is pressed time_pressed = millis(); else if(prev_button_state == LOW && button_state == HIGH) { // button is released time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected"); if( press_duration > LONG_PRESS_TIME ) Serial.println("A long press is detected"); } // save the the last state prev_button_state = button_state; }

Schnelle Schritte

  • Lade den Code auf das Arduino Nano mit der Arduino IDE hoch.
  • Drücke den Knopf kurz oder lange.
  • Überprüfe die Ausgabe im Serial Monitor.

※ Notiz:

Der Serial Monitor kann mehrere kurze Tastendrücke anzeigen, wenn ein langer Tastendruck ausgeführt wird. Dies ist das erwartete Verhalten des Schalters und wird als das Prellungsphänomen bezeichnet. Eine Lösung für dieses Problem wird im abschließenden Abschnitt dieses Tutorials vorgestellt.

Kurzer Druck und langer Druck während des Drückens

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ const int BUTTON_PIN = 2; // The number of the pushbutton pin const int SHORT_PRESS_TIME = 1000; // 1000 milliseconds const int LONG_PRESS_TIME = 1000; // 1000 milliseconds int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin unsigned long time_pressed = 0; unsigned long time_released = 0; bool is_pressing = false; bool is_long_detected = false; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) { // button is pressed time_pressed = millis(); is_pressing = true; is_long_detected = false; } else if(prev_button_state == LOW && button_state == HIGH) { // button is released is_pressing = false; time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected"); } if(is_pressing == true && is_long_detected == false) { long press_duration = millis() - time_pressed; if( press_duration > LONG_PRESS_TIME ) { Serial.println("A long press is detected"); is_long_detected = true; } } // save the the last state prev_button_state = button_state; }

Schnelle Schritte

  • Lade den Code mit der Arduino IDE auf den Arduino Nano hoch.
  • Drücke den Knopf lange und danach kurz.
  • Schau dir das Ergebnis im Serial Monitor an.

※ Notiz:

Der serielle Monitor kann mehrere kurze Betätigungen erkennen, wenn eine lange Betätigung ausgeführt wird. Dies ist das erwartete Verhalten des Tasters und wird als das „Prellungsphänomen“ bezeichnet. Dieses Problem wird im abschließenden Abschnitt dieses Tutorials behandelt.

Langes Drücken und Kurzes Drücken mit Entprellung

Es ist wesentlich, das Entprellen des Buttons in zahlreichen Anwendungen zu implementieren.

Entprellen kann kompliziert sein, insbesondere wenn mehrere Tasten beteiligt sind. Um es Anfängern leichter zu machen, haben wir eine Bibliothek entwickelt, die unter dem Namen ezButton bekannt ist.

Wir werden diese Bibliothek in den untenstehenden Codes verwenden.

Kurzer Druck und Langer Druck mit Entprellung nach dem Loslassen

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ #include <ezButton.h> const int SHORT_PRESS_TIME = 1000; // 1000 milliseconds const int LONG_PRESS_TIME = 1000; // 1000 milliseconds ezButton button(2); // create ezButton object for pin 2 unsigned long time_pressed = 0; unsigned long time_released = 0; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if(button.isPressed()) time_pressed = millis(); if(button.isReleased()) { time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected"); if( press_duration > LONG_PRESS_TIME ) Serial.println("A long press is detected"); } }

Schnelle Schritte

  • Installieren Sie die ezButton-Bibliothek.
  • Siehe How To für Anweisungen.
  • Laden Sie den Code auf den Arduino Nano mit der Arduino IDE hoch.
  • Drücken Sie den Knopf und halten Sie ihn für eine kurze oder längere Zeit gedrückt.
  • Schauen Sie sich die Ergebnisse im seriellen Monitor an.

Kurzer Tastendruck und langer Tastendruck mit Entprellung während des Drückens

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-button-long-press-short-press */ #include <ezButton.h> const int SHORT_PRESS_TIME = 1000; // 1000 milliseconds const int LONG_PRESS_TIME = 1000; // 1000 milliseconds ezButton button(2); // create ezButton object for pin 2 unsigned long time_pressed = 0; unsigned long time_released = 0; bool is_pressing = false; bool is_long_detected = false; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if(button.isPressed()){ time_pressed = millis(); is_pressing = true; is_long_detected = false; } if(button.isReleased()) { is_pressing = false; time_released = millis(); long press_duration = time_released - time_pressed; if( press_duration < SHORT_PRESS_TIME ) Serial.println("A short press is detected"); } if(is_pressing == true && is_long_detected == false) { long press_duration = millis() - time_pressed; if( press_duration > LONG_PRESS_TIME ) { Serial.println("A long press is detected"); is_long_detected = true; } } }

Schnelle Schritte

  • Fügen Sie die ezButton-Bibliothek zu Ihrem Projekt hinzu. Siehe Anleitung für Anleitungen.
  • Kompilieren Sie den Code und laden Sie ihn mit der Arduino IDE auf das Arduino Nano-Board hoch.
  • Drücken Sie den Knopf und halten Sie ihn für eine kurze oder längere Zeit gedrückt.
  • Überprüfen Sie die Ausgabe im Serial Monitor.

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 Langdruck und Kurzdruck benötigt werden

  • Um die Anzahl der Tasten zu minimieren, kann eine einzelne Taste mehrere Funktionen haben. Beispielsweise kann ein kurzer Druck verwendet werden, um den Betriebsmodus zu wechseln, während ein langer Druck zum Ausschalten des Geräts verwendet werden kann.
  • Ein langes Drücken dient dazu, eine versehentliche Aktivierung zu verhindern. Beispielsweise verwenden manche Geräte eine Taste für einen Werksreset. Wenn sie versehentlich gedrückt wird, könnte dies gefährlich sein. Um dies zu verhindern, ist das Gerät so konzipiert, dass der Werksreset erst ausgelöst wird, wenn die Taste für eine bestimmte Zeit 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!