Eliminar rebotes con millis()
Ignore el ruido mediante una breve ventana de estabilidad.
Eliminar rebotes con millis() es una lección gratuita de Arduino & IoT Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Arduino & IoT Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Arduino & IoT Academy incluye 4 lecciones en total.
¿Por qué no usar simplemente delay()?
Podría pausar con delay() después de una pulsación, pero eso paraliza toda la placa. La herramienta más inteligente para obtener botones limpios es millis().
millis() es un cronómetro
millis() devuelve cuántos milisegundos lleva funcionando la placa. Puede comparar dos lecturas para medir el tiempo transcurrido sin detenerla.
unsigned long now = millis();El plan antirrebote
La idea es sencilla: cuando cambie el pin, inicie un temporizador. Confíe en el nuevo estado solo si se mantiene estable durante un intervalo breve.
Elija un intervalo antirrebote
Un retraso de aproximadamente 50 milisegundos es la opción clásica. Es suficiente para superar el rebote, pero demasiado rápido para que usted lo perciba.
const unsigned long DEBOUNCE = 50;Recuerde el último cambio
Necesita una variable que almacene cuándo cambió el pin por última vez. Compárela con la hora actual en cada pasada del bucle.
unsigned long lastChange = 0;Realice un seguimiento de dos estados
Mantenga por separado la lectura sin filtrar y el estado estable confirmado. La primera contiene ruido; el segundo es el estado en el que confía su lógica.
int lastRaw = HIGH;
int stable = HIGH;Detecte un cambio
En cada iteración, lea el pin. Si es distinto del último valor sin filtrar, la señal acaba de cambiar, así que reinicie el temporizador.
int raw = digitalRead(BTN);
if (raw != lastRaw)
lastChange = millis();Espere a que se estabilice
Si ha transcurrido suficiente tiempo desde el último cambio, la lectura se ha estabilizado. Ahora es seguro aceptarla como el estado real.
if (millis() - lastChange > DEBOUNCE) {
stable = raw;
}Actúe en el flanco
Para activar una vez por pulsación, observe cuándo el estado estable cambia a LOW. Ese único flanco es la pulsación limpia y sin rebotes.
if (stable == LOW && lastStable == HIGH)
Serial.println("clean press");Actualice para la próxima vez
Al final del bucle, guarde las lecturas actuales en sus variables de último valor. Así la comparación se actualiza en cada pasada.
lastRaw = raw;
lastStable = stable;Gana el funcionamiento sin bloqueo
Como millis() nunca pausa la placa, los sensores y las salidas siguen funcionando. Puede eliminar el rebote mientras todo lo demás sigue activo. 🚀
Comprobación rápida
Comprobemos cómo el antirrebote con millis() determina que una pulsación es real.
Resumen: pulsaciones limpias
Ha utilizado millis() para ignorar el rebote sin paralizar la placa y aceptar una pulsación solo cuando se estabiliza. ¡Una entrada sólida y profesional! ✅
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Eliminar rebotes con millis()» es gratis?
Sí — el texto completo de «Eliminar rebotes con millis()» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Arduino & IoT Academy, actualiza a CoddyKit PRO. El curso de Arduino & IoT Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Eliminar rebotes con millis()»?
Ignore el ruido mediante una breve ventana de estabilidad. Practicas Arduino & IoT Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Arduino & IoT Academy?
No se requiere experiencia previa. Arduino & IoT Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Eliminar rebotes con millis()»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Arduino & IoT Academy?
Sí. Cada lección de Arduino & IoT Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué los botones «rebotan»
- Eliminar rebotes con millis()
- Almacenar un valor en EEPROM
- Recordar un contador después de reiniciar