Índice:

Teclado de um pino 4 × 4: 10 etapas
Teclado de um pino 4 × 4: 10 etapas

Vídeo: Teclado de um pino 4 × 4: 10 etapas

Vídeo: Teclado de um pino 4 × 4: 10 etapas
Vídeo: Como ensinar uma criança Tocar piano - Primeira Aula 1 ( Prof. Tony Calaça ) 2024, Julho
Anonim
Teclado de um pino 4 × 4
Teclado de um pino 4 × 4

Cada vez que vejo um teclado, ele vem com muitos pinos, é um grande desperdício de seus pinos do Arduino, então podemos rodar um teclado com um e apenas um pino?. A resposta está aqui.

Etapa 1: Lista de materiais

Lista de Materiais
Lista de Materiais

Hardware:

01 Arduino UNO

02 tábuas de pão

01 LCD com I2C

16 botões de pressão

04 resistores 1,5 kΩ

04 resistores 620 Ω

04 resistores 220 Ω

08 resistores 100 Ω

01 resistor 1 kΩ

07 fios de ligação

Programas:

Arduino IDE instalado no seu PC

Etapa 2: Esquema e Cicruit

Esquemático e Cicruit
Esquemático e Cicruit
Esquemático e Cicruit
Esquemático e Cicruit

A ideia geral é que temos 4 * 4 matrizes de botões conectados verticalmente ao aterramento pelo cabo direito e horizontalmente pelo outro cabo (o cabo do botão) e resistores de 1,5 kΩ, 620Ω, 220Ω e 100Ω, as extremidades de as 4 filas são conectadas por quatro resistores de 100Ω, conforme mostrado no esquema.

Cada vez que você pressiona um botão, você fecha o circuito e a corrente passa por um caminho diferente e por uma cadeia de resistores diferente, é por isso que o pino A0 recebe uma leitura analógica diferente para cada botão. Tudo o que você precisa agora é codificação.

Etapa 3: O Código

#incluir

#incluir

LiquidCrystal_I2C lcd (0x3f, 20, 4);

Botão int = A0;

int readvalue;

void setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (botão, INPUT);

lcd.backlight ();

lcd.print ("Olá, mundo");

atraso (2000);

lcd.clear ();

lcd.print ("Teclado de um pino 4 * 4");

atraso (2000); }

void loop ()

{

readvalue = analogRead (botão);

Serial.println (valor de leitura);

if (valor de leitura == 852) {lcd.clear (); lcd.print ("A");}

else {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

else {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

else {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

else {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

else {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

else {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

else {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

else {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

else {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

else {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

else {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

else {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

else {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

else {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}}

Etapa 4: Correção de Valores

Correção de Valores
Correção de Valores

Quando você abre o monitor serial, ele mostra um valor de 1023, se você apertar um botão ele vai te dar outra leitura, você tem que pegar esses valores e fazer algumas mudanças no código

Etapa 5: Projeto após crítica e revisão

Projeto após crítica e revisão
Projeto após crítica e revisão

Sem dúvida que estamos todos aqui para aprender e compartilhar nossos conhecimentos, graças a alguns comentários deixados por algumas pessoas da comunidade que me ajudaram muito, resolvi fazer alguns ajustes e melhorias no meu projeto:

O hardware:

Decidi soldar todos os componentes em um PCB para evitar o problema de conexão ruim nas placas de ensaio.

O código:

Um amigo me aconselhou a usar um software debouncing e é apenas um loop ("for" loop por exemplo) para fazer o programa demorar algum tempo para escolher uma leitura, significa que ele faz muitas leituras (500 no meu exemplo), mas leva apenas o último.

para (i = 1; i <= 500; i ++) {// pegue apenas a 500ª leitura analógica

value = analogRead (Button);} // isso ajuda a levar algum tempo e evitar leituras ruins

Um outro amigo agradecido a ele me aconselhou a comparar "readvalue" com um intervalo de valores, não um, porque "readvalue" leva muitos valores para o mesmo botão. O "A", por exemplo, dá uma leitura de: 849, 850, 851 852, 853, 854, 855, portanto, é um intervalo de 7 valores: um limite (852) e 3 valores à esquerda e à direita. o que temos que fazer aqui é comparar o valor absoluto da diferença entre "readvalue" e "852" com "3".

if (abs (valor de leitura-852) <= 8) {lcd.clear (); lcd.print ("A");}

Etapa 6: depois de algum trabalho de soldagem

Depois de algum trabalho de soldagem
Depois de algum trabalho de soldagem
Depois de algum trabalho de soldagem
Depois de algum trabalho de soldagem
Depois de algum trabalho de soldagem
Depois de algum trabalho de soldagem

Etapa 7: O momento da verdade

Como você pode ver, o programa às vezes confunde os botões, mas ainda funciona, em teoria não há nada de errado com o circuito, mas o código precisa de mais calibração.

Etapa 8: Fim

Espero que gostem deste projeto e que tentem realizá-lo, talvez se saiam melhor do que eu.

Pergunte-me se tiver dúvidas, deixe comentários e não se esqueça de votar em mim se gostar.

Recomendado: