Arduino Mega - Taste - Debouncing

Wenn Sie den Arduino Mega programmieren, um einen Tastendruck zu lesen, kann es vorkommen, dass ein Druck mehrfach gezählt wird. Dies geschieht, weil die Taste prellen kann und schnell zwischen LOW und HIGH wechselt. Dies wird als Chattering bezeichnet. Chattering kann dazu führen, dass ein Druck wie mehrere Drücke aussieht und Fehler in einigen Programmen verursacht. Diese Anleitung erklärt, wie man dies behebt - ein Prozess, der als Entprellen der Taste bezeichnet wird.

Arduino Mega chattering phenomenon

Erforderliche Hardware

1×Arduino Mega
1×USB 2.0 Kabel Typ A/B
1×Breadboard-Taste mit Kappe
1×Breadboard-Tasten Kit
1×Panel-Drucktaste
1×Taster-Modul
1×Breadboard (Steckplatine)
1×Jumper-Kabel
1×(Empfohlen) Screw Terminal Block Shield for Arduino Uno/Mega
1×(Empfohlen) Breadboard Shield for Arduino Mega
1×(Empfohlen) Enclosure for Arduino Mega

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 Tasten

Lernen Sie etwas über Tasten (Pin-Layout, Funktionsweise und Programmierung) in diesen einfachen Tutorials, falls Sie damit nicht vertraut sind:

Schaltplan

Arduino Mega Button Wiring Diagram

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

Lassen Sie uns Arduino Mega Code, der Entprellung verwendet, mit Code vergleichen, der keine Entprellung verwendet, und sehen, wie er sich verhält.

Arduino Mega - Taste ohne Entprellung

Bevor wir etwas über Entprellung lernen, schauen wir uns den Code ohne diese Funktion an und sehen, wie er funktioniert.

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega 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-mega/arduino-mega-button-debounce */ #define BUTTON_PIN 7 // The Arduino Mega 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

Führen Sie diese Schritte nacheinander aus:

  • Verbinden Sie die Bauteile entsprechend dem Schaltplan.
  • Schließen Sie den Arduino Mega mit einem USB-Kabel an Ihren Computer an.
  • Öffnen Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das richtige Board (Arduino Mega) und den COM-Port.
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Upload Schaltfläche in der Arduino IDE, um den Code auf den Arduino Mega hochzuladen.
Arduino IDE Upload Code
  • Öffnen Sie den Serial Monitor.
  • Halten Sie die Taste für einige Sekunden gedrückt und lassen Sie sie dann los.
  • Schauen Sie sich den Serial Monitor an, um das Ergebnis zu sehen.
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 die Taste nur einmal gedrückt und losgelassen. Aber der Arduino denkt, es waren mehrere Drücke und Freigaben.

※ Notiz:

Der DEBOUNCE_TIME Wert ändert sich für verschiedene Anwendungen. Jede Anwendung kann einen anderen Wert verwenden.

Arduino Mega - Taste mit Entprellung

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega 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-mega/arduino-mega-button-debounce */ #define BUTTON_PIN 7 // The Arduino Mega 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 in der Arduino IDE.
  • Klicken Sie auf die Upload Schaltfläche in der Arduino IDE, um den Code an den Arduino Mega zu senden.
  • Öffnen Sie den Serial Monitor.
  • Drücken Sie die Reset-Taste und halten Sie sie für einige Sekunden gedrückt, dann lassen Sie sie los.
  • Schauen Sie sich den Serial 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 die Taste einmal gedrückt und losgelassen. Der Arduino liest dies als einen Druck und eine Freigabe, ohne Prellen.

Wir haben es einfach gemacht: Arduino Mega Tasten Entprellung Code mit einer Bibliothek

Wir haben einen einfacheren Weg für Anfänger geschaffen, die mit vielen Tasten arbeiten, indem wir eine Bibliothek namens ezButton erstellt haben. Sie können mehr über die ezButton-Bibliothek hier erfahren: https://arduinogetstarted.com/tutorials/arduino-button-library

Schauen wir uns einige Beispielcodes an.

Arduino Mega Tasten Entprellung Code für eine einzelne Taste

/* * 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 Mega Tasten Entprellung Code für mehrere Tasten

Lassen Sie uns drei Tasten entprellen. Hier ist der Schaltplan für die Verbindung eines Arduino Mega mit drei Tasten:

Arduino Mega Button Library Wiring Diagram

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

/* * Dieser Arduino Mega Code wurde von newbiely.de entwickelt * Dieser Arduino Mega 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-mega/arduino-mega-button-debounce */ #include <ezButton.h> // include ezButton library for button handling ezButton button_1(6); // ezButton linked to digital pin 6 ezButton button_2(7); // ezButton linked to digital pin 7 ezButton button_3(8); // ezButton linked to digital pin 8 void setup() { Serial.begin(9600); // start serial communication at 9600 baud button_1.setDebounceTime(50); // set debounce to 50 ms for button_1 button_2.setDebounceTime(50); // set debounce to 50 ms for button_2 button_3.setDebounceTime(50); // set debounce to 50 ms for button_3 } void loop() { button_1.loop(); // refresh button_1 state button_2.loop(); // refresh button_2 state button_3.loop(); // refresh button_3 state if(button_1.isPressed()) // check if button_1 is currently pressed Serial.println("The button 1 is pressed"); if(button_1.isReleased()) // check if button_1 has been released Serial.println("The button 1 is released"); if(button_2.isPressed()) // check if button_2 is currently pressed Serial.println("The button 2 is pressed"); if(button_2.isReleased()) // check if button_2 has been released Serial.println("The button 2 is released"); if(button_3.isPressed()) // check if button_3 is currently pressed Serial.println("The button 3 is pressed"); if(button_3.isReleased()) // check if button_3 has been released 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!