Debounce en Arduino
Una pulsación cuenta cuando los contactos dejan de rebotar.
// A press only counts once the contacts stop bouncing.
const int BUTTON_PIN = 2;
const unsigned long SETTLE_MS = 25;
int steadyState = HIGH;
int lastReading = HIGH;
unsigned long lastChange = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(BUTTON_PIN);
if (reading != lastReading) lastChange = millis();
if (millis() - lastChange > SETTLE_MS && reading != steadyState) {
steadyState = reading;
if (steadyState == LOW) Serial.println("Pressed");
}
lastReading = reading;
}
Cómo funciona
- Cada cambio crudo re-estampa
lastChange. - Solo una lectura estable más de
SETTLE_MSse vuelve estado firme. - El print dispara solo en el flanco de bajada limpio.
Palabras clave y builtins usados aquí
HIGHINPUT_PULLUPLOWconstifintlongloopsetupunsignedvoid
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 540
- Tokens
- 119
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 119 segundos.
Paso 3 de 3 en Tiempo; paso 12 de 27 en Fundamentos del lenguaje.