🛠 Bouton utilisateur et console série USB
Objetivos
Leer el estado del botón USER de la Feather nRF52840 y mostrarlo en la consola serie USB. El nRF52840 posee un controlador USB nativo: el Serial del core de Arduino es un CDC-TinyUSB, no hay chip serie externo. También aprenderás sobre el antirrebote por software (millis) y la espera no bloqueante.
Material
- 1× Adafruit Feather nRF52840 Express
- 1× cable micro-USB con datos
- Arduino IDE con el core Adafruit nRF52 Boards
Código completo
// nrf52840-bouton-console-uart.ino
const uint8_t BUTTON_PIN = 9; // bouton USER (alias D9)
// >
// sa broche exacte (D9 vient d'exemples CircuitPython) ; vérifier au multimètre
// ou avec le schéma officiel si rien ne se passe.
uint8_t lastState = HIGH;
uint32_t lastDebounce = 0;
uint32_t pressCount = 0;
void setup {
Serial.begin(115200); // console USB CDC native
pinMode(BUTTON_PIN, INPUT_PULLUP); // le bouton USER relie la broche à GND
Serial.println("Console Feather nRF52840 prete");
}
void loop {
uint8_t state = digitalRead(BUTTON_PIN);
uint32_t now = millis;
if (state != lastState && (now - lastDebounce) > 30) {
lastDebounce = now;
lastState = state;
if (state == LOW) {
pressCount++;
Serial.print("Appui n°");
Serial.println(pressCount);
}
}
if (Serial.available) { // echo de la console vers la carte
char c = Serial.read;
Serial.print("Recu: ");
Serial.println(c);
}
}
Verificación esperada
Abre el monitor serie a 115200: cada pulsación del botón USER muestra «Pulsación n.º N» sin rebotes parásitos (sin duplicados con 1 ms de diferencia). Una letra tecleada en la consola se devuelve como eco.
Errores frecuentes
INPUTsin pull-up: el pin queda flotante y la consola se llena de falsas pulsaciones — usaINPUT_PULLUP.- Antirrebote con
delay(30): pierdes las pulsaciones siguientes; compáralo conmilliscomo se muestra arriba. - Pin USER incorrecto: si no reacciona nada, prueba D9 y los pines vecinos, la referencia exacta no está confirmada en la documentación.
- Monitor cerrado durante la carga: en CDC nativo, cierra el monitor si el puerto está ocupado.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
neopixel_pulsation.pyPythonled_bouton.pyPythonentrees_num.pyPythonanalogique_lumiere.pyPythonservo_pwm.pyPythonscanner_i2c.pyPython