Arduino UNO R4 - Taster - Entprellung

Beim Programmieren des Arduino Uno R4, um ein Tastendruck-Ereignis zu erkennen, kann es vorkommen, dass ein einzelner Tastendruck mehrfach erkannt wird. Das geschieht, weil der Taster aufgrund mechanischer Faktoren schnell mehrere Male zwischen LOW und HIGH wechseln kann. Dies wird als 'Prellen' bezeichnet. Prellen kann dazu führen, dass ein Tastendruck als mehrere Tastendrücke erkannt wird, was in einigen Anwendungen zu Fehlern führen kann. Dieses Tutorial erklärt, wie man dieses Problem behebt, ein Verfahren, das als Entprellung des Tasters bekannt ist.

Arduino UNO R4 Prellen-Phänomen

Über Button

Lerne in den folgenden Tutorials mehr über Tasten (Pinbelegung, Funktionsweise, Programmierung), falls du damit nicht vertraut bist:

Verdrahtungsdiagramm

Arduino UNO R4 Taster-Schaltplan

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

Lassen Sie uns den Arduino UNO R4-Code ohne und mit Entprellung untersuchen und das Verhalten beider Versionen beobachten.

Arduino Uno R4 - Taster ohne Entprellung

Bevor wir uns mit der Entprellung beschäftigen, schauen wir uns den Code ohne sie an und sehen, wie er sich verhält.

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 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-uno-r4/arduino-uno-r4-button-debounce */ #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button int button_state; // the current state of button int prev_button_state = LOW; // the previous state of button void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input 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 last state prev_button_state = button_state; }

Schnelle Schritte

Befolgen Sie diese Anweisungen Schritt für Schritt:

  • Wenn dies Ihr erster Einsatz der Arduino Uno R4 WiFi/Minima ist, schauen Sie sich Einrichtung der Umgebung für Arduino Uno R4 WiFi/Minima in der Arduino IDE an.
  • Verdrahten Sie die Komponenten gemäß dem bereitgestellten Diagramm.
  • Schließen Sie das Arduino Uno R4-Board mit einem USB-Kabel an Ihren Computer an.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das passende Arduino Uno R4-Board (z. B. Arduino Uno R4 WiFi) und den COM-Port aus.
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Upload in der Arduino IDE, um den Code an den Arduino UNO R4 zu senden.
Code in der Arduino IDE hochladen
  • Öffnen Sie den seriellen Monitor.
  • Halten Sie den Knopf ein paar Sekunden lang gedrückt und lassen Sie ihn dann los.
  • Überprüfen Sie den seriellen Monitor auf das Ergebnis.
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 der Arduino ihn als mehrere Drück- und Loslassvorgänge.

※ Notiz:

Der Wert von DEBOUNCE_TIME variiert je nach Anwendung. Jede Anwendung könnte einen eigenen Wert verwenden.

Arduino Uno R4 - Taster mit Entprellung

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 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-uno-r4/arduino-uno-r4-button-debounce */ #define BUTTON_PIN 7 // The Arduino UNO R4 pin connected to the button #define DEBOUNCE_TIME 50 // The debounce time; increase if the output flickers int last_steady_state = LOW; // the previous steady state from the input pin int last_flickerable_state = LOW; // the previous flickerable state from the input pin int current_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 serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as a pull-up input pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: current_state = digitalRead(BUTTON_PIN); // If the switch/button changed, due to noise or pressing: if (current_state != last_flickerable_state) { // reset the debouncing timer last_debounce_time = millis(); // save the the last flickerable state last_flickerable_state = current_state; } if ((millis() - last_debounce_time) > DEBOUNCE_TIME) { // if the button state has changed: if (last_steady_state == HIGH && current_state == LOW) Serial.println("The button is pressed"); else if (last_steady_state == LOW && current_state == HIGH) Serial.println("The button is released"); // save the the last steady state last_steady_state = current_state; } }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE.
  • Drücken Sie die Hochladen-Schaltfläche in der Arduino-IDE, um den Code an den Arduino UNO R4 zu senden.
  • Öffnen Sie den seriellen Monitor.
  • Halten Sie den Knopf einige Sekunden gedrückt, bevor Sie loslassen.
  • Schauen Sie sich den seriellen Monitor an.
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 einmal gedrückt und losgelassen. Arduino erkennt es korrekt als einen einzelnen Druck- und Loslassvorgang und verhindert so jegliches Prellen.

Wir haben es einfach gemacht: Arduino UNO R4 Taster-Entprellungscode mit einer Bibliothek

Wir haben einen einfacheren Weg für Anfänger geschaffen, die viele Tasten verwenden, indem wir eine Bibliothek namens ezButton entwickelt haben. Sie können hier mehr über die ezButton-Bibliothek erfahren.

Schauen wir uns einige Beispielcodes an.

Arduino UNO R4 Entprellcode für einen einzelnen Taster

/* * 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 UNO R4 Tastenentprellungscode für mehrere Tasten

Lassen Sie uns die Entprellung für drei Taster durchführen. Hier ist der Schaltplan zwischen dem Arduino UNO R4 und drei Tastern:

Arduino UNO R4 Button-Bibliothek Verdrahtungsdiagramm

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

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

/* * Dieser Arduino UNO R4 Code wurde von newbiely.de entwickelt * Dieser Arduino UNO R4 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-uno-r4/arduino-uno-r4-button-debounce */ #include <ezButton.h> ezButton button_1(6); // ezButton-Objekt initialisieren, das mit Pin 6 verbunden ist ezButton button_2(7); // ezButton-Objekt initialisieren, das mit Pin 7 verbunden ist ezButton button_3(8); // ezButton-Objekt initialisieren, das mit Pin 8 verbunden ist void setup() { Serial.begin(9600); button_1.setDebounceTime(50); // Entprellzeit für button_1 auf 50 ms konfigurieren button_2.setDebounceTime(50); // Entprellzeit für button_2 auf 50 ms konfigurieren button_3.setDebounceTime(50); // Entprellzeit für button_3 auf 50 ms konfigurieren } void loop() { button_1.loop(); // Aktualisiere den Zustand von button_1 button_2.loop(); // Aktualisiere den Zustand von button_2 button_3.loop(); // Aktualisiere den Zustand von button_3 if(button_1.isPressed()) Serial.println("The button 1 is pressed"); if(button_1.isReleased()) Serial.println("The button 1 is released"); if(button_2.isPressed()) Serial.println("The button 2 is pressed"); if(button_2.isReleased()) Serial.println("The button 2 is released"); if(button_3.isPressed()) Serial.println("The button 3 is pressed"); if(button_3.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.

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