Shield LCD 16x2 com Keypad (Exemplo)
Prof. Epaminondas Lage

Introdução

Este é um exemplo de tutorial para a montagem de um Shield compatível com o Arduino.

Shield LCD 16×2, também conhecido como O nosso código, tem a função de exibir um menu de navegação que através do botão SELECT proporciona a escolha de uma das opções apresentadas junto ao display.

Este shield possui um display LCD 16x2 com backlight (luz de fundo) azul, e 5 botões customizáveis, além de um botão de reset do Arduino. O ajuste do contraste é feito pelo parafuso do trimpot/potenciômetro acima do display, à esquerda (em azul). Além disso, a placa possui furos para soldagem de barras de pinos, cuja função veremos a seguir.

Este shield possui um display LCD 16x2 com backlight (luz de fundo) azul, e 5 botões customizáveis, além de um botão de reset do Arduino. O ajuste do contraste é feito pelo parafuso do trimpot/potenciômetro acima do display, à esquerda (em azul). Além disso, a placa possui furos para soldagem de barras de pinos, cuja função veremos a seguir.

O shield utiliza alguns pinos diferentes dos que usamos normalmente nos projetos para ligar um LCD. Se na ligação de um LCD 16x2, como mencionado em outros tutoriais sobre o WH1602A. Nesse shield teremos que usar a seguinte sequência ao inicializar a biblioteca LiquidCrystal :

LiquidCrystal lcd(8,9,4,5,6,7);

Os botões do shield usam uma única porta analógica, A0. Repare na montagem abaixo que o shield usa uma associação de resistores para determinar qual botão foi pressionado, e com isso há uma grande economia de portas digitais do Arduino.

Isso tudo faz com que, obviamente, não possamos utilizar essas portas para outras funções enquanto estivermos utilizando o shield. Note no detalhe das imagens abaixo, que a placa possui furos que permitem a soldagem de uma barra de pinos ou conectores, com isso podemos usar os pinos que sobraram : 0, 1, 2, 3, 11, 12, 13 (digitais), e A1, A2, A3, A4, A5 (analógicos), além dos pinos de energia (5v, 3.3v, GND).

O pino 10 também é utilizado pela placa para uma função específica, no caso o backlight, e não deve ser utilizado nos programas.


Montagem

Circuito

Programa Arduino

/*O nosso código, tem a função de exibir um menu de navegação que através do botão SELECT proporciona a escolha de uma das opções apresentadas junto ao display.
Teclado e menu de opçoes com display shield e 4 posiçoes */

#include <LiquidCrystal.h> // Inclui biblioteca "LiquidCristal.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Define Pinos do Display

int Menu = 0; // Inicializa valores para Menu
int estado = 0; // Inicializa valores para estado

void setup() {
lcd.begin(16, 2); // Estabelece caracteres do display
clearPrintTitle();
}

void loop() {
MenuPrincipal();
}

void MenuPrincipal() {
int ValEstado = 0; // Inicializa valores para ValEstado
int x = analogRead (0);
lcd.setCursor(0,0); // Posiciona Cursor

if (x < 80) { // Define valores máximos para UP em ValEstado = 1
}
else if (x < 200) {
ValEstado = 1;
}
else if (x < 400){ // Define valores máximos para Down em ValEstado = 2
ValEstado = 2;
}
else if (x < 600){ // Define ação nula para Left
}
else if (x < 800){ // Define valores máximos para Select em ValEstado = 3
ValEstado = 3;
}

if (Menu < 0 || Menu > 4) {
Menu = 0;
}

if (ValEstado != estado) {
if (ValEstado == 1) {
Menu = Menu - 1;
displayMenu(Menu);
} else if (ValEstado == 2) {
Menu = Menu + 1;
displayMenu(Menu);
} else if (ValEstado == 3) {
selectMenu(Menu);
}
estado = ValEstado;
}
delay(5);
}

void displayMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("Temperatura"); // Imprime na tela a opção do Menu
break;
case 2:
clearPrintTitle();
lcd.print ("Umidade"); // Imprime na tela a opção do Menu
break;
case 3:
clearPrintTitle();
lcd.print ("Senha"); // Imprime na tela a opção do Menu
break;
case 4:
clearPrintTitle();
lcd.print ("Alarm"); // Imprime na tela a opção do Menu
break;
}
}

void clearPrintTitle() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pe de Serra");
lcd.setCursor(0,1);
}

void selectMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("22 graus"); // Imprime na tela opção escolhida
break;
case 2:
clearPrintTitle();
lcd.print ("32 % Umid."); // Imprime na tela opção escolhida
break;
case 3:
clearPrintTitle();
lcd.print ("******"); // Imprime na tela opção escolhida
break;
case 4:
clearPrintTitle();
lcd.print ("Alarme ativado"); // Imprime na tela opção escolhida
break;
}
}

Conclusão

Uma montagem simples, mas que ilustra bem o funcionamento do Shield LCD 16×2 e suas aplicações práticas.

Referências

https://www.arduinoecia.com.br/2013/08/arduino-shield-lcd-16x2-com-keypad.html

http://blog.usinainfo.com.br/shield-lcd-16x2-lcd-keypad-shield-com-botoes-para-arduino/

http://www.instructables.com/id/Arduino-LCD-Keypad-Shield-1/



Administrado por: Epaminondas Lage