Site icon AranaCorp

Implementar a lógica anti-repique no Arduino

5
(1)

A lógica anti-repique, ou debounce, é utilizada para evitar a detecção de alterações parasitas no estado de um sensor. Ao utilizar um sensor que devolve estados discretos, como um botão de pressão, pode acontecer, por razões mecânicas ou outras, que sejam detectadas mudanças de estado que não correspondem ao que queremos detectar. Podemos melhorar a fiabilidade destas medições utilizando a lógica anti-repique, que veremos neste tutorial.

Material

Princípio de funcionamento

Quando um sistema físico muda de estado, é comum haver oscilações durante a transição, por razões físicas (mecânica, tempo de resposta, etc.). Assim, é necessário dar tempo para que o estado se estabilize. Isto pode ser feito através de filtragem eletrônica ou mecânica, ou digitalmente, pelo programa que processa a medição.

Esquema

A estratégia anti-repique pode ser utilizada, por exemplo, para melhorar a detecção do estado de um botão. Para testar o código, colocamos um botão entre os pinos GND e 2.

Código

Vamos criar duas variáveis que guardarão na memória o estado presente e passado do sensor. Vamos ler a entrada digital e validar o seu estado de acordo com o estado anterior e um delay anti-repique. Este método pode ser implementado com a função delay(), porém o resultado é mais limpo e adequado se usarmos a função millis().

//Parameters
const int didPin  = 2;

//Variables
bool didStatus  = false;
bool oldDidStatus  = false;
unsigned long lastDebounceTime  = 0;
unsigned long debounceDelay  = 50;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init digital input
  pinMode(didPin, INPUT_PULLUP);
}

void loop() {
  debounceDid();
}

void debounceDid( ) { /* function debounceDid */
  ////debounce DigitalDebounce
  int reading = digitalRead(didPin);
  if (reading != oldDidStatus) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime)>= debounceDelay) {
    if (reading != didStatus) {
      didStatus = reading;
      Serial.print(F("Sensor state : ")); Serial.println(didStatus);
    }
  }
  oldDidStatus = reading;
}



Resultado

Se variarmos o parâmetro debounceDelay, podemos ver o efeito da lógica anti-repique no reconhecimento do estado do botão. Ao tomar um tempo suficientemente grande, a medição torna-se confiável, e há apenas uma mudança de estado por pressão no botão.

Este tutorial ajuda a entender e implementar a lógica anti-repique. Para facilitar o uso, uma opção é escrever uma biblioteca ou usar uma biblioteca já existente, como a OneButton.h.

Aplicações

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

Exit mobile version