🛠 Bouton poussoir et moniteur série sur la Duemilanove (avec ses 0,5 s de silence)
Objetivos
Leer un botón pulsador y mostrar su estado en el monitor serie — el famoso DigitalReadSerial — descubriendo dos especificidades documentadas de la Duemilanove: las resistencias pull-up internas de 20 a 50 kΩ activables por software, y el auto-reset mediante la línea DTR del chip FTDI: cada vez que se abre el puerto, la placa se reinicia y el bootloader ATmegaBOOT consume los primeros bytes durante ~0,5 segundos. Tus scripts de automatización deberán tener esto en cuenta.
Material
- 1 Arduino Duemilanove (se recomienda la versión con ATmega328)
- 1 botón pulsador (4 patas: los pares están conectados entre sí)
- 1 cable macho-macho
- Cable mini-USB; controlador FTDI instalado
Código completo
// Bouton sur broche 2 -> GND, pull-up interne active
const byte BOUTON = 2; // les interruptions externes sont aussi sur 2 et 3
void setup {
pinMode(BOUTON, INPUT_PULLUP); // pull-up interne 20-50 kOhm
Serial.begin(9600); // USB via FTDI FT232RL
delay(1000); // laisser passer le bootloader (~0,5 s)
Serial.println("Duemilanove prete");
}
void loop {
// rappel : avec pull-up, bouton enfonce = LOW
byte etat = digitalRead(BOUTON);
Serial.println(etat == LOW ? "ETAT=0 (appuye)" : "ETAT=1 (libere)");
delay(100);
}
Verificación esperada
El monitor serie (9600 baudios) muestra « ETAT=1 (libere) » continuamente; al mantener pulsado el botón, las líneas cambian a « ETAT=0 (appuye) ». Cada vez que se abre o cierra el monitor, la placa parpadea (reset DTR) y vuelve a aparecer la línea « Duemilanove prete »: este es el comportamiento normal del auto-reset, no un error.
Errores frecuentes
- Esperar datos en el medio segundo siguiente a la apertura del puerto: el bootloader ATmegaBOOT se reserva el puerto y los primeros bytes enviados por el host se pierden — espera ~1 s antes de comunicarte con la placa (documentado en la página oficial).
- Botón conectado a 5 V sin resistencia externa cuando el pull-up no está activado en el código: la entrada queda flotante y el estado cambia solo.
- Invertir la lógica: con INPUT_PULLUP, botón pulsado = LOW; muchos principiantes prueban
== HIGHy creen que el botón está averiado. - Botón en los pines 0 o 1: están conectados al FTDI (RX/TX USB) e interfieren con el monitor serie — prefiere los pines 2 y 3 (que además son las dos interrupciones externas).
- Velocidad de transmisión incorrecta en el monitor: el código abre a 9600, configura el monitor en 9600.
- En PCs antiguos, el puerto COM cambia con cada puerto USB diferente — verifica en el administrador de dispositivos.
- Superar los 40 mA por pin (especificación oficial): aquí el botón no consume nada, pero no conectes un LED sin resistencia por costumbre.
Otros tutoriales para esta placa
- Faire clignoter la LED 13 d'une Duemilanove (et choisir le bon ATmega)
- Potentiomètre et variation LED : l'ADC 10 bits et le PWM 8 bits version AVR
- Ajouter un deuxième port série avec SoftwareSerial (GPS sur broches 10/11)
- Régler la référence de mesure avec AREF et analogReference
- Persister une calibration dans l'EEPROM de l'ATmega (512 octets ou 1 Ko)
- Convertir la Duemilanove en programmateur AVR (ArduinoISP) pour graver des puces nues
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduinoservo-balayage.inoArduinobuzzer-melodie.inoArduino