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.

Exibições: 211

Anexos

Responder esta

Respostas a este tópico

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).

Anexos

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço