Ja passei varias vezes por isso...

monto um circuito para monitorar um push button... e de repente quando ele era para estar estático em 0 ele pega e vira 1 ou ao contrario...

Ja tentei colocar um capacitador de  uns 100 nf para fazer desacoplarem mais num fez nem cosca e o problema permaneceu...

O que eu posso fazer a aplicação que estou desenvolvendo exige uma certa precisão... 


Exibições: 7083

Responder esta

Respostas a este tópico

Amigo, tente colocar um resistor pull up ou pull down dependendo do caso. 

Segue abaixo como implementá-los e para que servem:

http://labdegaragem.com/profiles/blogs/para-que-serve-resistores-pu...

coloque um flip flop  só não sei que modelo vc deve usar se JK, D ,etc..

assim quando vc aperta um botao isso vai ser uma entrad digital e sem ruido nenhum

Amigo eu fiz assim e mesmo assim o problema permanece e agora??

Deve ter algum problema de ruido - por exemplo, na fonte.

Coloque um capacitor de 100 uF entre Vcc e terra.

  Fabiano o CI Atmega do arduino ja tem um resistor de pull up e da pra ativar via codigo, depois que vc iniciar a porta como: pinMode(porta,INPUT); acione um digitalWrite(porta,HIGH); se vc quer entrar comum sinal logico negativo ou digitalWrite(porta,LOW); para positivo. Dessa forma vai evitar ruídos!!

 Abrç. 

Valew pelas respostas gente... hj anoite vou por em pratica....

O jeito polido em software seria o mesmo jeito que o PC faz no seu teclado:

Se vc detectar o pressionamento de uma tecla aguarde por um instante sem aceitar a mesma (outra poderia).

Isso pode ser implementado assim (ou de outro jeito):

Criar uma interrupção de timer a 100Hz (por ex) e colocar nela um contador de tempo "kmudo" por ex.

Se kmudo!=0 kmudo--;

Aih quando vc faz lá no meio do seu programa a leitura de teclas coloca um && (kmudo==0) na condição.

Se for satisfeito vc antes de tratar manda um kmudo=50 por ex.

Aih se chegar nova tecla (ruido) vc ignora pq ainda não contou o meio segundo.

Precisa calibrar esse tempo, mas deve resolver bem.

tipo isso assim resolve alguma coisa?

/// verifica se foi pressionado

if(pino) {

// aguarda um tempinho não sei se esse tempo é mt ou pouco

delay(150);

    // verifica se ainda ta pressionado ou foi so um ruido

    if(pino)

     {

            // ai sim confirma que foi pressionado

     }

}

isso para aguardar um tempo com software, mas da pra fazer com capacitor.

alguem me corrige ai, pois eu tambem to preocupado com ruido.

Rogerio posso te dar uma dica, aprenda a nao usar delay, delay para todo o teu processamento, em um projeto complexo nao terá sucesso usando delay,use timer que voce tera maior sucesso em suas programaçoes.

Valeu a dica, como sou iniciante com essa linguagem, mas eu fiz um programa grande e ja tinha notado que precisava melhorar em algo. tem tantos delay que nem da pra contar.

int botao=12;
int saida = 13;
short trava=0;
unsigned long timer_base =0;
void setup()
{

}
void loop()
{
if(digitalRead==LOW)
{
trava=false;
digitalWrite(saida,LOW);
}
if((digitalRead(botao)==HIGH)&&(!trava))
{
timer_base=millis();
trava=true;
}
if((digitalRead(botao)==HIGH)&&(millis()>(timer_base+150)))
{
digitalWrite(saida,HIGH);
}
}

esse codigo fiz em 2minuto, se tu fosse filtrar muitos botoes, poderia criar uma funcao, e usar para varios botoes, desta forma sem usar delay teu processo continua normalmente se ser pausado

Olá Fabiano,

Eu fiz um projeto com botões e andei lendo sobre algo parecido, chamado bounce. Nesse caso, tem como fazer a correção por soft ou hard, vai depender do seu projeto. Da uma olhada nesse material se te ajuda.

Tem até uma lib para tentar resolver isso. http://playground.arduino.cc/code/bounce

Mais detalhes

http://arduino.cc/en/Tutorial/Debounce

http://arduinobymyself.blogspot.com.br/2012/02/debouncing.html

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço