Un tableau élastique?

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