top of page

Como utilizar um Teclado Matricial

  • Foto do escritor: automatelabonline
    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.

Esquema teclado matricial

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.

biblioteca keypad

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.

projeto teclado matricial arduino

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


bottom of page