Você está na página 1de 18

Anúncios Google

Arduino keypad lcd

Arduino software

Lcd shield

16x2 display lcd

27 agosto 2013

Shield LCD 16x2 com Keypad


O shield LCD 16x2 com Keypad (teclado) é um componente útil se quisermos montar algum tipo
de painel que necessite de entrada de dados ou controle por meio de botões. Pode ser utilizado
para digitar uma senha, selecionar uma opção em um menu ou até mesmo controlar os passos de
um robô. As aplicações são diversas e você pode adquirir o seu diretamente na Loja FILIPEFLOP.

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 em breve.

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 no artigo Display Lcd Winstar WH1602A,
eu tenho total liberdade para trocar as portas ligadas ao display, nesse shield teremos que usar a
seguinte sequência ao inicializar a biblioteca LiquidCrystal :

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

Desta forma, temos a seguinte relação entre os pinos do Arduino e os sinais do display :

Os botões do shield usam uma única porta analógica, A0. Repare na ilustração 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. 
Para o programa de teste, não é necessário o uso de nenhuma biblioteca especial. Usaremos a já
conhecida LiquidCrystal, e para determinar qual botão foi pressionado, faremos a leitura da porta
analógica A0 :

1 // Programa : Teste LCD 16x2 com Keypad


2 // Autor : Arduino e Cia
3
4 #include <LiquidCrystal.h>
5
6 LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
7
8 void setup()
9 {
10 lcd.begin(16, 2);
11 lcd.setCursor(0,0);
12 lcd.print("Arduino e Cia");
13 lcd.setCursor(0,1);
14 lcd.print("Tecla :");
15 }
16
17 void loop()
18 {
19 int botao;
20 botao = analogRead (0); //Leitura do valor da porta analógica A0
21 lcd.setCursor(8,1);
22 if (botao < 100) {
23 lcd.print ("Direita ");
24 }
25 else if (botao < 200) {
26 lcd.print ("Cima ");
27 }
28 else if (botao < 400){
29 lcd.print ("Baixo ");
30 }
31 else if (botao < 600){
32 lcd.print ("Esquerda");
33 }
34 else if (botao < 800){
35 lcd.print ("Select ");
36 }
37 }

Arduino e Cia às 22:55

Compartilhar

72 comentários:

Anônimo 6 de novembro de 2013 00:49


No LCD quando eu aperto pra cima aparece -Direita-, o que está errado?
Responder

Respostas

Arduino e Cia 6 de novembro de 2013 08:47


Bom dia. Provavelmente alguma ligação está invertida. O que acontece quando vc aperta a
tecla da direita ? O que aparece ? Abraço.

Ricardo Queiroz 3 de novembro de 2016 12:23


diminua o valor de 100 para 80 que funciona

João Antonio rj 3 de dezembro de 2017 15:48


isso e devido a oxidacao dos contatos internos das teclas.pode ser usado limpa contato.na
maioria dos casos resolve o bug

Marcelo M. Rocha 18 de junho de 2018 14:38


Melhor verificar primeiro o que cada botão produz na entrada analógica A0. Tomar nota, e
depois ajustar os limites conforme.

Responder

Anônimo 6 de novembro de 2013 20:17


A ligação do LCD eu coloquei encaixado direto em cima do arduino UNO R3. Quando eu aperto pra
cima aparece -direita- e quando eu aperto o botão da direita aparece -direita- mesmo, só o botão pra
cima que está dando errado, muito esquisito, não vejo sentido, e testei com dois LCDs novinhos do
modelo LCD1602 e deu a mesma coisa, esquisito isso, abraço!
Responder

Respostas

Arduino e Cia 6 de novembro de 2013 21:42


Esquisito mesmo. O modelo do seu LCD é igual ao do post ?

Jean R. 1 de março de 2016 14:27


Isso acontece comigo tbm usando a shield Lcd idêntico a esse da foto

Bela 30 de novembro de 2016 14:50


diminua o valor de 100 para 80 que funciona

Unknown 4 de dezembro de 2016 21:33


isso é um efeito de debouncing

skorek 21 de junho de 2017 23:14


O meu eu recebo o sinal dos botões mas não aparece nem uma letra se quer no display

Unknown 10 de setembro de 2017 14:14


Olá vc tentou ajustar o contraste da tela pois, se ele não tiver ajustado somente vai
aparecer a luz de fundo

Jonathan Rachadel 10 de setembro de 2017 14:15


Olá vc tentou verificar o contraste da tela pois, se não tiver ajustado vai aparecer somente a
luz de fundo.

Responder

Anônimo 7 de novembro de 2013 01:23


Sim, exatamente igual.
Responder

Respostas

Arduino e Cia 8 de novembro de 2013 23:31


Entendi. Pode estar ocorrendo alguma diferença de valor nos resistores internos. O ideal
seria você ir alterando o programa até achar o valor ideal para o seu display. Tente alterar
esse valor de "200" nessa parte do programa :

else if (botao < 200) {


lcd.print ("Cima ");
}
Abraço.

Anônimo 29 de janeiro de 2015 01:22


Fui tentar aqui e tbm deu este mesmo problema: a tecla de cima aparece ''direita''.

Arduino e Cia 2 de fevereiro de 2015 14:34


Boa tarde,

Tente alterar o valor do resistor, conforme eu mostrei acima.

Abraço !

Alceu 30 de abril de 2015 20:19


diminua o 100 para 95 ou menos

if (botao < 100) {


lcd.print ("Direita ");

Jean R. 1 de março de 2016 14:30


fiz isso e deu certinho , alterei o valor de 100 para 95 .vlw

Unknown 13 de setembro de 2016 10:39


Galera, pelo fato de estar utilizando uma porta analógica, no caso A0, o que determina a
valor, é a diferença de resistência. Nesse caso, quando os microbotoes ficam um tempo
parados, eles acabam criando uma película de oxidação, fazendo com que a a resistência
se altere. Há 3 maneiras de resolver.
1. Limpa contatos. Esse produto remove a película e oxidação.
2. Alterar o valor no sketch: funciona mas não é recomendável, tendo em vista que você
está apenas se adaptando ao problema e não resolvendo, a resistência da oxidação varia
com o tempo e você sempre terá que alterar o sketch.
3. substitua os microswitches por outros, dê preferência que venham novos e bem
condicionadas, essa é a prática correta.
Vale lembrar que quando falamos de microcontroladores, não devemos pensar apenas
como programadores, mas temos que ter uma visão da hardware, principalmente.
Abraços.

Responder

tremendeiro 10 de dezembro de 2013 10:56


Cara tenho o display ele funciona tudo certinho
mais pra trocar de tela eu tenho que fica com o botao apertado , e eu soltar ele some
alguem sabe o que e ?
Responder

Respostas

Arduino e Cia 11 de dezembro de 2013 11:24


Bom dia Tremendeiro. O que você quer dizer com "trocar de tela", e qual tecla você tem que
manter apertada ? Abraço.

Responder

Jose Tapparo 2 de janeiro de 2014 23:44


Boa noite amigo
tenho um lcd keypad shield igual a sua, comprada no dx. estava pesquisando sobre ela e achei uma
discussão que fiquei em duvida, você sabe algo sobre esse defeito da shield?

http://forum.arduino.cc/index.php?PHPSESSID=vo7ar5ar8rajnlpg55keonqng2&topic=96747.0
Responder

Respostas

Arduino e Cia 6 de janeiro de 2014 17:57


Boa tarde José. Sim, eu já tinha visto isso, inclusive no artigo eu menciono que o pino 10
não deve ser utilizado. Abraço !

Responder

Anônimo 24 de julho de 2014 04:01


O meu não faz absolutamente nada, tentei mudar as portas e nada! Conecto ele sobre o arduino
mega 2560 ele liga mas não tem mensagem nenhuma, fica somente umas barras como se ele
estivesse carregado. sabe o que é?
abracos
Responder

Respostas

Arduino e Cia 28 de julho de 2014 15:26


Boa tarde,

Por ser um shield, não tem muita coisa que se possa mexer em termos de pinos. Você
consegue testar esse LCD em um Arduino Uno ?

Abraço !
Responder

Anônimo 26 de agosto de 2014 10:32


Precisa usar fios para conectar o LCD no arduino? Ou é só juntar os 2 e já posso fazer a
programação?
Responder

Respostas

Arduino e Cia 26 de agosto de 2014 13:02


Boa tarde,

Não precisa de fios. Esse LCD é um shield. Basta encaixar no Arduino e seguir com a
programação.

Abraço !

Responder

Anônimo 16 de novembro de 2014 09:01


bom dia.

Alguém sabe me informar aonde consigo a biblioteca LiquidCrystal.h?


Grato.
Responder

Respostas

Arduino e Cia 18 de novembro de 2014 09:14


Bom dia,

A LiquidCrystal já está inclusa na IDE do Arduino.

Abraço !

Responder

Kalmmon Barbosa Nunes 18 de dezembro de 2014 23:55


Fiz o seguinte código no entanto as leituras ficam estáticas alguma dica ?

#include
#include
#include
DS1307 rtc(A14, A15);
#define DHTPIN A8
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
byte grau[8] ={ B00001100,
B00010010,
B00010010,
B00001100,
B00000000,
B00000000,
B00000000,
B00000000,};

void setup()
{
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Kalmmon");
lcd.setCursor(0,1);
lcd.print("Tecla :");
rtc.halt(false);
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
lcd.createChar(0, grau);
}

void loop()
{
int botao;
botao = analogRead (0); //Leitura do valor a porta analógica A0
lcd.setCursor(8,1);
if (botao < 100) {
lcd.clear(); //Limpa o LCD
lcd.setCursor(0,0);
lcd.print("Hora : ");
lcd.print(" ");
lcd.print(rtc.getTimeStr());
lcd.setCursor(0,1);
lcd.print("Data : ");
lcd.print(" ");
lcd.print(rtc.getDateStr(FORMAT_SHORT));
lcd.print(" ");
lcd.println(rtc.getDOWStr(FORMAT_SHORT));

}
else if (botao < 200) {
lcd.print ("Cima ");
}
else if (botao < 400){
lcd.print ("Baixo ");
}
else if (botao < 600){
lcd.clear(); //Limpa o LCD
float h = dht.readHumidity(); //Le o valor da umidade
float t = dht.readTemperature(); //Le o valor da temperatura
lcd.setCursor(0,0);
lcd.print("Temp : ");
lcd.print(" ");
lcd.setCursor(7,0);
lcd.print(t,1);
lcd.setCursor(12,0);

//Mostra o simbolo do grau formado pelo array


lcd.write((byte)0);

//Mostra o simbolo do grau quadrado


//lcd.print((char)223);

lcd.setCursor(0,1);
lcd.print("Umid : ");
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(h,1);
lcd.setCursor(12,1);
lcd.print("%");
}
else if (botao < 800){
lcd.print ("Select ");
}

}
Responder

Respostas

Arduino e Cia 19 de dezembro de 2014 20:12


Boa noite Kalmmon,

Ele não atualiza nada ? Tente separar o programa em partes menores, testando cada
componente de forma isolada, para ver qual dele está interferindo no funcionamento.

Abraço !

Responder

Adilson 31 de janeiro de 2015 23:36


Pessoal, copiei o sketch do tutorial acima e esta dando ERROR COMPILING:

C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp: In member function 'int


I2CIO::begin(uint8_t)':
C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp:61: error: 'Wire' was not
declared in this scope
C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp: In member function 'uint8_t
I2CIO::read()':
C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp:117: error: 'Wire' was not
declared in this scope
C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp: In member function 'int
I2CIO::write(uint8_t)':
C:\Users\servicos\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp:140: error: 'Wire' was not
declared in this scope

Alguem sabe o que pode ser?


Responder

Respostas

Arduino e Cia 2 de fevereiro de 2015 15:25


Boa tarde Adilson,

Essa biblioteca que você está usando é a da I2C. Tente usar a biblioteca LiquidCrystal que
ja vem com o Arduino.

Abraço !

Responder

Daniel rodrigues 21 de abril de 2015 18:58


Olá , como faço para desligar a luz de funda shield??
Responder

Respostas

Arduino e Cia 1 de maio de 2015 16:32


Boa tarde Daniel,

Estou sem o display aqui no momento, mas vou pesquisar e atualizar o post.

Abraço !

Anônimo 31 de dezembro de 2016 00:52


PinMode (10 ,OUTPUT);

digitalRead (10, LOW);

Responder
Anônimo 6 de maio de 2015 12:20
BOA TARDE, o comando '>' faz ir para direita e certamente '<' para esquerda como faço para parar ?
Responder

Arduino e Cia 6 de maio de 2015 14:29


Boa tarde,

você pode configurar a tecla SELECT para fazer isso ou ainda programar as teclas '>' e '<' para
funcionarem somente enquanto o botão estiver sendo pressionado.

Abraço !
Responder

Unknown 15 de junho de 2015 03:08


Olá amigos!

Meu nome é Vinicius gostaria de saber se consigo utilizar o controle de motor L298N junto com esse
shield?
A ideia é controlar o giro e a direção motor pelos botoes do lcd e exibir o numero de voltas do motor
no display.

É possivel isso?

Abraco a todos!
Responder

Respostas

Arduino e Cia 15 de junho de 2015 21:39


Boa noite Vinicius,

Consegue sim, solde uma barra de pinos no display, como eu mostro no post, e utilize as
portas restantes para acionar o L298N.

Abraço !

Responder

Wyllian Carlos 31 de agosto de 2015 10:12


Bom dia amigo eu tenho um shield desse toda vez que conecto ele no arduino mega o arduino para
de funcionar e perde a conexão com o notebook.
O que pode estar acontecendo?
Responder
Respostas

Arduino e Cia 4 de setembro de 2015 16:36


Boa tarde Wyllian,

Me parece algum tipo de curto no shield. Você consegue testar com um Arduino Uno ?

Abraço!

Ricardo Queiroz 3 de novembro de 2016 12:24


também uso no mega funciona normalmente, verifique se a solda não esta fechando curto
no conector usb, pois fica bem próximo!!!

Responder

Alexandre 2 de novembro de 2015 10:38


Os pinos deste shield D0 a D7 são para quê?
Responder

Respostas

Arduino e Cia 2 de novembro de 2015 10:42


Bom dia Alexandre,

O Shield usa os pinos de 4 a 9 para se comunicar com o display. Teoricamente, o restante


está "livre" para ser usado como portas de entrada/saída comuns.

Abraço!

Responder

Anônimo 26 de janeiro de 2016 15:29


olá existe alguma forma de programa em assembly, estudo sistemas de informação e o professor
pediu pra que fosse em assmbly
Responder

João Cláudio Caleffi 23 de fevereiro de 2016 13:33


Boa tarde. Gostaria de fazer um contador que, ao atingir determinada contagem, desligue um motor.
Como faço para alterar uma variável via teclado do display? Exemplo: Pressiona Select para habilitar
o ajuste através de Up e Down. Pressiona Select novamente grava na variável.
Responder
Gustavo Arcodepani 27 de setembro de 2016 23:52
Boa noite, tenho a mesma placa utilizada no exemplo e upei o código fornecido. Entretanto, meu LCD
está inteiro azul, não mostra nada nem mesmo um caractere quadrado. Alguém teve o mesmo
problema e conseguiu solucionar??
Responder

Respostas

Arduino e Cia 28 de setembro de 2016 12:04


Oi Gustavo,

Você chegou a regular o contraste usando o potenciômetro da placa ?

Abraço!

Gustavo Arcodepani 29 de setembro de 2016 18:47


Ainda não, como faço isso??

Gustavo Arcodepani 3 de outubro de 2016 21:56


Boa noite, consegui resolver o problema, era isso mesmo, não sabia que a placa tinha um
potenciômetro digital. Regulei ele com uma pequena chave de fendas e funcionou
perfeitamente. Obrigado!!

Anderson 21 de outubro de 2016 16:14


Boa tarde.
Tambem estou com este problema. Não aparece o texto. Já tentei regular utilizando o
potenciômetro da placa. Mas não mudou nada.

Selton Cwb 31 de outubro de 2016 22:15


Tenho o mesmo problema, a shield é nova, o arduino, uno, também. o display acende, o
programa compila e carrega sem erros, mas não acontece nada, aperto nos botões e
nada!!! precisa usar uma biblioteca especial para este display???

Elson Dantas 9 de novembro de 2016 21:05


Também estou com o mesmo problema, comprei o kit na Santa Efigenia (SP) e me
venderam um paralelo sem eu perceber. Tem alguma relação entre isso e o LCD não
funcionar? lembrando que o Arduino está funcionando normalmente

Eduardo Puga 7 de abril de 2017 19:42


Conseguiram resolver o problema, também acontece o mesmo comigo
Responder

Anônimo 12 de outubro de 2016 04:04


To com o mesmo problema do Gustavo...
Minha tela acende mas não aparece nenhum caracter, quadrado ou nada.. só acende a luz de fundo e
o led vermelhor do Power.
Responder

Ivan Augusto 2 de janeiro de 2017 18:23


Estou usando essa montagem e mais os pinos 11, 12, 13, 5V e 2 GND para controlar um motor de
passo, um pedal de acionamento e um relé para uma válvula. Estou com um problema bem estranho,
tudo funciona perfeitamente mas depois de algum tempo começam a aparecer caracteres estranhos
e sou obrigado a apertar o botão reset. Alguém tem alguma ideia???
Responder

Anônimo 4 de janeiro de 2017 21:52


Boa noite, meu programa esta funcionando corretamente, mas quando o LCD liga e aperto um push
button na protoboard ele se apaga a cada click, alguma sujestão?
Responder

Respostas

Arduino e Cia 6 de janeiro de 2017 18:11


Boa noite,

Quando vc fala push button na protoboard você está falando dos botões do shield, ou vc
fez uma ligação externa?

Abraço!

Anônimo 8 de janeiro de 2017 12:49


fiz uma ligação externa, abraços!

Responder

Anônimo 6 de fevereiro de 2017 22:48


Boa noite, pode conectar o shield em portas diferentes da A0, A1.... etc?
Responder

Respostas
Arduino e Cia 11 de fevereiro de 2017 10:02
Bom dia,

Você pode fazer algumas alterações de hardware para isso, já que ele usa normalmente as
portas digitais e analógicas.

Abraço!

Responder

Unknown 15 de março de 2017 19:23


Boa noite Galera,
Da pra controlar a intensidade do backlight apenas tratando a Porta 10 como saída analógica.
Ex: analogWrite(10,50);
Responder

Respostas

Arduino e Cia 6 de junho de 2017 12:33


Opa, obrigado pela dica. ;)

Abraço!

Adilson

Responder

Anônimo 6 de junho de 2017 08:04


Bom dia, fiz todo o procedimento corretamente, porem no display aparece somente uns quadrados
brancos na primeira linha. Pode ser problema na placa?!
Responder

Respostas

Arduino e Cia 6 de junho de 2017 12:34


Boa tarde,

Pode ser, mas pode ser também algum problema de conexão, configuração dos pinos, etc.
Pela sua descrição, vc já mexeu no ajuste do potenciômetro, correto ?

Abraço!

Adilson

Responder
Anônimo 8 de novembro de 2017 01:42
Bom dia, estou com esse display com shield tentando fazer um leitor de ruídos igual o que você fez
em outro post com um display diferente, estou usando o mesmo código alterando apenas os pinos
de entrada para o display a porta analógica para o modulo de som que estou usando A2, porem ele
não esta variando as leituras de baixo, média e alta, o que pode ser? obrigado
Responder

Unknown 13 de março de 2018 01:41


Como faço para utilizar outros botoes ao invés dos que vieram no lcd keypad? Quero colocar botoes
em uma caixinha em ABS.
Responder

Respostas

Arduino e Cia 23 de março de 2018 18:10


Boa tarde,

No shield tem espaço para você soldar uma barra de pinos para ter acesso tantos aos
pinos digitais como analógicos. Soldando uma barra desses, você consegue adicionar
mais botões ao seu projeto.

Abraço!

Adilson

Responder

Unknown 20 de maio de 2018 14:07


Oii, eu conectei no arduino uno, tudo direitinho, mas o display fica só aparecendo umas barras como
se tivesse carregando, sabe oq pode ser??
Responder

Cleyton 28 de junho de 2018 10:03


Olá, sou iniciante, vejo que se apertar dois botões juntos e poderá mostrar uma terceira mensagem.
Teria um código para para mostrar a mensagem de cada botão com intervalo de tempo entre as
mensagens?
Responder
Digite seu comentário...

Comentar como: Conta do Googl

Publicar Visualizar

‹ Página inicial ›
Visualizar versão para a web
Pesquise neste blog :

Pesquisar
Custom Search