Arduino Mega - Bouton - Anti-rebond

Lorsque vous programmez l'Arduino Mega pour lire l'appui sur un bouton, vous pourriez voir qu'un appui est compté plusieurs fois. Cela se produit parce que le bouton peut rebondir et basculer rapidement entre LOW et HIGH. C'est ce qu'on appelle le phénomène de rebond. Le rebond peut faire qu'un appui ressemble à plusieurs appuis et causer des erreurs dans certains programmes. Ce tutoriel explique comment le corriger, un processus appelé anti-rebond du bouton.

Arduino Mega phénomène de rebond

Matériel Requis

1×Arduino Mega
1×Câble USB 2.0 type A/B
1×Bouton à montage sur breadboard avec capuchon
1×Kit de boutons à montage sur breadboard
1×Bouton-poussoir à montage sur panneau
1×Module bouton poussoir
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Screw Terminal Block Shield for Arduino Uno/Mega
1×Recommandé: Breadboard Shield for Arduino Mega
1×Recommandé: Enclosure for Arduino Mega

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du Bouton

Apprenez tout sur les boutons (disposition des broches, fonctionnement et programmation) dans ces tutoriels simples si vous n'êtes pas familier avec eux :

Diagramme de Câblage

Diagramme de câblage Arduino Mega Bouton

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Comparons le code Arduino Mega qui utilise l'anti-rebond avec du code qui n'utilise pas l'anti-rebond, et voyons comment il se comporte.

Arduino Mega - Bouton sans Anti-rebond

Avant d'apprendre l'anti-rebond, examinons le code sans celui-ci et voyons comment il fonctionne.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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; }

Étapes Rapides

Effectuez ces étapes une par une :

  • Connectez les composants selon le diagramme.
  • Branchez l'Arduino Mega à votre ordinateur avec un câble USB.
  • Ouvrez l'IDE Arduino sur votre ordinateur.
  • Choisissez la bonne carte (Arduino Mega) et le port COM.
  • Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Téléverser dans l'IDE Arduino pour téléverser le code vers l'Arduino Mega.
IDE Arduino Téléverser le Code
  • Ouvrez le Moniteur Série.
  • Maintenez le bouton enfoncé pendant quelques secondes, puis relâchez-le.
  • Regardez le Moniteur Série pour voir le résultat.
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  

Comme vous pouvez le voir, vous avez appuyé et relâché le bouton une seule fois. Mais l'Arduino pense qu'il y a eu plusieurs appuis et relâchements.

※ Note:

La valeur DEBOUNCE_TIME change selon les applications. Chaque application peut utiliser une valeur différente.

Arduino Mega - Bouton avec Anti-rebond

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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; } }

Étapes Rapides

  • Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Téléverser dans l'IDE Arduino pour envoyer le code vers l'Arduino Mega.
  • Ouvrez le Moniteur Série.
  • Appuyez et maintenez le bouton de reset pendant quelques secondes, puis relâchez-le.
  • Observez le Moniteur Série.
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Comme vous pouvez le voir, vous avez appuyé et relâché le bouton une fois. L'Arduino le lit comme un appui et un relâchement, sans rebond.

Nous l'avons Simplifié : Code Anti-rebond pour Bouton Arduino Mega Utilisant une Bibliothèque

Nous avons créé un moyen plus facile pour les débutants qui travaillent avec plusieurs boutons en créant une bibliothèque appelée ezButton. Vous pouvez en apprendre plus sur la bibliothèque ezButton ici : https://arduinogetstarted.com/tutorials/arduino-button-library

Examinons quelques exemples de code.

Code Anti-rebond Arduino Mega pour un Bouton Unique

/* * 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"); }

Code Anti-rebond Arduino Mega pour Plusieurs Boutons

Appliquons l'anti-rebond à trois boutons. Voici le diagramme de câblage pour connecter un Arduino Mega à trois boutons :

Diagramme de câblage Arduino Mega Bibliothèque Boutons

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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"); }

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !