🛠 Bouton poussoir et console USB
Objetivos
Conectar un botón pulsador a un pin digital de la MKR GSM 1400 (lógica de 3,3 V), leerlo con una resistencia de pull interna (INPUT_PULLUP), eliminar los rebotes de la señal y mostrar cada pulsación en la consola USB. Competencia básica para cualquier interfaz local: los pines D0–D7 son digitales, de los cuales 8 admiten interrupciones externas.
Material
- Placa Arduino MKR GSM 1400
- 1 botón pulsador
- 1 protoboard y cables jumper
- Alimentación por USB (el módulo de radio permanece apagado, el USB es suficiente para este montaje)
Código completo
// 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'etat 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);
}
Verificación esperada
Cada pulsación única imprime una línea «Appuis : N» con un contador que aumenta en 1; una pulsación firme nunca debe crear duplicados. El while (!Serial) muestra que la MKR GSM 1400 posee un USB CDC nativo: el programa espera la apertura del monitor serie.
Errores frecuentes
- Botón conectado a 3,3 V en lugar de GND mientras el código utiliza
INPUT_PULLUP: el contador se incrementa constantemente; conectar a masa o cambiar aINPUTcon una resistencia externa de pull hacia 3,3 V. - Olvidar que la lógica es de 3,3 V: nunca inyectar 5 V en un pin GPIO de la placa.
- Utilizar un pin que no admite interrupciones: solo una parte de los pines acepta
attachInterrupt(8 pines de interrupción externa en el MKR); D2 es uno de ellos. - No incluir
while (!Serial): las primeras líneas se pierden si el monitor se abre después del arranque. - Rebotes: sin la ventana de 50 ms, una pulsación puede contar de 3 a 5 eventos.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino