Prezados,
procuro uma biblioteca para botões, com as seguintes características:
Achei uma (button), mas não consigo resolver o debounce.
Alguém tem experiencia com push buttons, e que possa dar-me algum auxílio?
Agradeço antecipadamente.
Vê os botões de 20 em 20 ou de 30 em 30 ms. Verifica a mudanca de estado no botão e não o nível a que está.
A melhor maneira, ou a mais fácil, de implementar isto é usando o millis para criar uma seccão de código que corre de x em x milisegundos.
Qual a diferença entre nível e estado? Obrigado!
Vamos assumir que o microcontrolador corre o seu ciclo em 1 ms.
Vamos assumir que o teu dedo fica pelo menos 20 ms no botão.
Se o teu código olhar para o nível do botão, por exemplo:
int var = 0;
if (digitalRead(BOTAO) == HIGH){
var++;
}
Ele vai executar este pedaco de código 20 vezes. Quando na realidade preferias que apenas o fizesse uma vez. Isso é o que se chama de nível. Desde que esteja o nivel alto, ele executa este código.
int var = 0;
unsigned char estado_anterior = 0, estado = 0;
estado = digitalRead(BOTAO);
if ( estado == HIGH && estado != estado_anterior){
var++;
}
estado_anterior = estado; //para o próximo ciclo correr bem.
Nesta situacão, o código apenas corre quando o estado é HIGH e o estado anterior era diferente de HIGH, ou seja LOW.
Estás a perceber agora?
Entendi. Obrigado.