Arduino e teclados (guia completo)

Olá, os habitantes de Habr! Hoje eu decidi fazer um guia de teclado completo para o Arduino.
Atenção! O artigo é voltado principalmente para iniciantes!

Em muitos projetos, é necessário criar a possibilidade de entrada do usuário. Se você precisar implementar um grande número de botões (relativamente), conectá-los separadamente se tornará longo e irracional. Para esse fim, é melhor escolher um teclado, mas, como qualquer outra opção, você precisa abordá-lo conscientemente. Quais são os tipos de teclados e como interagir com eles?

Globalmente, todos os módulos desse tipo podem ser divididos em duas grandes categorias: matriz e analógica .

Teclados matriciais


O tipo de teclado mais fácil, barato e popular. É relativamente fácil de fabricar e preenche a maior parte do mercado de módulos arduino. Geralmente, é assim:

imagem

imagem

Princípio de funcionamento


Você pode entender como esse teclado funciona estudando o seguinte diagrama:

imagem

Para entender qual botão foi pressionado, é necessário aplicar um sinal aos quatro primeiros contatos do módulo e observar qual sinal retorna a partir do segundo. Mas não tenha medo de ter que escrever algoritmos de processamento para oito pinos manualmente - a biblioteca pronta "keypad.h" nos ajudará com isso, graças à qual não teremos que reinventar a roda.

Conexão da placa


Conectando o próprio módulo


Neste artigo, usarei o seguinte diagrama de conexão:

imagem

Você provavelmente tem uma pergunta: "Por que decidi usar pinos do segundo ao nono, pulando o zero e o primeiro?" - o fato é que alguns módulos os utilizam como canais RX e TX para receber e transmitir dados, respectivamente. Por exemplo, um módulo bluetooth. Portanto, levando em consideração a possível adição do projeto a outros módulos, decidiu-se deixar esses pinos de conexão livres.

Escrita de esboço


Para começar, para poder usar a biblioteca para conectar teclados no código, você precisa instalá-lo no seu dispositivo. Isso pode ser feito da seguinte maneira: no próprio IDE do Arduino, clique em Sketch -> Connect Library -> Manage Libraries ... ou use o atalho de teclado "Ctrl + Shift + I". Na unidade de pesquisa em “keypad.h” (sem colchetes) e pressione “Instalação”.

Após a instalação, continue escrevendo o esboço:

#include <Keypad.h> //      const byte ROWS = 4; //     const byte COLS = 4; //     char hexaKeys[ROWS][COLS] = {//      ,   ,   {'1','4','7','*'}, {'2','5','8','0'}, {'3','6','9','#'}, {'A','B','C','D'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //      byte colPins[COLS] = {9, 8, 7, 6}; //      //    : Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600);//      } void loop(){ char customKey = customKeypad.getKey();//   if (customKey){// -  Serial.println(customKey);//      } } 

Prós e contras


Contras


  • É necessário conectar muitos pinos para funcionar. Esse é um grande problema, se você estiver criando não uma calculadora ou uma fechadura combinada, mas um projeto maior, no qual ainda precisará usar um grande número de módulos diferentes - talvez eles simplesmente não tenham pinos suficientes.
  • A qualidade de execução do módulo é muito baixa: ninguém garante um sinal estável constante. Os teclados originais não são fabricados em um nível muito alto e, se você fez um pedido no Aliexpress, provavelmente precisará consertar os batentes dos engenheiros chineses com um ferro de solda para obter uma operação estável.
  • Uma biblioteca adicional é usada, que também ocupará a memória do microcontrolador, da qual ele já não possui muito. Se você estiver escrevendo um projeto grande com muitas funções e cálculos e precisar ler dados do teclado manualmente ou usar um teclado analógico, cada byte na conta.

Prós


  • Preço baixo
  • Fácil de encontrar à venda

Teclados analógicos


Princípio de funcionamento


Nos teclados analógicos, os resistores são usados ​​para alterar o nível de tensão, e o sinal passa por um canal, que é conectado, de fato, ao pino analógico na placa. Como tudo está organizado pode ser entendido observando o seguinte diagrama:

imagem

Conexão da placa


A conexão é muito simples, mas pode variar dependendo do teclado específico. Neste artigo, considerarei um exemplo do uso deste teclado analógico chinês com Ali.

Portanto: conectamos a saída analógica do teclado a qualquer pino analógico na placa, conectamos o pino VCC na placa a 3,3V (não olhe a inscrição no próprio teclado que diz 5V - isso é um erro) e GND na placa com GND no módulo. Você pode usar o seguinte esquema:



Escrita de esboço


Não há necessidade de usar bibliotecas de terceiros, pois tudo é extremamente simples e claro. Aqui está o próprio código, que lê o botão pressionado e exibe seu número, de 1 a 16 (da esquerda para a direita, de cima para baixo) ou 0, se nada for pressionado, no monitor da porta.

 unsigned const short int KEYPAD_PIN = 0;//    void setup() { Serial.begin(9600); analogReadResolution(10);//      0...1023 } void loop() { Serial.println(getPressedKeypadButton());//       } short int getPressedKeypadButton(){//  keypad`a //   1  16      0     const int OCCURACY = 5;//     int sensorValue = analogRead(KEYPAD_PIN);//    int keys[] = {1016, 937, 860, 794, 683, 641, 604, 571, 509, 485, 464, 444, 407, 328, 275, 236};//    (0-15,  0=1, 1=2  ..) if(sensorValue > -OCCURACY && sensorValue < OCCURACY){return 0;}//   ,    0 for(short int i = 0; i < 16; i++){//             if(sensorValue > (keys[i] - OCCURACY) && sensorValue < (keys[i] + OCCURACY)){ return i+1;//   , ..     0   ,    0    } } } 

Prós e contras


Prós


  • Conexão muito fácil
  • Apenas um pino
  • Economiza memória que você não gasta na biblioteca
  • Fornece operação estável (desde que você não pressione mais de um botão por vez)

Contras


  • Mais caro que os teclados matriciais
  • Provavelmente, a única maneira de comprar será encomendar na China e a entrega levará algum tempo

Sumário


Pessoalmente, eu recomendo o uso de teclados analógicos, pois eles geralmente têm uma qualidade mais alta e a conexão deles é simples, simples. O principal é prestar atenção à tabela de valores dos botões pressionados que o fabricante fornece ou, se não houver, você pode fazer essas medições sozinho, exibindo os valores da porta analógica no monitor de portas, para que você possa usá-los posteriormente no código. Mas a escolha é sempre sua: usar a opção barata padrão ou pagar em excesso em troca de vantagens significativas em algumas situações.

Isso é tudo para mim. Deixe suas perguntas nos comentários, escreva sua opinião e nos encontraremos nos espaços abertos da Habr!

Source: https://habr.com/ru/post/pt460409/


All Articles