Los pulsadores suelen generar transiciones de apertura/cierre erróneas al presionarlos, debido a problemas mecánicos y físicos: estas transiciones pueden interpretarse como múltiples pulsaciones en un lapso muy corto, engañando al programa.
Este ejemplo muestra cómo eliminar el rebote de una entrada, lo que significa verificar dos veces en un breve lapso de tiempo para asegurar que el pulsador se haya presionado correctamente.
Sin esta función, presionar el botón una sola vez puede generar resultados impredecibles.
Este código utiliza la función millis() para registrar el tiempo transcurrido desde que se presionó el botón.
#define BUTTON_PIN_F_UP 3
byte lastButtonStateFUp = LOW;
unsigned long debounceDuration = 50; // millis
unsigned long lastTimeButtonStateChanged = 0;
void setup()
{
Serial.begin(115200);
pinMode(BUTTON_PIN_F_UP, INPUT);
}
void loop()
{
if (millis() - lastTimeButtonStateChanged > debounceDuration) {
byte buttonState = digitalRead(BUTTON_PIN_F_UP);
if (buttonState != lastButtonStateFUp) {
lastTimeButtonStateChanged = millis();
lastButtonStateFUp = buttonState;
if (buttonState == LOW) {
// Aquí puedes agregar la acción que necesites realizar
Serial.println("Button Sumar");
}
}
}
}
Elementos necesarios:
Arduino UNO
Resistencia de 10k, una por cada pulsador
El pulsador debe ser normalmente abierto sin retención
Cables aéreos de conexión
Protoboard
Los pines Digitales ha utilizar pueden ser desde el D2 al D12. D13 se recomienda no utilizar.
La alimentación la tomamos de los 5V de Arduino.