🛠 Bouton de contact cousu et pull-up interne
Objectifs
Coudre un capteur de contact (deux boutons-pression reliés par un fil conducteur) qui sert de bouton poussoir, et allumer une LED quand on relie les deux pressions. On découvre les entrées numériques, la résistance de pull-up interne (20 à 50 kΩ) et l'anti-rebond logiciel adapté au fil conducteur.
Matériel
- 1 LilyPad SimpleSnap avec pile 3,7 V
- 2 boutons-pression + fil conducteur (le « bouton » cousu)
- 1 LED LilyPad
- Adaptateur FTDI pour téléverser
- >
Code complet
// Bouton cousu : contact fermé -> LED allumée (pull-up interne)
const uint8_t BOUTON = 2; // contact cousu entre cette pastille et « − »
const uint8_t LED = 9; // LED LilyPad sur pastille PWM
const unsigned long ANTI_REBOND = 50; // ms : le fil conducteur « crépite »
bool etatStable = HIGH, derniereLecture = HIGH;
unsigned long dernierChangement = 0;
void setup {
pinMode(BOUTON, INPUT_PULLUP); // pull-up interne : pas de résistance externe
pinMode(LED, OUTPUT);
}
void loop {
bool brut = digitalRead(BOUTON);
unsigned long maintenant = millis;
if (brut != derniereLecture) { // tout changement relance le timer
derniereLecture = brut;
dernierChangement = maintenant;
} else if (brut != etatStable && maintenant - dernierChangement >= ANTI_REBOND) {
etatStable = brut; // contact fermé = LOW (relié à la masse)
}
digitalWrite(LED, (etatStable == LOW) ? HIGH : LOW);
}
Vérification attendue
LED éteinte au repos ; quand on approche les deux boutons-pression l'un de l'autre (contact fermé), la LED s'allume sans aucune résistance externe. En écartant les pressions, elle s'éteint franchement, sans scintillement grâce à l'anti-rebond de 50 ms.
Erreurs fréquentes
- Oublier INPUT_PULLUP : l'entrée flotte, la LED clignote aléatoirement.
- Coudre le contact vers « + » au lieu de « − » : la logique est inversée (contact fermé = HIGH).
- Anti-rebond absent : le fil conducteur s'effiloche et crépite, la LED grésille.
- Confondre HIGH/LOW : contact fermé, digitalRead renvoie LOW (masse), pas HIGH.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinoluxmetre-couture.inoArduinointerrupteur-tilt.inoArduinoservo-balayage.inoArduino