quiet bee.Le labo ESP32 ↗LE LABO AU LYCÉE

SÉQUENCE 02 / Première · Entrée numérique

Acquérir un état logique.

Lire un bouton et filtrer ses rebonds.

Le défi

Allumer la LED pendant l’appui et compter une seule fois chaque appui. Un contact mécanique rebondit : une seule action peut produire plusieurs transitions électriques.

Matériel : montage LED précédent et bouton normalement ouvert. Avec quatre pattes, identifier au multimètre les paires déjà reliées ; le dessin représente deux contacts distincts.

Schéma de branchement : Acquérir un état logique
Cliquer pour agrandir · SVG · PNG. Connecteurs déployés pour la lisibilité : suivez les noms des broches de votre carte.

Câblage et logique

LiaisonFonction
D2 → bouton → GNDEntrée avec rappel interne INPUT_PULLUP
D8 → 1 kΩ → anode LED ; cathode → GNDTémoin d’appui
BoutonLectureLED
RelâchéHIGHÉteinte
Appuyé depuis au moins 30 msLOWAllumée

Le rappel interne maintient l’entrée au niveau haut quand le contact est ouvert. Appuyer relie l’entrée à la masse : la logique est active à l’état bas. Aucune résistance externe de rappel n’est nécessaire pour ce TP.

Le programme complet

02_bouton.ino

Projet complet ↓
// D2 -> bouton -> GND. LED : D8 -> 1 kohm -> anode ; cathode -> GND.
constexpr uint8_t BOUTON = 2;
constexpr uint8_t LED = 8;
constexpr unsigned long ANTIREBOND_MS = 30;
int lecturePrecedente = HIGH;
int etatStable = HIGH;
unsigned long dernierRebond = 0;
unsigned long appuis = 0;

void setup() {
  pinMode(BOUTON, INPUT_PULLUP); // Resistance interne : relache = HIGH.
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  Serial.begin(115200); // Aucun while(!Serial) : fonctionne sans ordinateur.
}

void loop() {
  const unsigned long maintenant = millis();
  const int lecture = digitalRead(BOUTON);
  if (lecture != lecturePrecedente) {
    dernierRebond = maintenant;
    lecturePrecedente = lecture;
  }
  if (maintenant - dernierRebond >= ANTIREBOND_MS && lecture != etatStable) {
    etatStable = lecture;
    if (etatStable == LOW) { // Front d'appui : un seul comptage.
      ++appuis;
      Serial.print("Appuis : ");
      Serial.println(appuis);
    }
  }
  digitalWrite(LED, etatStable == LOW ? HIGH : LOW);
}

Le filtre antirebond

lecturePrecedente mémorise la lecture brute. Chaque changement relance le chronomètre. Une lecture inchangée pendant 30 ms devient etatStable. Le compteur augmente seulement au passage stable à LOW ; maintenir le bouton ne produit pas de nouvel appui.

30 ms est un réglage pédagogique à vérifier. Trop court, il laisse passer des rebonds ; trop long, il rend le système moins réactif.

À VOUS DE JOUER / PREMIÈRE

Faire dix appuis espacés. Comparer nombre réel et affiché. Que se passe-t-il pendant un maintien ?

PLUS LOIN / TERMINALE

Proposer un protocole pour choisir le temps antirebond et évaluer la latence.

Pistes de correction

Un maintien compte une fois. Essayer plusieurs valeurs, répéter les essais, relever les erreurs et le temps de réponse ; choisir une valeur justifiée.

Étape suivante : Mesurer une tension →

SOURCES ET PROLONGEMENTS

Vérifier dans la documentation.

Contenus originaux Quiet Bee. Progression proposée pour travailler la chaîne d’information, le prototypage et la validation ; elle ne remplace pas le programme ni les consignes de votre professeur.