Arduino - Bouton

Le bouton est un composant de base et largement utilisé dans de nombreux projets Arduino. Il n'est pas aussi simple qu'il ne le semble (en raison de caractéristiques mécaniques et physiques). Les débutants peuvent rencontrer de nombreux problèmes avec. Ce tutoriel le rend facile pour les débutants. Commençons !

※ NOTE THAT:

Avant de présenter le bouton, nous aimerions signaler qu'il existe deux erreurs courantes que les débutants rencontrent souvent :

i. Le problème d'entrée flottante :

  • Symptôme : Lorsqu'un bouton est connecté à une broche d'entrée Arduino, l'état de cette broche est aléatoire et ne correspond pas à l'état de pression du bouton.
  • Cause : La broche du bouton n'utilise pas une résistance de tirage vers le bas ou vers le haut.
  • Solution : ⇒ Utiliser une résistance de tirage vers le bas ou vers le haut sur la broche d'entrée. Les détails seront décrits plus tard dans ce tutoriel.

ii. Le phénomène de rebondissement

  • Symptôme : Le code sur Arduino lit l'état du bouton et identifie l'événement de pression en détectant le changement d'état (de HIGH à LOW, ou de LOW à HIGH). Lorsque le bouton est réellement pressé une seule fois, le code Arduino détecte plusieurs pressions plutôt qu'une seule.
  • Cause : En raison des caractéristiques mécaniques et physiques, lorsque vous appuyez une seule fois sur un bouton, l'état de la broche d'entrée bascule rapidement plusieurs fois entre LOW et HIGH plutôt qu'une seule fois
  • Solution : ⇒ Debounce. Les détails seront décrits dans le tutoriel Arduino - Bouton - Debounce.

Le phénomène de rebondissement provoque un dysfonctionnement dans seulement certains types d'application qui nécessitent de détecter exactement le nombre de pressions. Dans certains types d'application, il est inoffensif.

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×PCB-mount Button
1×Panel-mount Button
1×Breadboard
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
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

Le bouton-poussoir, également appelé bouton tactile ou interrupteur momentané, est un type d'interrupteur qui se ferme lorsque le bouton est pressé et maintenu, et s'ouvre lorsqu'il est relâché. Il existe divers types de boutons-poussoirs, généralement catégorisés en deux groupes :

  • Boutons-poussoirs montables sur PCB (compatibles avec les plaques d'essai)
  • Boutons-poussoirs montables sur panneau
Bouton-poussoir Arduino

Brochage

Les boutons montés sur PCB ont généralement quatre broches.

Brochage du bouton

Cependant, ces broches sont connectées en interne par paires. Par conséquent, nous avons seulement besoin d'utiliser deux des quatre broches, qui ne sont PAS connectées en interne.

Il existe quatre manières (en réalité deux en raison de la symétrie) de se connecter au bouton (voir l'image).

Comment utiliser le bouton

Nous pouvons utiliser seulement deux broches d'un bouton, pourquoi en a-t-il quatre ?

Pour qu'il soit solidement fixé sur le PCB (carte) afin de résister à la force de pression.

Les boutons montés sur panneau ont généralement deux broches.

Brochage du bouton-poussoir à deux broches
image source: diyables.io

Comment ça fonctionne

  • Lorsque le bouton n'est PAS enfoncé, la broche A n'est PAS connectée à la broche B
  • Lorsque le bouton est enfoncé, la broche A est connectée à la broche B
Comment fonctionne un bouton

Arduino - Bouton

Un pin du bouton est connecté à VCC ou GND. L'autre pin est connecté à une broche Arduino.

En lisant l'état de la broche d'Arduino (configurée en tant que broche d'entrée), nous pouvons détecter si le bouton est pressé ou NON.

État du bouton et état de pression

La relation entre l'état du bouton et l'état de pression dépend de la manière dont nous connectons le bouton à l'Arduino et du réglage de la broche de l'Arduino.

Il y a deux manières d'utiliser un bouton avec Arduino :

  • I. La broche d'un bouton est connectée à VCC, l'autre est connectée à une broche d'Arduino avec une résistance de tirage vers le bas.
  • Si le bouton est pressé, l'état de la broche d'Arduino est HIGH. Sinon, l'état de la broche d'Arduino est LOW.
  • Nous devons utiliser une résistance externe.
  • I. La broche d'un bouton est connectée à GND, l'autre est connectée à une broche d'Arduino avec une résistance de rappel.
  • Si le bouton est pressé, l'état de la broche d'Arduino est LOW. Sinon, l'état de la broche d'Arduino est HIGH.
  • Nous pouvons utiliser une résistance interne ou externe. La résistance interne est intégrée dans l'Arduino, il suffit de la configurer via le code Arduino.

※ NOTE THAT:

Si nous n'utilisons ni résistance de tirage vers le bas ni résistance de tirage vers le haut, l'état de la broche d'entrée est « en l'air » lorsque le bouton n'est pas pressé. Cela signifie que l'état peut être HAUT ou BAS (instable, non fixé), entraînant une détection incorrecte.

  • La pire pratique : initialise la broche Arduino comme une entrée (en utilisant pinMode(BUTTON_PIN, INPUT)) et n'utilise aucune résistance de tirage externe.
  • La meilleure pratique : initialise la broche Arduino comme une entrée avec pull-up interne (en utilisant pinMode(BUTTON_PIN, INPUT_PULLUP)). Il n'est pas nécessaire d'utiliser une résistance de tirage vers le bas ou vers le haut externe.

Pour faciliter la tâche aux débutants, ce tutoriel utilise la méthode la plus simple : il initialise la broche Arduino comme entrée avec pull-up interne sans utiliser de résistance externe. Les débutants n'ont PAS besoin de se préoccuper de la manière de connecter la résistance de pull-up ou de pull-down. Les débutants doivent simplement utiliser le code Arduino.

Diagramme de câblage

  • Schéma de câblage entre Arduino et bouton monté sur PCB
Schéma de câblage du bouton Arduino

This image is created using Fritzing. Click to enlarge image

  • Schéma de câblage entre Arduino et bouton monté sur panneau
Schéma de câblage du bouton-poussoir à deux broches Arduino

This image is created using Fritzing. Click to enlarge image

Schéma de câblage d'un bouton à deux broches Arduino
image source: diyables.io

Comment programmer un bouton

  • Initialise la broche Arduino comme une entrée avec résistance de tirage interne en utilisant la fonction pinMode(). Par exemple, la broche 7 :
pinMode(7, INPUT_PULLUP);
  • Lit l'état de la broche Arduino en utilisant la fonction digitalRead().
int buttonState = digitalRead(BUTTON_PIN);

※ NOTE THAT:

Il existe deux cas d'utilisation fréquemment utilisés :

  • Le premier : Si l'état d'entrée est HAUT, faire quelque chose. Si l'état d'entrée est BAS, faire autre chose en inversé.
  • Le second : Si l'état d'entrée change de BAS à HAUT (ou de HAUT à BAS), faire quelque chose.

Selon l'application, nous choisissons l'un d'eux. Par exemple, dans le cas de l'utilisation d'un bouton pour contrôler une LED :

  • Si nous voulons que la LED soit ALLUMÉE lorsque le bouton est pressé et ÉTEINTE lorsque le bouton n'est PAS pressé, nous DEVONS utiliser le premier cas d'utilisation.
  • Si nous voulons que la LED bascule entre ALLUMÉ et ÉTEINT à chaque fois que nous appuyons sur le bouton, nous DEVONS utiliser le second cas d'utilisation.

Comment détecter le changement d'état de BAS à HAUT

// Les constantes ne changeront pas. Elles sont utilisées ici pour définir les numéros de broches : const int BUTTON_PIN = 7; // le numéro de la broche du bouton-poussoir // Les variables vont changer : int lastState = HIGH; // l'état précédent de la broche d'entrée int currentState; // la lecture actuelle de la broche d'entrée void setup() { // initialiser la communication série à 9600 bits par seconde : Serial.begin(9600); // initialiser la broche du bouton-poussoir comme une entrée avec résistance de tirage // la broche d'entrée avec résistance de tirage sera HIGH lorsque l'interrupteur est ouvert et LOW lorsque l'interrupteur est fermé. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lire l'état de l'interrupteur/bouton : currentState = digitalRead(BUTTON_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The state changed from LOW to HIGH"); // sauvegarder le dernier état lastState = currentState; }

Code Arduino

Étapes rapides

  • Connectez Arduino au PC via le câble USB
  • Ouvrez Arduino IDE, sélectionnez la bonne carte et le bon port
  • Copiez le code ci-dessous et ouvrez-le avec Arduino IDE
// constants won't change. They're used here to set pin numbers: const int BUTTON_PIN = 7; // the number of the pushbutton 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: int buttonState = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(buttonState); }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code vers Arduino.
Arduino IDE - Comment télécharger du code
  • Ouvrir le moniteur série
  • Appuyer et relâcher le bouton plusieurs fois
  • Voir le résultat sur le moniteur série :
COM6
Send
1 1 1 0 0 0 0 0 0 1 1 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

1 est ÉLEVÉ, 0 est BAS.

Explication du code

Vous pouvez trouver l'explication dans la ligne de commentaires du code Arduino ci-dessus.

Modification du code Arduino

Modifions le code pour détecter les événements d'appui et de relâchement.

Étapes rapides

  • Modifiez le code comme ci-dessous :
/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/arduino-button */ // 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; }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur Arduino.
Téléversement de code Arduino IDE
  • Ouvrez le moniteur série
  • Appuyez sur le bouton puis relâchez
  • Voir le résultat sur le moniteur série
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

Même si vous avez appuyé et relâché le bouton une seule fois, le moniteur série peut afficher plusieurs événements de pression et de relâchement. C'est le comportement normal du bouton. Ce comportement est appelé le « phénomène de rebond ». Vous pouvez en savoir plus dans le tutoriel Arduino - Anti-rebond du bouton.

※ NOTE THAT:

Pour faciliter la tâche aux débutants, notamment lors de l'utilisation de plusieurs boutons, nous avons créé une bibliothèque, appelée ezButton. Vous pouvez en savoir plus sur la bibliothèque ezButton ici.

Vidéo

Défiez-vous

  • Allumer la LED lorsque le bouton est pressé et éteindre la LED lorsque le bouton n'est PAS pressé.
  • Basculer la LED entre ON et OFF à chaque fois que le bouton est pressé.

Connaissances supplémentaires

Quand doit-on utiliser et ne pas utiliser une résistance de tirage vers le haut ou vers le bas pour une broche d'entrée ?

  • Si le capteur est soit fermé (connecté à VCC ou GND) soit ouvert (NON connecté à quoi que ce soit), vous avez besoin d'une résistance de tirage vers le haut ou vers le bas pour que ces états deviennent deux états : BAS et HAUT. Par exemple, bouton-poussoir, interrupteur, interrupteur à contact magnétique (capteur de porte)...
  • Si le capteur a deux niveaux de tension définis (BAS et HAUT), vous n'avez PAS besoin d'une résistance de tirage vers le haut ou vers le bas. Par exemple, capteur de mouvement, capteur tactile...

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!