Arduino Nano ESP32 – Taster – Entprellung

Wenn ein Knopf gedrückt bzw. losgelassen wird oder wenn ein Schalter zwischen EIN und AUS umgeschaltet wird, ändert sich sein Zustand einmal von LOW auf HIGH (oder von HIGH auf LOW). Ist das korrekt?

⇒ Nein, das ist nicht der Fall. Das liegt in der physischen Welt. Wenn Sie einen Knopf einmal drücken, wird der Zustand des Knopfs schnell zwischen LOW und HIGH mehrmals umgeschaltet, statt nur einmal. Dies ist die mechanische und physikalische Eigenschaft. Dieses Phänomen ist unter dem Namen bekannt: Kontaktprellen. Das Kontaktprellen-Phänomen führt dazu, dass der Mikrocontroller (z. B. ESP32) mehrere Tastendrücke als Reaktion auf einen einzelnen tatsächlichen Druck liest. Dies führt zu einer Fehlfunktion. Der Prozess, dieses Phänomen zu beseitigen, wird Entprellen genannt. Dieses Tutorial zeigt, wie man es macht.

Arduino Nano ESP32 Prellverhalten

Dieses Tutorial bietet:

Erforderliche Hardware

1×Arduino Nano ESP32
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

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

Wir haben spezielle Tutorials zum Taster. Die Tutorials enthalten detaillierte Informationen und Schritt-für-Schritt-Anleitungen zur Hardware-Pinbelegung, zum Funktionsprinzip, zur Verdrahtung des ESP32 und zum Arduino Nano ESP32-Code. Weitere Informationen dazu finden Sie in den folgenden Links:

Verdrahtungsdiagramm

Arduino Nano ESP32 Taster-Schaltplan

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

Um es deutlich zu machen, lassen wir den Arduino Nano ESP32-Code ohne und mit Entprellung ausführen und vergleichen die Ergebnisse

Auslesen der Taste ohne Entprellung

Schnelle Schritte

Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:

  • Wenn Sie neu bei Arduino Nano ESP32 sind, lesen Sie das Tutorial dazu, wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
  • Verdrahten Sie die Bauteile entsprechend dem bereitgestellten Schaltplan.
  • Schließen Sie das Arduino Nano ESP32-Board über ein USB-Kabel an Ihren Computer an.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das Arduino Nano ESP32-Board und den entsprechenden COM-Port aus.
  • Kopieren Sie den untenstehenden Code und fügen Sie ihn in die Arduino IDE ein.
/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 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-esp32/arduino-nano-esp32-button-debounce */ #define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 pin connected to button int prev_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); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_state = button_state; }
  • Kompiliere und lade den Code auf das Arduino Nano ESP32-Board hoch, indem du in der Arduino IDE auf die Upload-Schaltfläche klickst
Code in der Arduino-IDE hochladen
  • Öffne den seriellen Monitor in der Arduino IDE
Wie öffnet man den seriellen Monitor in der Arduino-IDE?
  • Drücken Sie den Knopf einmal, halten Sie ihn dabei einige Sekunden lang gedrückt und lassen Sie ihn dann los.
  • Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht wie folgt aus:
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  

⇒ Wie Sie sehen können, haben Sie nur einmal gedrückt und losgelassen, aber der Arduino Nano ESP32 hat mehrere Betätigungen und Loslassvorgänge erkannt.

※ Notiz:

Das Klappern tritt nicht die ganze Zeit auf. Wenn es nicht auftritt, versuchen Sie bitte den obigen Test mehrmals.

Tasterauslesen mit Entprellung

Schnelle Schritte

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 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-esp32/arduino-nano-esp32-button-debounce */ #define BUTTON_PIN D2 // Arduino Nano ESP32 pin D2 pin connected to button #define DEBOUNCE_TIME 50 // The debounce time in millisecond, increase this time if it still chatters int prev_state_steady = LOW; // The previous steady state from the input pin int prev_state_flick = LOW; // The previous flickerable state from the input pin int button_state; // The current reading from the input pin unsigned long last_debounce_time = 0; // The last time the output pin was toggled void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the button pin as an pull-up input (HIGH when the switch is open and LOW when the switch is closed) 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 != prev_state_flick) { // reset the debouncing timer last_debounce_time = millis(); // save the the last flickerable state prev_state_flick = button_state; } if ((millis() - last_debounce_time) > DEBOUNCE_TIME) { // 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(prev_state_steady == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if(prev_state_steady == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last steady state prev_state_steady = button_state; } }
  • Kompiliere und lade den Code auf das Arduino Nano ESP32-Board hoch, indem du auf die Schaltfläche Upload in der Arduino IDE klickst
  • Öffne den seriellen Monitor in der Arduino IDE
  • Drücke die Taste mehrere Sekunden lang weiter und lasse sie dann los
  • Überprüfe das Ergebnis im seriellen Monitor. Es sieht wie folgt aus:
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

⇒ Wie Sie sehen können, haben Sie einmal gedrückt und losgelassen, und der Arduino Nano ESP32 hat einen Tastendruck erkannt. Das Prellen ist beseitigt.

Wir haben es einfach gemacht - Arduino Nano ESP32 Taster-Entprellcode mit Bibliothek

Um Anfängern den Einstieg zu erleichtern, insbesondere beim Entprellen mehrerer Taster, haben wir eine Button-Bibliothek namens ezButton erstellt. Sie können Hier erfahren Sie mehr über die ezButton-Bibliothek.

Arduino Nano ESP32 Entprellcode für eine einzelne Taste

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 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-esp32/arduino-nano-esp32-button-debounce */ #include <ezButton.h> #define DEBOUNCE_TIME 50 // Die Entprellzeit in Millisekunden; erhöhen Sie diese Zeit, falls es weiterhin prellt ezButton button(D2); // Erzeuge ein ezButton-Objekt für Pin D2 void setup() { Serial.begin(9600); button.setDebounceTime(DEBOUNCE_TIME); // Stelle die Entprellzeit auf 50 Millisekunden ein } void loop() { button.loop(); // Muss zuerst die loop()-Funktion aufgerufen werden if (button.isPressed()) Serial.println("The button is pressed"); if (button.isReleased()) Serial.println("The button is released"); }

Arduino Nano ESP32 Entprellungs-Code für mehrere Tasten

Schreiben wir Entprellcode für drei Tasten.

Der Schaltplan

Arduino Nano ESP32 Tasterbibliothek Verdrahtungsdiagramm

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

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 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-esp32/arduino-nano-esp32-button-debounce */ #include <ezButton.h> #define DEBOUNCE_TIME 50 // die Entprellzeit in Millisekunden; erhöhen Sie diese Zeit, falls der Taster noch flattert ezButton button1(D6); // Erzeuge ezButton-Objekt für Pin D6 ezButton button2(D7); // Erzeuge ezButton-Objekt für Pin D7 ezButton button3(D8); // Erzeuge ezButton-Objekt für Pin D8 void setup() { Serial.begin(9600); button1.setDebounceTime(DEBOUNCE_TIME); // Entprellzeit auf 50 Millisekunden setzen button2.setDebounceTime(DEBOUNCE_TIME); // Entprellzeit auf 50 Millisekunden setzen button3.setDebounceTime(DEBOUNCE_TIME); // Entprellzeit auf 50 Millisekunden setzen } void loop() { button1.loop(); // MUSS zuerst die loop()-Funktion aufgerufen werden button2.loop(); // MUSS zuerst die loop()-Funktion aufgerufen werden button3.loop(); // MUSS zuerst die loop()-Funktion 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"); }

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

  • DEBOUNCE_TIME-Wert hängt von der Hardware ab. Unterschiedliche Hardware kann unterschiedliche Werte verwenden.
  • Die Entprellung sollte auch für Ein/Aus-Schalter, Endschalter, Reed-Schalter, Berührungssensor gelten ...

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