Um tempo atras tive problema com "debouncing", achei algumas soluções, tanto física como no software, TODAS nas quais os colegas me ajudaram foi de ajuda.E cada uma dependendo da aplicação.
Fiz um simples código que elimina o "debouncing", porem toda vez tem que apertar o botão para alterar o valor de um em um, e se deixar o botão apertado fica no loop. Segue...
Espero que ajude alguém.
Tags:
Bacana.
Método simples e fácil de implementar.
Uma outra forma de tratar o debounce sem "travar" a aplicação é utilizando controle por tempo (No caso utilizei a função millis()).
Quando detectado o pressionamento do botão seta-se uma variável com o momento atual mais o tempo de debounce que você deseja tratar, durante esse tempo você verifica se o botão continua pressionado, se durante esse período o botão seja solto irá caracterizar um ruído. Outra filtragem é determinar um tempo para próxima leitura ou seja após a detecção de uma leitura aguarda-se um tempo pré-definido para ler novamente.
A desvantagem dessa minha abordagem em relação a que você sugeriu é que aumenta bastante a complexidade do código.
A vantagem é que não trava a aplicação aguardando a "soltura"do botão.
Fiz um código aqui para exemplificar a idéia.
(Não testei fisicamente apenas compilei mais acredito que deva funcionar).
Legal Vitor . Dependendo da aplicação da para usar um tipo diferente.
Abraços..
Algumas vezes já usei a biblioteca keypad.h para tratar os botões, mesmo não utilizando um teclado de matriz, dá para usar a biblioteca, e ela já trata o debounce e também pressionamento curto ou longo. A desvantagem é utilizar um pino digital a mais em relação ao número de botões.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por