CONECTAR
BOTON PARA ENCENDER UN LED
Clic aquí para descargar codigo sin control de rebotes: DESCARGAR
1. Resistencia Pull-Up:
Cuando utilizas una resistencia pull-up,
conectas una resistencia desde el pin del botón hasta el voltaje de
alimentación (VCC o 5V en Arduino). Esto se hace para asegurar que el pin esté
en un estado lógico alto (HIGH) cuando el botón no está siendo presionado.
Cuando presionas el botón, el pin se conecta a tierra (GND), y el estado del
pin cambia a bajo (LOW).
Circuito:
·
Pin del botón conectado a
tierra (GND).
·
Resistor conectado desde el pin
del botón a 5V (pull-up).
·
Cuando el botón está sin
presionar, el pin está en estado HIGH.
Arduino Configuración:
pinMode(botonPin, INPUT_PULLUP);
2. Resistencia Pull-Down:
Cuando utilizas una resistencia pull-down,
conectas una resistencia desde el pin del botón hasta tierra (GND). Esto se
hace para asegurar que el pin esté en un estado lógico bajo (LOW) cuando el
botón no está siendo presionado. Cuando presionas el botón, el pin se conecta a
VCC (5V), y el estado del pin cambia a alto (HIGH).
Circuito (el de la imagen):
·
Pin del botón conectado a VCC
(5V).
·
Resistor conectado desde el pin
del botón a tierra (pull-down).
·
Cuando el botón está sin
presionar, el pin está en estado LOW.
3. Los rebotes:
Los rebotes en un botón son pequeñas
fluctuaciones eléctricas que ocurren cuando se presiona o suelta un botón
físico. Estas fluctuaciones pueden generar lecturas erráticas del estado del
botón, lo que puede afectar negativamente la respuesta esperada en un programa
Arduino. Veamos más detenidamente el fenómeno de los rebotes y cómo manejarlo:
¿Qué son los Rebotes?
Cuando presionas o sueltas un botón, los
contactos dentro del botón pueden hacer contacto y separarse varias veces antes
de establecerse en su posición final.
Estos contactos pueden generar un fenómeno
llamado "rebote" debido a la mecánica interna del botón.
¿Cómo se Manifiestan los Rebotes?
Los rebotes pueden aparecer como una serie
rápida de pulsos eléctricos.
Estos pulsos pueden hacer que el programa
Arduino detecte múltiples cambios de estado en un corto período de tiempo.
Problemas Asociados con los Rebotes:
Dificultad para obtener una única lectura
clara del estado del botón.
Puede llevar a comportamientos no deseados,
como múltiples activaciones de una acción con un solo toque.
Cómo Manejar los Rebotes en Arduino:
Uso de
Resistencias y Condensadores:
Se pueden
utilizar resistencias y condensadores en circuito para filtrar los rebotes.
Sin embargo,
esto puede ser complicado y a menudo se prefiere un enfoque de software más
sencillo.
Uso de
Software (Debouncing /Anti-rebote):
Un método común
para manejar los rebotes es implementar una lógica de "debouncing" en
el código.
El debouncing
implica ignorar cualquier cambio de estado del botón durante un breve período
después de que se detecta un cambio.
Ejemplo de
Debouncing en Arduino:
const int
botonPin = 2; // Pin conectado al botón
int
estadoBoton; // Variable para
almacenar el estado del botón
int
estadoAnterior = LOW; // Variable para
almacenar el estado anterior del botón
unsigned
long tiempoAnterior = 0; // Variable
para almacenar el tiempo del último cambio de estado
void
setup() {
pinMode(botonPin, INPUT); // Configura el pin del botón como entrada
}
void
loop() {
// Lee el estado actual del botón
int estadoBoton = digitalRead(botonPin);
// Verifica si ha habido un cambio en el
estado del botón
if (estadoBoton != estadoAnterior) {
// Si hay un cambio, actualiza el tiempo
del último cambio
tiempoAnterior = millis();
}
// Verifica si ha pasado un tiempo suficiente
desde el último cambio
if (millis() - tiempoAnterior > 50) {
// Si ha pasado suficiente tiempo,
actualiza el estado anterior y realiza acciones
estadoAnterior = estadoBoton;
// Realiza acciones según el estado actual
del botón
if (estadoBoton == HIGH) {
// Acciones cuando el botón está
presionado
} else {
// Acciones cuando el botón no está
presionado
}
}
}
En este
ejemplo, se utiliza millis() para medir el tiempo desde el último cambio. Si ha
pasado un tiempo suficiente (50 milisegundos en este caso), se actualiza el
estado anterior y se realiza alguna acción. Esto ayuda a ignorar los cambios
rápidos asociados con los rebotes.
Conclusión:
Los rebotes son fenómenos eléctricos
comunes en botones físicos.
Pueden manejarse con hardware (resistencias
y condensadores) o con software (debouncing).
El debouncing en software es una técnica
comúnmente utilizada y puede implementarse en el código Arduino para garantizar
una lectura confiable del estado del botón.