En version de base arduino :
const byte pin_bouton = 7; //Cablage PIN---BP---GND
byte etat_bouton; //variable globale pour memoriser l'etat du bouton
void setup()
{
Serial.begin(9600);
pinMode(pin_bouton, INPUT_PULLUP);
etat_bouton = HIGH;
}
void loop()
{
byte etat = digitalRead(pin_bouton);
if (etat != etat_bouton) //l'etat a change
{
if (etat == LOW)
{
Serial.println("bouton enfonce");
}
etat_bouton = etat;
}
}
Lorsque l'on teste cette version de base, et selon la qualité du BP utilisé, on s'aperçoit qu'il y a des rebonds à l'enfoncement ou au relachement.
Cela provient des imperfections mécaniques des BP, qui génèrent des signaux parasites lors des ouvertures/fermetures des contacts.
Ces rebonds peuvent être éliminés de manière hardware par ajout d'une capa, ou de manière software en ajoutant une notion de temps dans le programme.
Exemple :
const byte pin_bouton = 7; //Cablage PIN---BP---GND
byte etat_bouton; //variable globale pour memoriser l'etat du bouton
unsigned long millis_bouton; //variable globale pour memoriser la valeur de millis()
void setup()
{
Serial.begin(9600);
pinMode(pin_bouton, INPUT_PULLUP);
etat_bouton = HIGH;
millis_bouton = 0;
}
void loop()
{
byte etat = digitalRead(pin_bouton);
if (etat != etat_bouton) //l'etat a change
{
if (millis() - millis_bouton > 20)//n'en tenir compte qu'au bout de 20 ms
{
if (etat == LOW)
{
Serial.println("bouton enfonce");
}
etat_bouton = etat;
millis_bouton = millis();
}
}
}
Et voici exactement la même chose avec simpleBouton :
#include "simpleBouton.h"
simpleBouton boutonTest(7); //Cablage PIN---BP---GND
void setup() {
Serial.begin(9600);
}
void loop() {
if (boutonTest) Serial.println("bouton enfonce");
}