Item:Bouton poussoir : Différence entre versions

 
(Une révision intermédiaire par le même utilisateur non affichée)
Ligne 15 : Ligne 15 :
 
*Il existe aussi le bouton poussoir dit '''"normalement fermé"''', au repos il laisse passer le courant, en appuie, il coupe le circuit, le courant ne passe pas.
 
*Il existe aussi le bouton poussoir dit '''"normalement fermé"''', au repos il laisse passer le courant, en appuie, il coupe le circuit, le courant ne passe pas.
  
<br />Ici nous utilisons le bouton normalement ouvert.
+
<br />Ici, nous utilisons le bouton "normalement ouvert".
 +
 
 +
<br />
 +
 
 +
== Subtilité d'utilisation : ==
 +
Pour que le micro-contrôleur reçoive un signal clair du bouton, nous pouvons utiliser des résistances de pull-up ou pull-down.
 +
 
 +
 
 +
Enfin, un bouton, c'est système mécanique. Et contrairement à la théorie, la réalité est complexe. Lorsqu'on appuie et qu'on relâche un bouton, le signal n'est pas simple, ouvert ou fermé, mais il y a un "rebond", un peu comme si on tremblait quand on appuie sur le bouton. Le micro-contrôleur peut alors interpréter le signal comme plusieurs appuis sur le bouton, ce qui est embêtant dans certains cas.
 +
 
 +
 
 +
Il existe deux solutions à ce problème :
 +
 
 +
* mettre un délai de quelques centaines de millisecondes. Cette solution présente le défaut d'utiliser la fonction "delay(200)" qui met en pause le programme.
 +
* mettre une temporisation avec la fonction "millis". Cette solution était bien meilleure, car elle ne bloque pas le programme.
 +
 
 +
Gérer la temporisation : voir ce tuto très bien fait : http://wiki.t-o-f.info/Arduino/%c3%89liminationDuRebondissement
 +
 
 +
 
 +
<syntaxhighlight lang="arduino" line="1">
 +
/*
 +
* Code repris de http://wiki.t-o-f.info/Arduino/%c3%89liminationDuRebondissement
 +
*/
 +
 
 +
int BUTTON_PIN = 0; //GPIO 0 correspond à la broche D3
 +
int previousButtonState;
 +
int count =0;
 +
 
 +
unsigned long debounceTimeStamp;
 +
 
 +
void setup() {
 +
Serial.begin(57600);
 +
pinMode(  BUTTON_PIN , INPUT_PULLUP );
 +
previousButtonState = digitalRead( BUTTON_PIN );
 +
}
 +
 
 +
void loop() {
 +
if ( millis() - debounceTimeStamp >= 5  ) {
 +
  int currentButtonState = digitalRead( BUTTON_PIN );
 +
  if ( currentButtonState != previousButtonState ) {
 +
    debounceTimeStamp = millis();
 +
    if ( currentButtonState == LOW ) {
 +
      count = count + 1;
 +
      Serial.println(count);
 +
      }
 +
    }
 +
    previousButtonState = currentButtonState;
 +
  }
 +
}
 +
 
 +
</syntaxhighlight><br />
  
 
==Câblage : ==
 
==Câblage : ==
Ligne 78 : Ligne 128 :
 
const int brocheLed =  D4;  // Broche D4, où la led interne au wemos est connectée
 
const int brocheLed =  D4;  // Broche D4, où la led interne au wemos est connectée
  
 +
// Boucle d'initialisation
 
void setup() {
 
void setup() {
 
   pinMode(brocheLed, OUTPUT);  // Initialisation de la broche de la led en sortie
 
   pinMode(brocheLed, OUTPUT);  // Initialisation de la broche de la led en sortie
Ligne 84 : Ligne 135 :
 
}
 
}
  
 +
//Boucle principale
 
void loop() {
 
void loop() {
  // Lecture de l'état du bouton et stockage dans la variable etatBouton
+
// Lecture de l'état du bouton et stockage dans la variable etatBouton
 
 
 
// Déclaration de variable d'état locale (dite locale car déclarée dans la boucle "loop").
 
// Déclaration de variable d'état locale (dite locale car déclarée dans la boucle "loop").
 
   bool etatBouton = digitalRead(brocheBouton); //// Variable permettant de récupérer l'état du bouton
 
   bool etatBouton = digitalRead(brocheBouton); //// Variable permettant de récupérer l'état du bouton

Version actuelle datée du 25 janvier 2024 à 12:38


Item-Bouton poussoir boutonpoussoir.jpg

Bouton poussoir

Un bouton (ou bouton poussoir) est un coupe-circuit mécanique (un interrupteur).

0,01EUR (€)


Description longue

C'est un interrupteur simple qui permet de contrôler les capacités d'une machine ou d'un objet. C'est le principal moyen d'interaction entre l'homme et la machine.

Le bouton poussoir à la particularité de revenir dans son état initiale lorsque qu'on cesse d'appuyer dessus.


Il en existe de deux types :

  • Le plus courant c'est le bouton poussoir "normalement ouvert", le courant ne passe pas quand il est repos, c'est quand on appuie dessus que le courant passe.
  • Il existe aussi le bouton poussoir dit "normalement fermé", au repos il laisse passer le courant, en appuie, il coupe le circuit, le courant ne passe pas.


Ici, nous utilisons le bouton "normalement ouvert".


Subtilité d'utilisation :

Pour que le micro-contrôleur reçoive un signal clair du bouton, nous pouvons utiliser des résistances de pull-up ou pull-down.


Enfin, un bouton, c'est système mécanique. Et contrairement à la théorie, la réalité est complexe. Lorsqu'on appuie et qu'on relâche un bouton, le signal n'est pas simple, ouvert ou fermé, mais il y a un "rebond", un peu comme si on tremblait quand on appuie sur le bouton. Le micro-contrôleur peut alors interpréter le signal comme plusieurs appuis sur le bouton, ce qui est embêtant dans certains cas.


Il existe deux solutions à ce problème :

  • mettre un délai de quelques centaines de millisecondes. Cette solution présente le défaut d'utiliser la fonction "delay(200)" qui met en pause le programme.
  • mettre une temporisation avec la fonction "millis". Cette solution était bien meilleure, car elle ne bloque pas le programme.

Gérer la temporisation : voir ce tuto très bien fait : http://wiki.t-o-f.info/Arduino/%c3%89liminationDuRebondissement


 1 /*
 2 * Code repris de http://wiki.t-o-f.info/Arduino/%c3%89liminationDuRebondissement
 3 */
 4 
 5 int BUTTON_PIN = 0; //GPIO 0 correspond à la broche D3
 6 int previousButtonState;
 7 int count =0;
 8 
 9 unsigned long debounceTimeStamp;
10 
11 void setup() {
12  Serial.begin(57600);
13  pinMode(  BUTTON_PIN , INPUT_PULLUP );
14  previousButtonState = digitalRead( BUTTON_PIN );
15 }
16 
17 void loop() {
18  if ( millis() - debounceTimeStamp >= 5  ) {
19    int currentButtonState = digitalRead( BUTTON_PIN );
20    if ( currentButtonState != previousButtonState ) {
21      debounceTimeStamp = millis();
22      if ( currentButtonState == LOW ) {
23        count = count + 1;
24        Serial.println(count);
25        }
26      }
27      previousButtonState = currentButtonState;
28    }
29 }

Câblage :

Item-Bouton poussoir Boutonpoussoir2 bb.jpg

Code Minimal :


{

Commentaires

Published