Paso 2: Botón de Arduino contra rebotes
Continuando con el botón contra rebotes que introduje en mi Instructable pasado, podremos millis() debounce botones sin utilizar delay():
En este código, he agregado algunas nuevas variables de almacenamiento de información:
Boolean debouncedState = bajo;
int debounceInterval = 20;
timeOfLastButtonEvent largo sin signo = 0;
debouncedState almacena el estado debounced actual del botón, esto es el estado en que estamos absolutamente que el botón esté. Por el contrario, currentState y lastState almacenan las mediciones actuales y pasadas que hicimos del botón, pero no nos dicen el estado del botón con certeza porque pueden ser afectados por botón de charla.
debounceInterval es la cantidad de ms para esperar el botón pin resolver antes de que sabemos con certeza qué estado. Yo soy mi último ejemplo había utilizado 1ms, aquí estoy utilizando 20ms.
timeOfLastButtonEvent es similar a timeOfLastLedEvent en el bosquejo pasado, da un tiempo para comparar con currentTime, por lo que podemos contar cuántos segundos han pasado desde la primera detección de una prensa del botón.
Restablecemos la timeOfLastButtonEvent cada vez currentState no es igual a lastState:
Si (currentState! = lastState) {}
timeOfLastButtonEvent = currentTime;
}
Una vez que ha pasado suficiente tiempo sin necesidad de reiniciar timeOfLastButtonEvent, sabemos que el botón se ha establecido en un estado debounced:
currentTime - timeOfLastButtonEvent > debounceInterval
Entonces podemos actualizar el estado almacenado debounce actual si ha cambiado y si es así, desencadenar un evento de acuerdo con el nuevo estado debounce:
Si (currentState! = debouncedState) {}
debouncedState = currentState;
Si (debouncedState == HIGH) {}
Serial.println("pressed");
} else {}
Serial.println("Released");
}
}