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
}
}
}
Tags:
"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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por