Como Utilizar o Shield Display 16×02 LCD com Teclado no Arduino
O LCD, ou display de cristal líquido, é uma tela de interface e comunicação visual comumente usado em aparelhos eletrônicos, como aparelhos domésticos, automóveis, dispositivos de jogos, instrumentos de medição, calculadoras e outros.
O Shield Display 16×02 LCD Keypad com Teclado (Figura 1) dispõe de um display 16 x 2 (16 colunas x 2 linhas), sendo capaz de exibir até 16 caracteres. Além disso, este Shield possui um teclado com 6 botões do tipo push-button, que podem nos mais diversos projetos.
A principal vantagem do uso do Shield Display 16×02 LCD Keypad com Teclado é que ele pode ser conectado diretamente no Arduino UNO, Duemilanove ou MEGA, não sendo necessário solda ou protoboard.
O teclado do Shield Display 16×02 LCD Keypad com Teclado é composto por 6 botões de comando – SELECT, LEFT, UP, DOWN e RIGHT, e um botão RESET.
Outro ponto positivo desse Shield que seu teclado utiliza apenas um canal ADC, economizando os recursos de entrada/saída digital. O valor da tecla é lido através de um divisor de tensão de 5 estágios, sendo possível detectar o botão pela porta ADC devido sua voltagem específica.
Agora que já conhecemos um pouco sobre o Shield, vamos aprender a usá-lo!
A proposta prática deste projeto será: Utilizar o Shield Display 16×02 LCD Keypad com Teclado em conjunto com o Arduino para exibir a mensagem “BLOG DA ROBOTICA” na primeira e “SHIELD DISPLAY” na segunda linha.
Além disso, o Shield deverá informar quando um botão pressionado, exibindo a mensagem “APERTOU O BOTAO” na primeira linha e a informação do botão na segunda linha.
MATERIAIS NECESSÁRIOS
1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
1 x Cabo USB;
1 x Shield Display 16×02 LCD Keypad com Teclado
ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES
Acople o Shield Display 16×02 LCD Keypad com Teclado ao Arduino, conforme a Figura 2.
ELABORANDO O CÓDIGO
Inicialmente, vamos entender a lógica de programação a partir dos seguintes passos:
1. Incluir a biblioteca LiquidCrystal:
A biblioteca LiquidCrystal permite que uma placa Arduino controle displays LCD baseados no controlador HD44780 ou compatível, usado em nosso Shield Display LCD. Essa biblioteca é nativa do Arduino IDE.
Para saber mais sobre a biblioteca acesse: www.arduino.cc/en/Reference/LiquidCrystal
2. Criar variável:
Vamos criar uma variável do tipo LiquidCrystal para indicar os pinos do display LCD que estão conectados ao Arduino. As variáveis e pinos do Arduino responsáveis pelo controle do display são:
Variável | Pino do Arduino |
rs | 8 |
en | 9 |
D4 | 4 |
D5 | 5 |
D6 | 6 |
D7 | 7 |
3. Função setup ():
Iniciamos a função setup () definindo o número de colunas e linhas do display LCD. Em seguida, passaremos a instrução para escrever “BLOG DA ROBOTICA” na primeira e “SHIELD DISPLAY” na segunda linha do display.
4. Funções para informar botão pressionado:
Vamos escrever uma função para cada botão do Shield Display LCD 16 x 2. A função deve ser chamada quando o seu botão correspondente for pressionado, por exemplo: Quando o botão “UP” for pressionado, a função up() será chamada.
5. Função loop ():
Na função principal, realizaremos a leitura dos botões através do pino analógico A0 do Arduino.
Cada botão possui um resistor com valor diferente, gerando um nível de tensão diferente na entrada do pino analógico A0. A partir desse valor, conseguimos identificar qual botão foi pressionado.
/* --- SHIELD DISPLAY 16 X 2 KEYPAD COM TECLADO --- ===================================================== ==== BLOG DA ROBOTICA - www.blogdarobotica.com ===== ===================================================== Autor: Carol Correia Viana E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica ===================================================== ==== CASA DA ROBOTICA - www.casadarobotica.com ==== ===================================================== Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica ===================================================== */ #include <LiquidCrystal.h> //Inclui a biblioteca const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;//Pinos para ligar o display LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//Define os pinos que serão usados para ligar o display void setup() { lcd.begin(16, 2);//Define o número de colunas e linhas do display lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("BLOG DA ROBOTICA"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" SHIELD DISPLAY "); Serial.begin(9600); } //Função para botão select void select() { lcd.clear(); lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("APERTOU O BOTAO"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" SELECT "); } //Função para botão left void left() { lcd.clear(); lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("APERTOU O BOTAO"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" LEFT "); } //Função para botão up void up() { lcd.clear(); lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("APERTOU O BOTAO"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" UP "); } //Função para botão down void down() { lcd.clear(); lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("APERTOU O BOTAO"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" DOWN "); } //Função para botão right void right() { lcd.clear(); lcd.setCursor(0, 0);//Define o cursor para a coluna 0, linha 0 lcd.print("APERTOU O BOTAO"); lcd.setCursor(0, 1);//Define o cursor para a coluna 0, linha 1 lcd.print(" RIGHT "); } void loop() { Serial.println(analogRead(0));//Exibe a leitura do pino analógico A0 no monitor serial delay(100); if ((analogRead(0)) < 80) { //Se a leitura for menor que 80 chama a função right right(); } else if ((analogRead(0)) < 200) {//Se a leitura for menor que 200 chama a função up up(); } else if ((analogRead(0)) < 400) {//Se a leitura for menor que 400 chama a função down down(); } else if ((analogRead(0)) < 600) {//Se a leitura for menor que 600 chama a função left left(); } else if ((analogRead(0)) < 800) {//Se a leitura for menor que 800 chama a função left select(); } }
Observação: Caso o display permaneça apenas com a luz de fundo acesa após o upload do código. Realize o ajuste do contraste girando no sentido horário o parafuso do trimpot azul. Utilize uma chave de fenda. Gire muitas e muitas vezes, rsrs.
Espero ter ajudado,
Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!
Att. Carol Correia Viana
Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.