🛠 Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
Objetivos
Leer un botón pulsador con digitalRead, mostrar mensajes en el monitor serie y comprender la principal trampa de la Leonardo al migrar desde una Uno: aquí Serial se refiere al puerto USB (CDC), mientras que la UART TTL de los pines 0 y 1 se llama Serial1. El botón utilizará la resistencia de pull-up interna (20 a 50 kΩ), por lo que el montaje es activo-LOW.
Material
- 1 Arduino Leonardo + cable micro-USB
- 1 botón pulsador
- 1 cable que conecta una pata del botón a GND (no se necesita resistencia externa gracias al pull-up interno)
Código completo
// Broche 2 = aussi une interruption matérielle (int1) sur Leonardo
const uint8_t BUTTON_PIN = 2;
void setup {
pinMode(BUTTON_PIN, INPUT_PULLUP); // pull-up interne 20-50 kOhm, actif-LOW
Serial.begin(9600); // ATTENTION : sur Leonardo, Serial = USB CDC, PAS les broches 0/1 !
while (!Serial) { /* attend l'ouverture du moniteur */ }
Serial.println("Leonardo prete : appuyez sur le bouton (broche 2).");
}
void loop {
if (digitalRead(BUTTON_PIN) == LOW) { // bouton enfoncé = LOW
Serial.println("Bouton presse !");
delay(200); // anti-rebond logiciel simple
}
}
Verificación esperada
Abra el monitor serie del IDE a 9600 baudios: se muestra el mensaje de bienvenida. Cada pulsación del botón imprime una línea. El while (!Serial) espera a que el puerto USB CDC sea abierto por el ordenador — una especificidad del USB nativo de la Leonardo que no existe en la Uno.
Errores frecuentes
- Confundir
SerialySerial1: en la Leonardo, conectar un módulo GPS u otro microcontrolador a los pines 0/1 requiereSerial1.begin(...). EscribirSerialintenta hablar con el ordenador, no con los pines. - Cableado al revés: sin el pull-up activado (
INPUT_PULLUP), el pin queda flotante y el mensaje se muestra en bucle. - Lógica invertida: el montaje es activo-LOW;
HIGHsignifica botón soltado. - Bug conocido del núcleo AVR:
serialEventno se dispara para el CDC USB (issue #206); prefieraSerial.availableenloop.
Otros tutoriales para esta placa
- Faire clignoter la LED intégrée (broche 13)
- Lire un capteur analogique : potentiomètre et ADC 10 bits
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Souris USB : déplacer le curseur avec la bibliothèque Mouse
- Asservir un servo moteur avec un potentiomètre (PWM)
- Programmer aux registres : interruption Timer/Counter1
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino