Arduino Nano - Knopf - Entprellung

Wenn ein Knopf gedrückt oder losgelassen wird oder ein Schalter betätigt wird, gehen Neulinge oft davon aus, dass sich sein Zustand von LOW auf HIGH oder HIGH auf LOW ändert. In Wirklichkeit ist das nicht immer der Fall. Aufgrund mechanischer und physikalischer Eigenschaften kann der Zustand des Knopfes (oder Schalters) als Reaktion auf ein einziges Ereignis schnell zwischen LOW und HIGH mehrfach umgeschaltet werden. Dieses Phänomen wird als Prellen bezeichnet. Prellen kann dazu führen, dass ein einzelner Tastendruck als mehrere Tastendrücke erkannt werden, was in bestimmten Anwendungen zu Fehlfunktionen führt.

Klapperphänomen

Die Methode zur Beseitigung dieses Problems wird als Debouncing oder Debounce bezeichnet. Diese Anleitung erklärt dir, wie du es beim Einsatz des Tasters mit dem Arduino Nano machst. Wir lernen anhand der folgenden Schritte:

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 Button

Wenn Sie mit Tastern (Pinbelegung, Funktionalität, Programmierung usw.) nicht vertraut sind, 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.

Lassen Sie uns den Arduino Nano-Code sowohl mit als auch ohne Entprellung betrachten und vergleichen sowie die jeweiligen Verhaltensweisen.

Auslesen des Buttons ohne Entprellung

Bevor Sie in das Konzept der Entprellung eintauchen, werfen Sie einen Blick auf den Code ohne Entprellung und beobachten Sie sein Verhalten.

Schnelle Schritte

  • Schließen Sie ein USB-Kabel an den Arduino Nano und Ihren PC an.
  • Starten Sie die Arduino-IDE, wählen Sie das richtige Board und den richtigen Port aus.
  • Kopieren Sie den untenstehenden Code und öffnen Sie ihn in der Arduino-IDE.
/* * 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-debounce */ #define BUTTON_PIN 2 // The number of the pushbutton pin int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. 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) Serial.println("The button is pressed"); else if(prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino-IDE, um den Code zu kompilieren und auf das Arduino Nano-Board hochzuladen.
Code in der Arduino IDE hochladen
  • Öffnen Sie den seriellen Monitor.
  • Drücken und halten Sie den Knopf einige Sekunden lang gedrückt, dann lassen Sie ihn los.
  • Versuchen Sie es mehrmals.
  • Schauen Sie sich das Ergebnis im seriellen Monitor an.
COM6
Send
The button is pressed The button is pressed The button is pressed The button is released The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Manchmal hast du den Knopf nur einmal gedrückt und losgelassen. Dennoch interpretiert der Arduino Nano ihn als mehrere Tastendrücke und Loslassvorgänge. Dies ist das Prellen-Phänomen, das zu Beginn des Tutorials erwähnt wurde. Schauen wir, wie man es im nächsten Teil behebt.

Tasterauslesen mit Entprellung

Der folgende Code wendet die Debounce-Methode an, um das Prellen zu verhindern.

/* * 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-debounce */ #define BUTTON_PIN 2 // The number of the pushbutton pin const int DEBOUNCE_DELAY = 50; // The debounce time; increase if the output flickers int lastSteadyState = LOW; // The previous steady state from the input pin int lastFlickerableState = LOW; // The previous flickerable state from the input pin int button_state; // The current reading from the input pin // The following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastDebounceTime = 0; // The last time the output pin was toggled void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); // check to see if you just pressed the button // (i.e. the input went from LOW to HIGH), and you've waited long enough // since the last press to ignore any noise: // If the switch/button changed, due to noise or pressing: if (button_state != lastFlickerableState) { // reset the debouncing timer lastDebounceTime = millis(); // save the the last flickerable state lastFlickerableState = button_state; } if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) { // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // if the button state has changed: if (lastSteadyState == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (lastSteadyState == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last steady state lastSteadyState = button_state; } }

Schnelle Schritte

  • Kopiere den Code oben und öffne ihn mit der Arduino IDE.
  • Klicke auf den Hochladen-Knopf in der Arduino IDE, um den Code zu kompilieren und auf den Arduino Nano hochzuladen.
  • Öffne den seriellen Monitor.
  • Drücke den Knopf weiter einige Sekunden lang, und lasse ihn dann los.
  • Sieh dir das Ergebnis im seriellen Monitor an.
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Wie Sie beobachten können, haben Sie den Knopf nur einmal gedrückt und losgelassen. Der Arduino Nano erkennt es als einen einzigen Drück- und Loslassvorgang. Das Rauschen wird beseitigt.

Wir haben es einfach gemacht - Arduino Nano Entprellcode für Taster mit Bibliothek

Wir haben eine Bibliothek namens ezButton entwickelt, um es Anfängern, insbesondere beim Umgang mit mehreren Tastern, einfacher zu machen. Weitere Informationen zur ezButton-Bibliothek finden Sie hier.

Arduino Nano Entprellungscode für eine einzige Taste

#include <ezButton.h> ezButton button(2); // create ezButton object for pin 2; 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()) Serial.println("The button is pressed"); if(button.isReleased()) Serial.println("The button is released"); }

Arduino Nano Tastenentprell-Code für mehrere Tasten

/* * 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-debounce */ #include <ezButton.h> ezButton button1(6); // Erzeuge ein ezButton-Objekt für Pin 6; ezButton button2(7); // Erzeuge ein ezButton-Objekt für Pin 7; ezButton button3(8); // Erzeuge ein ezButton-Objekt für Pin 8; void setup() { Serial.begin(9600); button1.setDebounceTime(50); // Entprellzeit auf 50 Millisekunden setzen button2.setDebounceTime(50); // Entprellzeit auf 50 Millisekunden setzen button3.setDebounceTime(50); // Entprellzeit auf 50 Millisekunden setzen } void loop() { button1.loop(); // Die loop()-Funktion muss zuerst aufgerufen werden button2.loop(); // Die loop()-Funktion muss zuerst aufgerufen werden button3.loop(); // Die loop()-Funktion muss zuerst aufgerufen werden if(button1.isPressed()) Serial.println("The button 1 is pressed"); if(button1.isReleased()) Serial.println("The button 1 is released"); if(button2.isPressed()) Serial.println("The button 2 is pressed"); if(button2.isReleased()) Serial.println("The button 2 is released"); if(button3.isPressed()) Serial.println("The button 3 is pressed"); if(button3.isReleased()) Serial.println("The button 3 is released"); }

Die schematische Darstellung des obigen Codes: Die Abbildung der Verdrahtung des Codes: Die visuelle Darstellung der Verdrahtung des Codes:

Schaltplan für mehrere Tasten am Arduino Nano

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.

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.

Zusätzliches Wissen

  • Der Wert von DEBOUNCE_DELAY variiert je nach den physikalischen Eigenschaften jeder Taste. Es ist möglich, dass verschiedene Tasten unterschiedliche Werte verwenden.

Erweiterbarkeit

Die Entprelltechnik kann mit einem Schalter, einem Berührungssensor und mehr verwendet werden.

※ 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!