Como utilizar um Teclado Matricial
- automatelabonline
- 5 de mar.
- 4 min de leitura
Os teclados matriciais são componentes amplamente utilizados em projetos de eletrônica, especialmente em sistemas que envolvem microcontroladores como o Arduino. Eles oferecem uma maneira eficiente de detectar múltiplas teclas com um número reduzido de pinos no microcontrolador. Isso é possível devido ao seu arranjo de linhas e colunas, onde cada tecla está associada a uma interseção específica entre uma linha e uma coluna.
No contexto do Arduino, um teclado matricial geralmente é composto por uma matriz de botões organizados em linhas e colunas. Ao pressionar uma tecla, o circuito fecha, permitindo que o Arduino detecte qual tecla foi pressionada através da leitura da linha e coluna correspondentes. Essa abordagem economiza pinos de entrada e facilita a implementação de sistemas interativos, como caixas de senha, controladores e painéis de controle, sem a necessidade de uma quantidade excessiva de fios.
Além disso, bibliotecas como a Keypad para Arduino simplificam a implementação de teclados matriciais, oferecendo uma interface de fácil uso para ler as entradas dos botões, permitindo que os desenvolvedores foquem na lógica do projeto sem se preocupar com a complexidade da detecção das teclas.
Como funcionam os Teclados Matriciais
O teclado matricial é composto por fios que cruzam a placa no sentido das linhas e colunas. Cada tecla é um botão que, ao ser pressionada, junta os fios da linha e coluna correspondente. Por exemplo, ao pressionar a tecla 2, a primeira linha e a segunda coluna estão em contato. Já ao pressionar a tecla C, a terceira linha e a quarta coluna estão em contato.
Para fazer a leitura, é medido o contato entre linhas e colunas para identificar qual tecla está sendo pressionada. Por exemplo, se for percebido o contato entre a linha 4 e a coluna 2, sabe-se que a tecla 0 foi apertada.

Projeto - Lendo um Teclado Matricial
Para ler um teclado matricial utilizando o Arduino Uno, vamos utilizar a biblioteca Keypad. Para instalá-la, basta abrir a aba de bibliotecas no Arduino IDE, e buscar por Keypad, como mostra a imagem abaixo. Caso você esteja usando a versão 1 do Arduino IDE, vá para o menu superior e clique em Ferramentas -> Gerenciar Bibliotecas que uma janela será aberta, nela, pesquise por Keypad. O Github da biblioteca pode ser acessado por esse link.

Uma vez instalado, basta conectar o teclado ao Arduino conforme imagem abaixo. Os quatro primeiros pinos do teclado (conectados aos pinos 10, 11, 12 e 13 do Arduino) correspondem às linhas do teclado matricial. Já os 4 últimos (conectados aos pinos 6, 7, 8 e 9 do Arduino) correspondem às colunas.

Abaixo está o código do projeto.
#include <Keypad.h>
#define NUM_LINES 4 // define o número de linhas
#define NUM_COLUMNS 4 // define o número de colunas
const char KEYS[NUM_LINES][NUM_COLUMNS] = { // cria a matriz de caracteres
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
const byte PINS_LINES[NUM_LINES] = {13, 12, 11, 10}; // pinos das linhas
const byte PINS_COLUMNS[NUM_COLUMNS] = {9, 8, 7, 6}; // pinos das colunas
Keypad keypad = Keypad(makeKeymap(KEYS), PINS_LINES, PINS_COLUMNS, NUM_LINES, NUM_COLUMNS); // cria o teclado
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); // lê o teclado
if (key) {
Serial.println(key);
}
}
Entendendo o Código
Logo no inicio, são definidos os números de linhas e colunas, assim como a matriz de caracteres que cada tecla representará (keymap ).
#define NUM_LINES 4 // define o número de linhas
#define NUM_COLUMNS 4 // define o número de colunas
const char KEYS[NUM_LINES][NUM_COLUMNS] = { // cria a matriz de caracteres
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Mais abaixo, os pinos de linhas e colunas são definidos. Caso você utilize pinos diferentes, basta alterar essa parte do código.
const byte PINS_LINES[NUM_LINES] = {13, 12, 11, 10}; // pinos das linhas
const byte PINS_COLUMNS[NUM_COLUMNS] = {9, 8, 7, 6}; // pinos das colunas
Então, é criado o objeto do teclado, passando como parâmetros o keymap, os pinos e número de linhas e colunas.
Keypad keypad = Keypad(makeKeymap(KEYS), PINS_LINES, PINS_COLUMNS, NUM_LINES, NUM_COLUMNS); // cria o teclado
Na função loop(), o teclado é lido pela função getKey(). Quando há alguma tecla pressionada, seu caractere correspondente é escrito na Serial.
char key = keypad.getKey(); // lê o teclado
if (key) {
Serial.println(key);
}
Funções adicionais da Biblioteca
A biblioteca Keypad pode ser explorada pelo seu repositório. Seguem algumas funções úteis para utilização.
Detectando o Pressionamento de uma Tecla
A função getKey() retorna um char, que indica qual tecla foi pressionada. A função retorna vazio caso nenhuma tecla foi pressionada.
char getKey();
Detectando os Pressionamentos de Teclas
A função getKeys() retorna um booleano, que indica se alguma tecla foi pressionada ou solta.
bool getKeys();
Detectando o Pressionamento de uma Tecla Específica
A função isPressed() detecta se uma tecla específica foi pressionada. O caractere da tecla deve ser passado como parâmetro, e a função retorna um booleano indicando o estado da tecla. Vale ressaltar que essa função não atualiza os estados das teclas, sendo necessário chamar a função ketKeys() ou getKey() antes.
bool isPressed(char keyChar);
Esperar até uma Tecla ser Pressionada
A função waitForKey() interrompe a execução do código até que alguma tecla for pressionada. Essa função retorna o caractere da tecla que foi apertada.
char waitForKey();
Adicionando um Evento para as Teclas
A função addEventListener() adiciona uma função que será chamada quando alguma tecla foi pressionada. Porém, assim como a função isPressed() ela necessita que o comando getKeys() ou getKey() seja chamada para atualizar os estados das teclas. Como parâmetro dessa função será passado um objeto KeypadEvent key, contendo o caractere da tecla pressionada.
void addEventListener(void (*listener)(char));
Implementando Debounce nas Teclas
É possível implementar um debounce nas teclas utilizando a função setDebounceTime(). Um debounce é o tempo de espera que o microcontrolador irá esperar para aceitar novos pulsos. As vezes, pode ocorrer de, ao clicar em alguma tecla, o sinal ser enviado duas ou mais vezes muito rapidamente, fazendo o Arduino entender que a tecla foi pressionada mais de uma vez. Implementar o debounce elimina esse problema.
void setDebounceTime(uint debounce);
Conclusão
Em conclusão, a utilização de teclados matriciais com Arduino oferece uma solução prática e eficaz para a criação de interfaces de entrada em projetos eletrônicos. Sua implementação permite a interação com sistemas de maneira simples e acessível, com uma quantidade mínima de pinos de entrada no microcontrolador, o que torna possível o desenvolvimento de projetos compactos e funcionais.
Comments