Go Down

Topic: programa para gerar interrupcao externa (Read 3748 times) previous topic - next topic

ramzaloko

Ola galera sou novo aki no forum do arduino, comprei o meu a pouco tempo, e estou fazendo um projetinho que necessito utilizar interrupcoes externas, e para isso desenvolvi um prototipo para mais tarde desenvolver o verdadeiro projeto.

A minha intencao no prototipo é ter 2 leds, um conectado ao pino 13 e outro ao pino 12, e quando eu aciono a interrupcao externa 0 o led 13 ligue, e quando eu aciono a int ext 1 o pino 12 acenda, e se eu reaciona-los eles venham a apagar.

segue abaixo o codigo.

Code: [Select]

const int botaoverde = 0;
const int botaoamarelo = 1;
const int led1 =  13;     
const int led2 = 12;


volatile int flag1 = LOW;
volatile int flag2 = LOW;

void setup(){
   pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  attachInterrupt(botaoverde, tratador1, CHANGE);
  attachInterrupt(botaoamarelo, tratador2, CHANGE);
}

void loop(){
 
 
  digitalWrite(led1,flag1);
  digitalWrite(led2,flag2);
}

void tratador1(){
  flag1= !flag1;
 
}

void tratador2(){
  flag2= !flag2;
 
}
 


vou colocar uma imagem do "circuito"

a imagem esta como anexo.

O meu problema é o seguinte: mesmo com o botao desligado a interrupcao aciona!!! ela aciona como se tivesse algum mal contato, se eu encostar encima da placa ela funciona, se eu encostar no botao( sem aperta-lo) ela funciona, muito estranho isso

por favor alguma pessoa mais intendida q eu poderia me ajudar????


Luigi_xp

Eu tambem tive esse problema com um piano de varias teclas que eu fiz. a porta usb da muita interferencia, principalmente por causa da capacitância do corpo humano. faça o teste com uma fonte.

bubulindo

Procura por "key debounce" no google e vês o que está a acontecer.

Se conseguires, liga um osciloscópio à porta de entrada do Arduino e vês que ao carregar no botão, muito provavelmente a tecla não dá um sinal limpo.
Tenho a certeza quase absoluta que o problema é esse e não a porta série. :\

This... is a hobby.

ramzaloko

muito obrigado !

entao o que voces estao me dizendo eh que provavelmente seja problema de interferencia certo?

eu ja estava pensando q meu arduino estava estragado ehehe

vou seguir suas dicas!!!

bubulindo

Não é exactamente interferência...

Eu não sei que botões montaste, mas posso-te dizer por experiência que botões bons sem este tipo de problemas são caríssimos. Muito mais caros do que alguém estaria dispostos a pagar por eles para um hobby.

O que acontece é que o botão tem uma mola, ou espécie de mola, dentro para fazer com que o botão volte à posição inicial quando é solto. No entanto, a mola não é perfeita e em muitos casos o que acontece é que a mola fica solta quando largamos o botão e faz vários contactos depois do nosso dedo largar o botão.

Podes ver aqui neste site um exemplo do que estava a dizer:

http://dangerousprototypes.com/2010/11/10/button-debounce-code/

Como podes ver o sinal não desce directamente para zero quando se carrega no botão... Muito provavelmente será isto que estás a ver no teu projecto.

Existem formas de te livrares disto com hardware ou software:

Aqui tens uns sites:

http://www.all-electric.com/schematic/debounce.htm
http://www.ganssle.com/debouncing.htm

Infelizmente os exemplos estão em inglês porque não faço a mínima ideia de qual será a palavra Portuguesa para "debounce". :(
This... is a hobby.

Luigi_xp

tente usar pinos digitais para conectar os botões. ou você esta usando TX e RX como pinos normais?

ramzaloko

valeu mesmo pessoal vou tentar esse tal de "debounce", um outro amigo ali acima deu a mesma ideia,

caso funcione eu posto o resultado aki!

obrigadao mesmo.



Go Up