Conhecendo a Biblioteca LiquidCrystal

Neste post vamos explorar as funções do Display LCD 16×2 utilizando como base a Biblioteca LiquidCrystal Display. Primeiramente vamos entender porque o display LCD 16×2 possui este nome. Ele é um Display de Cristal Líquido de 16 colunas e 2 linhas. Nosso display possui LED backlight (com uma iluminação de fundo) para facilitar as leituras no escuro. O display LCD 16×2 e os demais componentes utilizados neste tutorial você encontra em nossa loja Baú da Eletrônica.

A biblioteca LiquidCrystal é a chave para usar facilmente LCDs com Arduino. O que mais interessante é que ela vem pré-instalada com o software Arduino – assim você não precisa baixar nada especial para utilizá-la.

A biblioteca é cheia de funções uteis, desde funções para a rolagem de texto até piscar a tela do LCD. Neste tutorial você vai descobrir rapidamente que a compreensão de como o cursor funciona é vital para controlar o display corretamente.

Biblioteca LiquidCrystal
Figura 1 – Biblioteca LiquidCrystal

 

Neste Tutorial

– Encontre tudo que você precisa para usar a Biblioteca LiquidCrystal;
– Aprenda como implementar a Biblioteca LiquidCrystal em seus programas de Arduino;
– Entenda como o texto é exibido no LCD;
– Compreenda o funcionamento do cursor;
– Saiba como deslocar um texto na tela do display;
– Como ligar e desligar o visor com através do código fonte.

Pinagem do Display LCD 16×2

Display LCD 16×2
Figura 2 – Display LCD 16×2

Veja a seguir quais são os pinos do Display LCD 16×2 e suas respectivas funções:

PinoFunçãoDescrição
1Alimentação GND
2Alimentação VCC
3V0 Pino para ajuste do contraste
4RS 1 = Dado, 0 = Instrução
5R/W 1 = Leitura, 0 = Escrita
6E (Chip select) 1 = Habilita, 0 = Desabilita
7B0Pino de dados(bit mais significativo)
8B1Pino de dados
9B2Pino de dados
10B3Pino de dados
11B4Pino de dados
12B5Pino de dados
13B6Pino de dados
14B7Pino de dados
15A Ânodo do LED de backlight
16K Cátodo do LED de backlight

Para nossos testes e simulações vamos precisar dos seguintes componentes:

Materiais Necessários

1 Unidade – Protoboard 830 pontos

1 Unidade – Potenciômetro Linear de 1K

1 Unidade – Display LCD 16×2

1 Unidade –  Arduino Uno

1 Unidade – Resistor 300R 5% (1/4W)

1 Unidade – Jumper Macho Macho

Circuito Arduino com Display LCD 16×2
Figura 3 – Circuito Arduino com Display LCD 16×2

O contraste vamos ajustar através do potenciômetro que está ligado ao pino V0 e a iluminação de fundo é feita por um LED que é ligado através dos pinos 15 e 16 e a corrente de alimentação deste led varia de 100 a 200mA.  O ideal é utilizar um resistor em série para limitar a corrente ou um potenciômetro para ajustar a luminosidade. No nosso caso vamos utilizar um resistor de 300R.

Conhecendo a Biblioteca LiquidCrystal

No site do Arduino existe a página de referência – este é o lugar onde todas as funções são explicadas em detalhe. Todas as bibliotecas possuem páginas de referência, e da Biblioteca LiquidCrystal não é diferente.

Confira aqui: http://arduino.cc/en/Reference/LiquidCrystal

Nessa página você vai encontrar todas as funções disponíveis na lista, cada uma com um hiperlink para uma página que descreve os parâmetros de cada uma. Você pode achar que os parâmetros não são suficientes para explicar o “conceito” das funções – por esse motivo é o que eu vou fazer o meu melhor para explicar aqui.

Você pode abrir os sketches de exemplo diretamente em seu IDE Arduino indo até Arquivo> Exemplos> LiquidCrystal.

IDE arduino
Figura 4 – IDE arduino

Abaixo estão listados os comandos para LCD fornecidos pela biblioteca LiquidCrystal Display

Comandos para LCD

Comandos para o LCD
FunçãoSintaxe no programaDescrição
LiquidCrystal()LiquidCrystal(rs, enable, d4, d5, d6, d7)Indica como os pinos do display estão interligados na placa Arduino
begin()lcd.begin(colunas, linhas)Configura o modelo do display em nosso caso 16×2
clear()lcd.clear()Limpa o display e posiciona o cursor no canto superior esquerdo do display
home()lcd.home()Posiciona o cursor no canto superior esquerdo do display
setCursor()lcd.setCursor(coluna, linha)Posiciona o cursor na linha e coluna indicada no comando
write()lcd.write(caractere)Escreve um caractere no display
print()lcd.print(dado)Escreve um dado qualquer no display (texto ou número)
cursor()lcd.cursor()Exibe o cursor na tela do LCD no formato de um undeline
noCursor()lcd.noCursor()Oculta o cursor
blink()lcd.blink()Faz com que o cursor fique piscante na tela do Arduino
noBlink()noBlink()Faz com que o display pare de piscar
noDisplay()lcd.noDisplay()Desliga o display sem perder os dados exibidos
display()lcd.display()liga o display e restaura o texto escrito após um comando “noDisplay()”
scrollDisplayLeft() lcd.scrollDisplayLeft()Move o conteúdo do display (texto+cursor) um espaço para a esquerda.
scrollDisplayRight() lcd.scrollDisplayRight()Move o conteúdo do display (texto+cursor) um espaço para a direita.
autoscroll() lcd.autoscroll()Ativa a rolagem automática do LCD. Isso faz com que cada caractere empurre os anteriores um espaço. Se a direção do texto atual é da esquerda para a direita (o padrão), o visor desloca para a esquerda; se a direção atual é da direita para a esquerda, o visor desloca para a direita.
noAutoscroll() lcd.noAutoscroll()Desliga o modo automático autoscroll.
leftToRight() lcd.leftToRight()Define a direção para o texto ser escrito no LCD da esquerda para a direita, o padrão. Isto significa que os caracteres subsequentes escritos para a exibição vai da esquerda para a direita, mas não afeta o texto enviado anteriormente para o display.
rightToLeft() lcd.rightToLeft()Define a direção para o texto ser escrito no LCD da direita para a esquerda. Isto significa que os caracteres subsequentes escritos para a exibição vai da direita para a esquerda, mas não afeta o texto enviado anteriormente para o display.
createChar() lcd.createChar() Cria um caractere personalizado (gylph) para uso no LCD. Até oito caracteres de 5×8 pixels são suportadas (numeradas de 0 a 7). O aparecimento de cada caracter personalizada é especificada por uma matriz de oito bytes, uma para cada linha. Os cinco bits menos significativos de cada byte de determina os pixels daquela linha. Para exibir um caractere personalizado na tela, use o comando lcd.write(byte(numero));

 

Como Implementar a Biblioteca LiquidCrystal em seus Sketches

Toda vez que você quiser usar a Biblioteca LiquidCrystal há três pedaços de código que você deve incluir no seu código. O primeiro é uma declaração #include:

Esta deve ser a primeira linha de código no sketch (a seguir aos comentários que explicam o programa). A instrução #include permite que o compilador sabe para onde olhar para diferentes declarações de funções. Quando o programa é compilado, ele irá interagir com o arquivo LiquidCrystal.h para encontrar as declarações de função de que necessita.

Mas não se preocupe se isso não faz sentido para você agora – não fez sentido para mim por um longo tempo também. O foco deste tutorial é colocar o seu LCD em funcionamento – por isso não esquente a cabeça com as pequenas coisas, basta incluir o #include.

A segunda coisa que você deve fazer é declarar, nome e inicializar um objeto Biblioteca LiquidCrystal. Você pode colocar isso logo após a instrução include.

void setup() { // configura o número de colunas e linhas do display LCD: lcd.begin(16, 2); } //encerra o setup

Indexação no Display LCD
Figura 9 – Indexação no Display LCD
Indexação no Display LCD
Figura 10 – Indexação no Display LCD

A primeira imagem está indexada como (4,1) e a segunda está indexada como (15,1).

 

Como definir a posição do texto no LCD? E mais importante por que isso importa?

Para definir a posição do cursor, usamos a função setCursor (coluna, linha); Então, se queremos o nosso cursor na terceira coluna na segunda linha, devemos escrever:

Devemos ver a seguinte informação em nosso display lcd 16×2:

 Informação no Display LCD
Figura 13 – Informação no Display LCD

Para fazer com que o cursor apague e pare de aparecer na tela do LCD basta utilizar a função noCursor(); .

Informação no Display LCD
Figura 14 – Informação no Display LCD

O cursor auto-avança para a próxima posição após o último caractere do texto.

Essa funcionalidade de auto-avançar é interessante por diversas razões – mas o mais útil é que você não tem que dizer constantemente ao LCD onde colocar o próximo pedaço de texto – o padrão será após o texto que está sendo exibido atualmente. Então, vamos dar uma olhada no que vai acontecer se nós enviarmos o comando a seguir para o LCD:

Texto no Display
Figura 15 – Texto no Display

 

Texto no Display
Figura 16 – Texto no Display

O próximo texto enviado para o LCD é mostrado logo após o anterior.

 

Outra função que altera o funcionamento do cursor é a função autoscroll(). Essa função desliga o auto-avanço do cursor mantendo-o estático em uma posição pré-estabelecida e passa a deslocar os caracteres escritos para a esquerda caso o sentido de escrita esteja definido como padrão da esquerda para a direita, ou desloca os caracteres para a direita caso o sentido de escrita esteja definido da direita para a esquerda (veremos como inverter o sentido de escrita mais adiante, apenas mencionei as duas possibilidade porque esse fator afeta na reação do texto ao utilizar essa função). Veja no código a seguir o que  acontece com o cursor.

Na tela do display vamos ver o texto da seguinte maneira:

Texto no Display
Figura 17 – Texto no Display

 

index (5, 1)
Figura 18 – Index (5, 1)

Veremos a seguinte informação na tela do nosso Display.

Tela Display LCD
Figura 21 – Tela Display LCD

 

Display LCD

 

O texto é escrito da esquerda para a direita na primeira linha e da direita para a esquerda na segunda linha.

Como Movimentar os Caracteres que já estão na Tela do LCD

Para criar um efeito visual bem legal no seu Display, ou até mesmo para ler informações que não couberam na tela do LCD como por exemplo caracteres que estão nas colunas 17 até 40, existem as funções de rolagem do texto lcd.scrollDisplayLeft() lcd.scrollDisplayRight(). Note que essas funções deslocam os caracteres que já estão escritos na tela do Display diferentemente da função autoscroll() que desloca os caracteres quando um novo texto é escrito. Vejamos o código a seguir:

Vemos a seguinte reação na tela do display:

O texto é escrito na tela do LCD uma única vez no setup() e no loop() ele é deslocado a cada meio segundo (500 milisegundos).

E intuitivamente o comando scrollDisplayRight(); desloca o texto exatamente da mesma maneira só que no sentido oposto.

Como Ligar e Desligar o LCD com o Código

Às vezes, você não quer nada na tela do seu LCD ou você pode querer que ele entre em modo “sleep”. É simples de fazer isso usando as funções noDisplay()display() .

Este código irá ligar e desligar a tela a cada meio segundo. Uma coisa importante a notar é que o texto anterior é mantido na mesma posição, mesmo depois de ter sido desligado e ligado novamente. Veja o resultado no vídeo a seguir:

Como Limpar a Tela do LCD

Se você precisar limpar a tela do seu LCD, apagar tudo o que está sendo mostrado na tela, basta utilizar a função clear();. Neste ponto do nosso post acredito que você já saiba utilizar esse comando por sua conta. Pegue algum de nossos exemplos anteriores, e ao final acrescente um delay (1000); e a função lcd.clear();

Você vai ver o texto aparecer na tela do display e depois ser completamente apagado.

 

Desafio

Agora que você já conhece todas as funções da biblioteca Liquid Crystal, tente fazer um programa utilizando todas elas.

 

Gostou? Tem alguma dúvida? Comente e visite nossa loja!