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:
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/
Comentar
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?
Muito legal!!!
muito bom!
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".
Porque você faz a soma entre as 100 leituras ?
Muito bom! Vai me salvar no meu projeto! Parabéns!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)