Tutorial: Como ler vários botões através de uma única entrada analógica

Adquira estes componentes na Loja do Lab de Garagem

Olá Garagistas! Neste tutorial mostraremos como você pode ler diversos botões através de um único pino de entrada analógica. Isto permite que você economize os pinos de I/O e os utilize para outros fins. Como demonstração, montaremos 2 teclados diferentes, um será lido pelo pino A5, onde esse teclado possui teclas com configuração por divisor resistivo simples, já o outro teclado que será lido pelo pino A0, e utiliza uma rede resistiva em uma configuração R-2R.

Material Utilizado:

1x Arduino

1x Protoboard

16x Resistor 10KΩ

8x Chave Táctil

Alguns Jumpers

1. Teclados

1.1) Teclado com configuração em Divisor Resistivo (A5):

Figura 1 - Teclado Divisor Resistivo

Esse teclado possui uma montagem fácil, quando a tecla (Chave Táctil) é pressionada a queda de tensão no ponto onde o pino A5 está conectado é alterada dependendo do botão que foi pressionado.

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.

1.2) Teclado com configuração em R-2R (A0):

Figura 2 - Teclado R-2R

Este método é muito utilizado em conversores DAC (Conversores Digitais para analógico), onde o nome "R-2R" vem do valor que os resistores devem ter para fazer a montagem. Utilizamos resistores de mesmo valor em paralelo, para usar apenas um valor de resistor (10K).

Este teclado exige uma montagem maior do que a configuração de teclas em Divisor Resistivo. Uma vantagem é que com este método você consegue ler teclas pressionadas simultaneamente.

Abaixo você irá encontrar a tabela da verdade para o circuito que foi utilizado neste teclado:

Tabela 1 - Aferições dos estados do teclado

2. Montagem

Figura 3 - Montagem do circuito

3. Sketch


void setup()
{
  Serial.begin(9600); //Inicia a serial com um baud rate de 9600
}

void loop()
{
  long tecladoA5=0; //Cria variável para ler o teclado ligado ao pino A5
  long tecladoA0=0; //Cria variável para ler o teclado ligado ao pino A0
  
  for(int i=0;i<100;i++) //Laço para fazer 100 leituras
  {
    tecladoA5 = tecladoA5+analogRead(A5); //Soma a leitura anterior com a leitura atual de A5
    tecladoA0 = tecladoA0+analogRead(A0); //Soma a leitura anterior com a leitura atual de A0
  }
  
  tecladoA5 = tecladoA5/100;
  tecladoA0 = tecladoA0/100;
  
  
  Serial.print("Teclado A5 = "); //Imprime no Serial Monitor "Teclado A5 = "
  Serial.println(tecladoA5); //Imprime o valor de A5
  Serial.print("Teclado A0 = "); //Imprime no Serial Monitor "Teclado A0 = "
  Serial.println(tecladoA0); //Imprime o valor de A0
  Serial.print("\n\n"); //Pula 2 linha no Serial Monitor
  
  delay(100); //Aguarda 100 milissegundos

}

Referências:

http://tronixstuff.com/2011/01/11/tutorial-using-analog-input-for-multiple-buttons/

http://tronixstuff.com/2012/02/29/tutorial-analog-input-for-multiple-buttons-part-two/

Exibições: 24612

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de tiago merces em 11 abril 2020 às 15:49

Tenho uma dúvida.

em "Teclado com configuração em Divisor Resistivo", não segui a recomendação dos valores dos resistores. Utilizei de 220ohms.

Entretanto, utilizando o código completo (sem edição), mas utilizando apenas a entrada "A0", observo que, ao pressionar o botão, o valor de "A5" também é alterado.

O que causa isto?

Comentário de Paulo Edson em 29 março 2018 às 4:54

Muito legal!!!

Comentário de jackson andrade em 14 abril 2016 às 8:42

muito bom!

Comentário de jose edinaldo em 16 setembro 2015 às 20:31

Ele soma as 100 leituras porque pode ser que o usuário tenha pressionado mais de uma tecla na configuração R-2R. 

Digamos que a pessoa tenha clicado no botão 1 e 3 do R-2R ele só vai saber onde foi clicado com a soma dos 100 registros assim ele pode olhar o valor na tabelinha "Tabela 1 - Aferições dos estados do teclado".

Comentário de Erick Maia dos Santos em 9 julho 2014 às 14:22

Porque você faz a soma entre as 100 leituras ?

Comentário de Edson Rodrigues do Vale Junior em 31 maio 2014 às 13:27

Muito bom! Vai me salvar no meu projeto! Parabéns!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço