🛠 Bouton et console série interactive
Objetivos
Leer un botón pulsador con una resistencia de pull-up interna y controlar la placa desde la consola serie: pulsar el botón enciende el LED D6, escribir « s » en el monitor muestra un estado. Se descubren digitalRead, INPUT_PULLUP y la lectura no bloqueante de Serial.
Material
- 1 × Arduino MKR WiFi 1010
- 1 × botón pulsador
- Cables jumper: botón entre D2 y GND (no se necesita resistencia externa, pull-up interna)
- Cable micro-USB
Código completo
// Bouton sur D2 (vers GND), LED sur D6, commandes série.
const uint8_t PIN_BTN = 2;
bool ledOn = false;
void setup {
Serial.begin(115200);
pinMode(PIN_BTN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("MKR WiFi 1010 prete - bouton sur D2, tapez s pour statut");
}
void loop {
static bool etatPrec = HIGH;
bool etat = digitalRead(PIN_BTN);
if (etat == LOW && etatPrec == HIGH) { // front descendant = appui
ledOn = !ledOn;
digitalWrite(LED_BUILTIN, ledOn);
Serial.println(ledOn ? "LED ON" : "LED OFF");
delay(30); // anti-rebond grossier
}
etatPrec = etat;
if (Serial.available) { // commande non bloquante
char c = Serial.read;
if (c == 's' || c == 'S')
Serial.printf("statut: led=%d bouton=%d\n", ledOn, digitalRead(PIN_BTN));
}
}
Verificación esperada
Al pulsar el botón, el LED D6 cambia de estado y se muestra un mensaje en el monitor serie (115200 baudios). Al escribir s + Intro, aparece la línea statut: led=... bouton=... sin bloquear el bucle. El botón se lee como HIGH en reposo y LOW al pulsarlo: es el efecto de la resistencia de pull-up interna.
Errores frecuentes
- Botón cableado hacia 3,3 V en lugar de GND: la lógica está invertida, prefiera el montaje pull-up estándar descrito aquí.
while (!Serial);en setup: en SAMD, esto bloquea indefinidamente si el monitor nunca se abre; evítelo o límitelo con un timeout.- Olvidar la antirrebote: una pulsación única provoca entonces varios cambios de estado.
Serial.readsin probaravailabledevuelve -1 y ensucia la lógica.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
scan-wifi.inoArduinoconnexion-wpa2.inoArduinohttp-get.inoArduinoserveur-web-led.inoArduinohorloge-ntp.inoArduinoudp-diffusion.inoArduino