Arduino - Teclado

O teclado é muito usado em vários dispositivos, como fechaduras de porta, caixas eletrônicos, calculadoras...

Neste tutorial, vamos aprender:

Sobre o Teclado

Teclado

O teclado é um conjunto de botões organizados em linhas e colunas (chamado de matriz). Cada botão é chamado de tecla

Existem vários tipos de teclado. Dois tipos populares para projetos DIY são o teclado 3x4 (12 teclas) e o teclado 4x4 (16 teclas).

Pinagem

Os pinos do teclado são divididos em dois grupos: linha e coluna.

O teclado 3x4 tem 7 pinos: 4 pinos de linha (R1, R2, R3, R4) e 3 pinos de coluna (C1, C2, C3).

O teclado 4x4 tem 8 pinos: 4 pinos de linha (R1, R2, R3, R4) e 4 pinos de coluna (C1, C2, C3, C4).

Pinagem do Teclado

Como Funciona

Esta seção traz um conhecimento mais aprofundado. NÃO se preocupe se você não entender. Pule esta seção se ela parecer difícil demais e volte outro dia. Continue lendo as próximas seções.

O processo de detectar o pressionamento de uma tecla é chamado de varredura do teclado.

Ele é chamado de “varredura” porque verifica tecla por tecla.

Os pinos de linha são conectados aos pinos de saída do Arduino

Os pinos de coluna são conectados aos pinos de entrada do Arduino (INPUT_PULLUP; nesse estado, o valor do pino de entrada é HIGH se a tecla não estiver pressionada).

Para cada linha:

  • Coloca todos os pinos de linha em HIGH.
  • Coloca apenas o pino da linha atual em LOW.
  • Lê o estado de cada coluna.
    • Se um pino de coluna estiver em HIGH ⇒ a tecla em (linha, coluna) NÃO está pressionada.
    • Se um pino de coluna estiver em LOW ⇒ a tecla em (linha, coluna) está pressionada.
  • Repete o processo acima para os próximos pinos de linha.

※ Nota:

O método acima é um dos métodos para fazer a varredura do teclado. Podemos inverter todos os HIGH para LOW e todos os LOW para HIGH para fazer a varredura do teclado.

Por que o teclado é organizado e conectado como uma matriz? Isso torna o processo de varredura complicado. Por que não usar cada tecla como um botão independente, para que o estado da tecla seja determinado simplesmente lendo o estado de um botão?

⇒ Como sabemos, um botão independente precisa de um pino do Arduino e do GND. Vamos usar o teclado 4x4 como exemplo. Se usarmos cada tecla como um botão independente, serão necessários 16 pinos do Arduino para as 16 teclas, mais o pino GND. Se organizarmos as teclas conectadas em forma de matriz, só precisamos usar 8 pinos do Arduino, e assim economizamos pinos do Arduino. Resumindo, a resposta é: para economizar os pinos do Arduino.

Diagrama de Ligação

Diagrama de Ligação do Arduino com Teclado

This image is created using Fritzing. Click to enlarge image

Como Programar o Teclado

Graças à biblioteca Keypad, usar o teclado com o Arduino é muito fácil, quer você entenda ou não como o teclado funciona.

Código Arduino

Teclado 3x4

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

Teclado 4x4

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

Passos Rápidos

  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “keypad” e encontre a biblioteca keypad de Mark Stanley, Alexander Brevig
  • Clique no botão Install para instalar a biblioteca keypad.
Biblioteca keypad para Arduino
  • Copie o código acima e abra com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Abra o Serial Monitor
  • Pressione algumas teclas no teclado
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
3 6 9 4 * #
Ln 11, Col 1
Arduino Uno on COM15
2

Teclado e Senha

Uma aplicação popular do teclado é a entrada de senha. Nessa aplicação, definimos duas teclas especiais:

  • Uma tecla para iniciar/reiniciar a entrada da senha. Por exemplo, a tecla "*"
  • Uma tecla para finalizar a entrada da senha. Por exemplo, a tecla "#"

A senha será uma string que contém as demais teclas, exceto as duas teclas especiais escolhidas.

Quando uma tecla é pressionada:

  • Se a tecla NÃO for nem "*" nem "#", adicione a tecla à string da senha digitada pelo usuário.
  • Se a tecla for "#", compare a string da senha digitada pelo usuário com a senha para saber se a senha digitada está correta ou não e, em seguida, limpe a string da senha digitada pelo usuário
  • Se a tecla for "*", limpe a string da senha digitada pelo usuário

Teclado - Código de Senha

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-keypad */ #include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password = "1234"; // change your password here String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // clear input password } else if(key == '#') { if(password == input_password) { Serial.println("password is correct"); // DO YOUR WORK HERE } else { Serial.println("password is incorrect, try again"); } input_password = ""; // clear input password } else { input_password += key; // append new character to input password string } } }
  • Execute o código acima
  • Abra o Serial Monitor
  • Pressione as teclas "123456" e pressione "#"
  • Pressione as teclas "1234" e pressione "#"
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
password is incorrect, try again password is correct
Ln 11, Col 1
Arduino Uno on COM15
2

Vídeo

Desafie-se

  • Mostre a tecla pressionada do teclado em um LCD. Dica: Consulte Arduino - LCD
  • Faça uma fechadura de porta com proteção por senha usando o teclado.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!