push button - biblioteca (library) - qual a boa?

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.