Ir ao conteúdo

Posts recomendados

  • Membro VIP
Postado

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.

Postado
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
  • Membro VIP
Postado

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();

 

  • Curtir 2
  • Obrigado 1
  • Membro VIP
Postado

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
Postado
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?

  • Membro VIP
Postado

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
  • Membro VIP
Postado
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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!