Só copiar e colar este codigo no Sketch. Todas anotacoes estao disponiveis dentro do codigo.

Em caso de duvidas é só comentar ou enviar para o e-mail citado na anotacao do codigo.

 

Boas festas e feliz mundo novo!

 

#Rodrigo:)

 

 


/*
Debouce de INPUT simples para diversas aplicacoes e de facil configuracao de parametros. Esse codigo faz varias verificacoes pra ter certeza que o botao foi pressionado e nao é uma falha ou ruido!!!

Conectar um botton em série do 5vcc ao pin9(ou pino definido na linha #define button 9). Conectar um resistor de PULL-DOWN ao pin9 (no meu caso estou usando 1Kohm)

Criada por RODRIGO DANIEL ZACARIAS em 22/12/2012 (:um dia apóso fim do mundo:)

Dúvidas ou sugestoes enviar para rodrigo.dimitri8@gmail.com

ANOTACAO PESSOAL: este é um codigo que criei para integrar
à um projeto de automacao no qual estou trabalhando.
*/

#define button 9 //define button no pino 9 do Arduino

void setup() {
  Serial.begin(9600); //inicializa a Serial
  pinMode(button, INPUT); //define button como entrada
}
void loop() {
  int debouceButton=0; //cria variavel debouceButton e armazena valor 0 nela
  if (digitalRead(button)==1){ //se button estiver em nivel alto (5vcc)... entre no loop WHILE
    while (digitalRead(button)==1 && debouceButton<10){ //se button pressionado E debouceButton for menor que 10...
      debouceButton++; //acrescenta +1 ao debouceButton...
      Serial.println(debouceButton); //imprime na serial o valor armazenado em debouceButton
      delay(100); //aguarda 100milisegundos e volta ao WHILE
      /*
       Explicacao do WHILE: o bloco While roda uma vez a cada 100milisegundos. A cada vez que o bloco roda, acrescenta +1 na variavel debouceButton. Enquanto debouceButton for menor que 10, o bloco while volta a executar. Sao 10 ciclos de 100 milisegundos cada. Ou seja 10*100 = 1segundo para sair do bloco com um valor verdadeiro. Se liberar o botao antes de completar os 10 ciclos, nao executa o bloco if VERDADEIRO.
       IMPORTANTE!!! Voce pode alterar a quantidade de ciclos e o tempo de delay de cada ciclo conforme sua necessidade. Pode aumentar a quantidade de ciclos e diminuir o delay entre eles.
       */
    }
    if (debouceButton==10){ //Se o debouceButton for igual a 10...
      Serial.println("debouce em 100%"); //imprime na serial que completou os 10 ciclos do WHILE
      //executa tudo que estiver dentro desse bloco
      debouceButton=0; //retorna o valor inicial da variavel
    } 
    if (debouceButton<10) { //Se o debouceButton for menor que 10
      debouceButton=0; //retorna o valor inicial da variavel
      Serial.println("debouce incompleto"); //imprime na Serial que nao completou os 10 ciclos do WHILE
    }
  }
}

Exibições: 332

Responder esta

Respostas a este tópico

"Conectar um botton ao 5vcc em série o pin9 e um resistor
de PULL-UP ao pin9 (no meu caso estou usando 1Kohm)"

Não seria ligar o botão ao GND?

Nao. Voce liga o botao no 5vcc e a saida dele no pin9 ou pino que vc setar na linha #define button 9.

depois vc conecta um resistor de 1k no mesmo pin do botao e a outra ponta ao GND.

Ou seja. O resistor vai manter o pino sempre em 0vcc. Quando pressionar o botao, vai passar a 5vcc.

Ah, você arrumou, ou era o botão no GND ou o resistor seria de pulldown.

Estava os 2 no VCC.

hehehhe... exato... é a pressa de fazer o negocio funcionar, agente se perde nos detalhes. mas sao os detalhes q fazem a diferenca, neh?! entao vamos lá... Estou agora criando uma classe para esse debouce. Pois vou ter varias inputs para tratar no meu projeto, entao preciso economizar codigo e memoria do meu arduino.

Qlqr duvida ou sugestao, pode continuar postando ae! 

Grande abraco

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço