Arduino Nano - Bouton

Ce didacticiel vous apprend à utiliser un Arduino Nano avec un bouton. En détail, nous allons apprendre :

Le bouton est désigné sous le nom de bouton-poussoir, bouton tactile ou interrupteur momentané. C'est un composant fondamental et est fréquemment utilisé dans les projets Arduino. Son utilisation est simple. Cependant, il peut prêter à confusion pour les débutants en raison des aspects mécaniques, physiques et des différentes manières dont il peut être utilisé. Ce tutoriel simplifie les choses pour les débutants.

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×Push Button
1×(Optional) Panel-mount Push Button
1×Breadboard
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino Nano
1×(Recommended) Screw Terminal Adapter for Arduino Nano

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

Les débutants rencontrent généralement deux difficultés courantes lors de l'utilisation d'un bouton :

1. Problème d'entrée flottante :

  • Symptôme : La valeur lue sur la broche d'entrée ne correspond pas à l'état du bouton pressé.
  • Cause : La broche d'entrée n'utilise pas de résistance de tirage vers le haut ou vers le bas.
  • Solution : Utilisez une résistance de tirage vers le haut ou vers le bas, et les étapes pour ce faire seront expliquées dans ce tutoriel.

2. Phénomène de battement:

  • Symptôme : Bien que le bouton soit pressé une seule fois, le code Arduino détecte plusieurs pressions.
  • Cause : Les problèmes mécaniques et physiques entraînent un basculement rapide de l'état du bouton (ou interrupteur) entre BAS et HAUT à plusieurs reprises.
  • Solution : Pour résoudre ce problème, des techniques de debounce seront abordées dans le tutoriel Arduino Nano - Bouton - Debounce

Seules les applications nécessitant une détection précise du nombre de pressions devraient prendre cela en considération.

※ NOTE THAT:

Ne confondez pas le bouton avec les éléments suivants :

Le schéma des broches 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, qui peuvent être largement catégorisés en deux groupes :

  • Bouton-poussoir monté sur PCB (adapté pour montage sur plaque d'essai)
  • Bouton-poussoir monté sur panneau
Appuyez sur le bouton

Un bouton monté sur PCB a généralement quatre broches.

Brochage du bouton

Néanmoins, ces broches sont reliées ensemble par paires. Par conséquent, seulement deux des quatre broches doivent être utilisées, lesquelles ne sont pas connectées en interne.

Il existe quatre manières possibles de se connecter au bouton, dont deux sont symétriques (comme le montre l'image).

Comment utiliser le bouton

Pourquoi seulement deux broches d'un bouton sont-elles utilisées, alors qu'il en a quatre ?

Pour garantir qu'il est solidement monté sur le PCB (carte de circuit imprimé) et peut résister à toute force de pression.

Un bouton monté sur panneau a généralement deux broches.

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

Comment ça fonctionne

  • Lorsque le bouton n'est pas pressé, la broche A et la broche B ne sont pas connectées.
  • Cependant, lorsque le bouton est pressé, la broche A et la broche B deviennent connectées.
Comment fonctionne un bouton

Arduino Nano - Bouton

Le pin d'un bouton est connecté soit à VCC, soit à GND. L'autre pin du même bouton est connecté à une broche sur une carte Arduino Nano. En examinant l'état d'une broche de l'Arduino Nano configurée en entrée, nous pouvons déterminer si un bouton a été pressé ou non.

État du bouton et état de pression

La connexion entre le bouton et l'Arduino Nano, ainsi que la configuration de la broche de l'Arduino, détermineront la relation entre l'état du bouton et l'état de pression.

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.
    • Lorsque le bouton est pressé, l'état de la broche de l'Arduino sera HAUT. Sinon, l'état de la broche de l'Arduino sera BAS.
    • Une résistance externe est nécessaire dans ce cas.
  • I. La broche d'un bouton est connectée à GND, l'autre est connectée à une broche d'Arduino avec une résistance de tirage vers le haut.
    • Lorsque le bouton est pressé, l'état de la broche de l'Arduino sera BAS. Sinon, l'état de la broche de l'Arduino sera HAUT.
    • Nous pouvons utiliser une résistance interne ou externe. La résistance interne est déjà intégrée dans l'Arduino Nano, et peut être configurée via le code Arduino Nano.

    ※ NOTE THAT:

    • Si nous n'utilisons PAS de résistance de tirage externe vers le bas ou vers le haut, l'état de la broche d'entrée est « flottant » 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 (pinMode(BUTTON_PIN, INPUT)) sans utiliser de résistances de tirage vers le bas ou vers le haut externes.
    • La meilleure pratique : initialise la broche Arduino comme une entrée à tirage vers le haut interne (en utilisant pinMode(BUTTON_PIN, INPUT_PULLUP)). Elle n'a pas besoin d'utiliser de résistance de tirage vers le bas ou vers le haut externe.

    Pour simplifier les choses pour les débutants, ce tutoriel utilise l'approche la plus directe : initialiser la broche de l'Arduino Nano comme une entrée à pull-up interne sans nécessiter de résistance externe. Il n'est pas nécessaire que les débutants s'inquiètent de la manière de connecter la résistance de pull-up/pull-down. Ils doivent simplement utiliser le code Arduino Nano.

Diagramme de câblage

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

This image is created using Fritzing. Click to enlarge image

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

This image is created using Fritzing. Click to enlarge image

Comment programmer un bouton

  • Utilisez la fonction pinMode() pour configurer la broche de l'Arduino Nano en tant qu'entrée avec pull-up interne.
  • Par exemple, la broche 2 :
pinMode(2, INPUT_PULLUP);
  • Utilise la fonction digitalRead() pour déterminer l'état de la broche de l'Arduino Nano.
int button_state = digitalRead(BUTTON_PIN);

※ NOTE THAT:

Deux cas d'utilisation courants existent :

  • Le premier : Si l'état d'entrée est HAUT, effectuer une action. Si l'état d'entrée est BAS, prendre l'action opposée.
  • Le deuxième : Si l'état d'entrée passe de BAS à HAUT (ou de HAUT à BAS), faire quelque chose.

Nous sélectionnons l'un de ces cas en fonction de l'application. Par exemple, lorsqu'on utilise 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 soit basculée entre ALLUMÉ et ÉTEINT à chaque fois que nous appuyons sur le bouton, nous DEVONS utiliser le deuxième cas d'utilisation.

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

const int BUTTON_PIN = 2; // le numéro de la broche du bouton-poussoir int prev_button_state = HIGH; // l'état précédent de la broche d'entrée int button_state; // la lecture actuelle de la broche d'entrée void setup() { // Initialise le Serial pour communiquer avec le moniteur série. Serial.begin(9600); // initialise 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 HAUTE quand l'interrupteur est ouvert et BASSE quand il est fermé. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lit l'état de l'interrupteur/du bouton : button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // sauvegarde le dernier état prev_button_state = button_state; }

Code Arduino Nano

Étapes rapides

  • Connectez votre Arduino Nano à un ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino, sélectionnez la carte et le port corrects.
  • Copiez le code ci-dessous et ouvrez-le dans l'IDE Arduino.
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano 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-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et téléverser le code vers l'Arduino Nano.
Comment télécharger du code sur Arduino Nano
  • Ouvrez le moniteur série.
  • Appuyez et relâchez plusieurs fois le bouton.
  • Consultez les résultats affichés 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

Découvrez l'explication ligne par ligne contenue dans les commentaires du code source !

Modifier le code Arduino Nano

Modifions le code afin qu'il puisse reconnaître les événements d'appui et de relâchement.

Étapes rapides

  • Modifiez le code comme suit :
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano 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-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. 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 the last state prev_button_state = button_state; }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et téléverser le code vers la carte Arduino Nano.
Téléversement de code Arduino IDE
  • Ouvrez le moniteur série.
  • Appuyez sur le bouton et maintenez-le enfoncé.
  • Relâchez le bouton et observez le résultat dans 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 appuyez et relâchez le bouton une seule fois, l'affichage dans le moniteur série peut indiquer plusieurs événements de pression et de relâchement. C'est le comportement typique du bouton et est connu sous le nom de "phénomène de rebond". Pour résoudre ce problème, veuillez consulter le tutoriel Arduino Nano - Antirebond de bouton.

※ NOTE THAT:

Nous avons développé une bibliothèque, ezButton, pour simplifier le processus pour ceux qui débutent, en particulier lorsqu'ils traitent plusieurs boutons. Vous pouvez en savoir plus sur la bibliothèque ezButton ici.

Vidéo

Défiez-vous

  • Lorsque le bouton est pressé, la LED sera allumée.
  • Lorsque le bouton n'est pas pressé, la LED sera éteinte.
  • Chaque fois que le bouton est pressé, la LED basculera entre ON et OFF.

Connaissances supplémentaires

Quelles sont les occasions où il est approprié d'utiliser une résistance de tirage vers le haut ou vers le bas pour une broche d'entrée ? Quels sont les moments où il n'est pas adapté d'utiliser une résistance de tirage vers le haut ou vers le bas pour une broche d'entrée ?

  • Si le capteur possède des états fermé ou ouvert, une résistance de rappel ou de tirage est nécessaire pour qu'ils deviennent BAS et HAUT. Des exemples de tels capteurs incluent le bouton-poussoir, l'interrupteur et l'interrupteur à contact magnétique (capteur de porte).
  • D'autre part, si le capteur a deux niveaux de tension définis (BAS et HAUT), aucune résistance de rappel ou de tirage n'est requise. Des exemples de tels capteurs sont le capteur de mouvement et le capteur tactile.

Références de fonction

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