🛠 Bouton-poussoir et console série

Arduino Mega ADK (Rev3) · debutant · Schéma : IMG-mega-adk-debutant-2-mega-adk-bouton-console.svg — Mega ADK, bouton-poussoir entre la broche 2 et GND (pull-up interne), console série sur l'ordinateur

Objectifs

Lire un bouton-poussoir et rendre compte de chaque appui sur la console série. On découvre les entrées numériques, les résistances de pull-up internes (20–50 kΩ), les interruptions externes (broches 2, 3, 18, 19, 20, 21 sur l'ATmega2560) et la console rendue possible par l'ATmega8U2, la puce USB-série de la carte — une 8U2, contrairement au Mega 2560 Rev3 qui utilise une 16U2. Un anti-rebond (debounce) simple par fenêtre temporelle complète l'exercice.

Matériel

Code complet

// mega-adk-bouton-console.ino — Board: "Arduino Mega ADK"
const byte BOUTON = 2;

volatile unsigned long nbAppuis = 0;
unsigned long dernierMs = 0;

void onAppui {
  unsigned long now = millis;
  if (now - dernierMs > 50) {   // anti-rebond 50 ms
    dernierMs = now;
    nbAppuis++;
  }
}

void setup {
  Serial.begin(9600);
  pinMode(BOUTON, INPUT_PULLUP);          // pull-up interne 20-50 kΩ
  attachInterrupt(digitalPinToInterrupt(BOUTON), onAppui, FALLING);
  Serial.println(F("Prêt : appuyez sur le bouton broche 2"));
}

void loop {
  static unsigned long lastReported = 0;
  noInterrupts;
  unsigned long n = nbAppuis;             // lecture atomique du compteur 32 bits
  interrupts;
  if (n != lastReported) {
    lastReported = n;
    Serial.print(F("Appui n°"));
    Serial.println(n);
  }
  delay(5);
}

Vérification attendue

Chaque appui imprime « Appui n°1 », « Appui n°2 », etc. Un appui franc n'imprime qu'une seule ligne ; les rebonds mécaniques sont filtrés par la fenêtre de 50 ms. Attendez ~1 s après l'ouverture du moniteur série (auto-reset DTR) avant de juger que la console est muette.

Erreurs fréquentes

  1. Bouton câblé broche → 5 V sans résistance externe : en INPUT_PULLUP il faut bouton vers GND, sinon l'état ne change jamais (ou est simplement inversé).
  2. INPUT au lieu de INPUT_PULLUP sans résistance externe : entrée flottante, messages parasites en tous sens.
  3. Compteur partagé avec l'interruption non déclaré volatile : le compilateur optimise et la boucle principale ne voit jamais la valeur changer.
  4. Oubli de la section critique (noInterrupts/interrupts) autour de la lecture d'un unsigned long : ce AVR 8 bits lit les entiers 32 bits octet par octet, une interruption au milieu peut corrompre la valeur.
  5. Console muette : vérifier le câble USB (certains sont charge-only) et le choix « Arduino Mega ADK » dans l'IDE.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels