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.

Câblage et logique
| Liaison | Fonction |
|---|---|
| D2 → bouton → GND | Entrée avec rappel interne INPUT_PULLUP |
| D8 → 1 kΩ → anode LED ; cathode → GND | Témoin d’appui |
| Bouton | Lecture | LED |
|---|---|---|
| Relâché | HIGH | Éteinte |
| Appuyé depuis au moins 30 ms | LOW | Allumé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.
- Arduino UNO R4 Minima · UNO R4 WiFi
- Arduino : résolution du convertisseur analogique
- Arduino : exemples WiFiS3
- Analog Devices : DS18B20
- OneWire · DallasTemperature
- Éduscol : programmes et ressources STI2D
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.