Ir ao conteúdo
  • Cadastre-se

Vários botões no Arduino em uma porta analógica


MicSG

Posts recomendados

  • Membro VIP

Olá.

Gostaria de saber como fazer para uma única porta Analógica do Arduino ler vários botões. Estou desenvolvendo um projeto com  Arduino UNO e sobrou uma única porta Analógica(A3). Queria que a leitura se comportasse da seguinte forma: A leitura somente é feita após soltar o botão.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
4 minutos atrás, Moyano disse:

Boa noite Michel;Tem este articulo que talvez ajude a sua pesquisa,https://www.connduino.com/articles/admin/expanding-connduino-push-buttons-and-breadboard

Se tiver dificultade com Inglês mande traduzir a pagina.

Atte;JSMB 

O hardware eu até entendi, mais o problema é o software.

Link para o comentário
Compartilhar em outros sites

25 minutos atrás, Michel_G disse:

O hardware eu até entendi, mais o problema é o software.

Eu não entendo de programação, mas sei que na interface do Arduino ele reconhece valores que são relacionados com a tensão de entrada.

Algo como o valor zero é a tensão zero (o negativo), e o valor 1023 é a tensão máxima, no caso os 5V.

O que você deve fazer é ir colocando nas linhas, faixas de valores próximas ao valor que o divisor resistivo entrega dando uma margem de erro (pois existe as limitações físicas dos componentes).

Cada faixa de valor irá selecionar uma função diferente no seu programa.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Como você parece uma pessoal legal e receptiva, numa vontade temporária de exercitar o tico e teco, idealizei um sistema mais elegante e minimalista:

switch (adcread()/128)
{
case 0: funcao0();break;
case 1: funcao1();break;
case 2: funcao2();break;
//...
case 7: funcao7();break;
}

😁

 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Em 09/08/2020 às 19:33, Isadora Ferraz disse:

8 botões entre 0 a 5v


a=read_adc();
if ((a>128*0)&&(a<128*1)) faca_0();
if ((a>128*1)&&(a<128*2)) faca_1();
if ((a>128*2)&&(a<128*3)) faca_2();
...
if ((a>128*7)&&(a<128*8)) faca_7();

 

Olá Isa. Poderia explicar uma dessas linhas de códigos? O que esta acontecendo ali? Você teria algum documento para quem quer aprender c++ para Arduino?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Claro amigo...

a=read_adc();// captura o valor analógico... acho que esta nem precisava né?

O && forma uma porta AND entre os parênteses. Algo como:

SE isso E aquilo forem verdade, faça alguma coisa
 

if ((a>128*0)&&(a<128*1)) faca_0(); //se o valor estiver entre 0 e 127, faça alguma coisa.
if ((a>128*1)&&(a<128*2)) faca_1();//se o valor estiver entre  127 e 255 , faça alguma outra coisa.

Ah sim... e o > significa "maior que" e o < "menor que". 😁

-adc geralmente é 10 bits ou seja vai de 0 a 1023

-quero 8 botões entre 1024 valores (incluso o zero) =>1024/8=128 =>8 faixas de tensão.

Porque coloquei 128?? Foi mais pra efeito didático e facilitar o entendimento (de lhe causou efeito contrário kk) . Poderia ter sido :

if ((a>0)&&(a<128))...
if ((a>128)&&(a<256))...
if ((a>256)&&(a<384))...
if ((a>384)&&(a<512))...

obs: na prática é bom comparar um valor mínimo maior que zero pois qualquer ruidinho acionaria o 1º if, consegue perceber?

if ((a>20)&&(a<128))... //é uma opção

Também na prática é bom calcular os resistores de modo que o valor fique no meio da comparação. No ex. acima:

Vr= 0.31V, 0,94V, 1,57V ... etc
adc=64,    192,   320... etc

 

Achei que você ia se interessar mais pela 2ª opção com switch case, mas que bom que a entendeu.

 

E não, não tenho recomendação pra arduino @  c++. E nem programo em c++ só em c pois sendo este minimalista, se aproxima mais dos recursos também mínimos de um mc.

  • Curtir 2
  • Obrigado 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
42 minutos atrás, vtrx disse:

Só relembrando que este método não aceita botões apertado simultaneamente,se não me engano.

Isso mesmo. "A desvantagem desse tipo de teclado é que você não consegue saber se 2 teclas foram acionadas simultaneamente, pois quando isso ocorre a queda de tensão lida pelo o pino A5, é a maior dentre os botões que foram pressionados".

Para realizar leitura simultaneamente é preciso fazer outro tipo de teclado, o Teclado com configuração em R-2R:

TutoTecladosA0.thumb.png.df638a569ccb6ccbc0896411d0ca2036.png

link da explicação detalhada:http://labdegaragem.com/profiles/blogs/tutorial-como-ler-varios-botões-atraves-de-uma-unica-entrada-anal

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!