Arduino - Taster - Entprellung

Wenn ein Knopf gedrückt/losgelassen wird oder wenn ein Schalter umgelegt wird, denken Anfänger normalerweise einfach, dass sein Zustand von LOW zu HIGH oder HIGH zu LOW geändert wird. In der Praxis ist es nicht ganz so. Aufgrund der mechanischen und physikalischen Eigenschaften könnte der Zustand des Knopfs (oder Schalters) mehrmals zwischen LOW und HIGH umgeschaltet werden. Dieses Phänomen wird als Prellen bezeichnet. Dieses Phänomen kann dazu führen, dass ein einzelner Druck als mehrere Drucke gelesen wird, was in einigen Anwendungen zu Fehlfunktionen führt. Dieses Tutorial zeigt, wie man dieses Phänomen beseitigt (das Eingangsentprellen).

Chattering-Phänomen bei Arduino.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (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×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
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 nichts über den Button (Pinbelegung, Funktionsweise, Programmierung ...) wissen, informieren Sie sich in den folgenden Tutorials darüber:

Verdrahtungsdiagramm

Arduino-Taster-Verdrahtungsdiagramm

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

Schauen wir uns den Arduino-Code ohne Entprellung und mit Entprellung an und vergleichen dessen Verhalten.

Auslesen eines Buttons ohne Entprellung

Bevor Sie etwas über die Entprellung lernen, sehen Sie sich einfach den Code ohne Entprellung und dessen Verhalten an.

Schnelle Schritte

  • Schließe den Arduino über ein USB-Kabel an den PC an
  • Öffne die Arduino IDE, wähle das richtige Board und den richtigen Port
  • Kopiere den untenstehenden Code und öffne ihn mit der Arduino IDE
/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-button-debounce */ // constants won't change. They're used here to set pin numbers: const int BUTTON_PIN = 7; // the number of the pushbutton pin // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be 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: currentState = digitalRead(BUTTON_PIN); if(lastState == HIGH && currentState == LOW) Serial.println("The button is pressed"); else if(lastState == LOW && currentState == HIGH) Serial.println("The button is released"); // save the the last state lastState = currentState; }
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um Code auf Arduino hochzuladen
Arduino IDE Code hochladen
  • Öffnen Sie den seriellen Monitor.
  • Halten Sie die Taste mehrere Sekunden lang gedrückt und lassen Sie sie dann los.
  • Sehen Sie das Ergebnis auf dem seriellen Monitor.
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 den Knopf nur einmal gedrückt und losgelassen. Allerdings erkennt Arduino ihn als mehrere Betätigungen und Loslassenvorgänge.

Lesetaste mit Entprellung

Schnelle Schritte

  • Kopieren Sie den untenstehenden Code und öffnen Sie ihn mit der Arduino IDE.
/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-button-debounce */ // constants won't change. They're used here to set pin numbers: const int BUTTON_PIN = 7; // the number of the pushbutton pin const int DEBOUNCE_DELAY = 50; // the debounce time; increase if the output flickers // Variables will change: int lastSteadyState = LOW; // the previous steady state from the input pin int lastFlickerableState = LOW; // the previous flickerable state from the input pin int currentState; // 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 serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be 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: currentState = 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 (currentState != lastFlickerableState) { // reset the debouncing timer lastDebounceTime = millis(); // save the the last flickerable state lastFlickerableState = currentState; } 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 && currentState == LOW) Serial.println("The button is pressed"); else if (lastSteadyState == LOW && currentState == HIGH) Serial.println("The button is released"); // save the the last steady state lastSteadyState = currentState; } }
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino-IDE, um den Code auf den Arduino hochzuladen.
  • Öffnen Sie den seriellen Monitor.
  • Halten Sie die Taste mehrere Sekunden gedrückt und lassen Sie sie dann los.
  • Sehen Sie das Ergebnis im seriellen Monitor.
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 den Knopf nur einmal gedrückt und losgelassen. Arduino erkennt dies als den einzigen Druck- und Loslassvorgang. Das Prellen wird eliminiert.

Wir haben es einfach gemacht - Arduino-Tasten-Entprellungs-Code mit einer Bibliothek

Um Anfängern das Leben deutlich zu erleichtern, insbesondere beim Verwenden mehrerer Tasten, haben wir eine Bibliothek namens ezButton erstellt. Sie können hier Mehr über die ezButton-Bibliothek erfahren.

Arduino-Entprellungscode für einen einzelnen Button

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-button-library * * This example reads the state of a button with debounce and print it to Serial Monitor. */ #include <ezButton.h> ezButton button(7); // create ezButton object that attach to pin 7; 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-Entprellcode für mehrere Tasten

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-button-debounce */ #include <ezButton.h> ezButton button1(6); // erstelle ein ezButton-Objekt, das an Pin 6 angeschlossen ist; ezButton button2(7); // erstelle ein ezButton-Objekt, das an Pin 7 angeschlossen ist; ezButton button3(8); // erstelle ein ezButton-Objekt, das an Pin 8 angeschlossen ist; 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(); // MUSS die loop()-Funktion zuerst aufrufen button2.loop(); // MUSS die loop()-Funktion zuerst aufrufen button3.loop(); // MUSS die loop()-Funktion zuerst aufrufen 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"); }

Der Schaltplan zum obigen Code:

Arduino-Taster-Bibliothek Verdrahtungsdiagramm

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

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_DELAY Der Wert hängt von den Anwendungen ab. Unterschiedliche Anwendungen können unterschiedliche Werte verwenden.

Erweiterbarkeit

Die Entprellmethode kann bei Schaltern und Berührungssensoren angewendet 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!