🛠 Bouton poussoir et console USB
Objectifs
Câbler un bouton poussoir sur une broche numérique de la MKR GSM 1400 (logique 3,3 V), le lire avec une résistance de tirage interne (INPUT_PULLUP), débouncer le signal et afficher chaque appui sur la console USB. Compétence de base pour toute interface locale : les broches D0–D7 sont numériques, dont 8 entrées à interruption externes.
Matériel
- Carte Arduino MKR GSM 1400
- 1 bouton poussoir
- 1 breadboard et câbles jumper
- Alimentation par USB (le module radio restant éteint, l'USB suffit pour ce montage)
Code complet
// Bouton sur D2 (vers GND) + console USB
const uint8_t BTN = 2;
volatile uint32_t appuis = 0;
uint32_t dernierMs = 0;
void onAppui {
uint32_t maintenant = millis;
if (maintenant - dernierMs > 50) { // anti-rebond 50 ms
appuis++;
dernierMs = maintenant;
}
}
void setup {
pinMode(BTN, INPUT_PULLUP); // logique active a l'état BAS
attachInterrupt(digitalPinToInterrupt(BTN), onAppui, FALLING);
Serial.begin(9600);
while (!Serial) {} // attend l'ouverture du moniteur USB
Serial.println("MKR GSM 1400 - test bouton D2");
}
void loop {
static uint32_t dernierAffiche = 0xFFFFFFFF;
noInterrupts;
uint32_t n = appuis;
interrupts;
if (n != dernierAffiche) {
dernierAffiche = n;
Serial.print("Appuis : ");
Serial.println(n);
}
delay(10);
}
Vérification attendue
Chaque appui unique imprime une ligne « Appuis : N » avec un compteur qui augmente de 1 ; un appui franc ne doit jamais créer de doublons. Le while (!Serial) montre que la MKR GSM 1400 possède un USB CDC natif : le programme attend l'ouverture du moniteur série.
Erreurs fréquentes
- Bouton câblé vers 3,3 V au lieu de GND alors que le code utilise
INPUT_PULLUP: le compteur s'incrémente en permanence ; câbler vers la masse ou passer àINPUTavec résistance externe de tirage vers 3,3 V. - Oublier que la logique est en 3,3 V : ne jamais injecter 5 V sur une broche GPIO de la carte.
- Utiliser une broche qui n'interrrompt pas : seule une partie des broches accepte
attachInterrupt(8 broches d'interruption externe sur le MKR) ; D2 en fait partie. - Ne pas mettre
while (!Serial): les premières lignes sont perdues si le moniteur s'ouvre après le démarrage. - Rebonds : sans la fenêtre de 50 ms, un appui peut compter 3 à 5 événements.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino