Nesta lição vais aprender a escrever num módulo LCD.
Ecrãs de cristais líquidos
Um LCD (liquid crystal display, ou ecrã de cristais líquidos) é um ecrã espalmado e plano, formado por um número de píxels a cores ou monocromáticos, colocados à frente de uma fonte de luz ou reflectora. É frequentemente utilizado em dispositivos electrónicos a pilhas, uma vez que utiliza quantidades muito pequenas de energia eléctrica. Graças a eles, é possível oferecer ao utilizador, informação sobre o que está a acontecer no programa, o que se traduz em algo muito útil e permite realizar projectos mais interactivos. Nesta lição vamos usar um Modulo LCD I2C/SPI. Com este modulo, apenas são necessários 2 sinais para mostrar informação, quando se controla por I2C, ou 3 sinais em caso de controla-lo por SPI. Este LCD em concreto possui 20 colunas e 4 linhas, o que nos permite escrever até 80 caracteres (com a biblioteca que usaremos apenas se podem escrever caracteres ASCII).
![]() |
![]() |
Preparando o projecto
Para programar o módulo LCD, necessitamos de utilizar uma biblioteca. O qué é uma biblioteca? É simplesmente, uma série de funções que alguém escreveu para nos simplificar e facilitar o trabalho. Isto significa, que em vez de termos que escrever nós os valores nos pinos, temos ao nosso dispor, funções de alto nível como lcd.print(“ola”) que farão todo o trabalho sujo para nós. A biblioteca utilizada para controlar os ecrãs LCD chama-se liquidCrystal. Contudo, esta livraria do Arduino está pensada para LCDs que necessitam de 6 sinais para serem controlados. Graças ao modulo IIC/SPI, o LCD desta lição apenas necessita de 4, por isso na bq, modificámos a livraria para que possa funcionar correctamente.
Como em lições anteriores, utilizaremos o Codebender como ambiente de desenvolvimento. Para poder utilizar esta biblioteca, devemos criar um projecto novo e adicionar os arquivos incluídos na biblioteca que acabámos de descarregar. Mostramos-te como se faz neste vídeo:
Uma vez que o nosso projecto contenha esses 4 arquivos, vamos conectar o LCD e começar a programá-lo.
Conectar o módulo LCD
O módulo LCD dispõe de 4 pinos para conectar (no modo IIC). Estes pinos são:
- SCL: o sinal de relógio
- SDA: o sinal do LCD
- VCC, a tensão da alimentação
- GND, a massa
A conexão deste componente deve ser sempre a mesma (para que seja compatível com a biblioteca bqLiquidCrystal. Se utilizares outra biblioteca, não têm que ser assim).
NOME | NÚMERO DO PINO | COR DO PINO |
SCL | A5 | Azul |
SDA | A4 | Azul |
VCC | A5 | Vermelho |
GND | A5 | Preto |
Olá LCD
Já temos a biblioteca necessária e tudo está conectado. Vamos fazer o Olá Mundo! mostrando no ecrã, o texto Curso de Arduino. Aqui tens o código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include #include "bqLiquidCrystal.h" /*** Variáveis globais ***/ bool firstTime=true; LiquidCrystal lcd(0); //criamos um objecto LCD void setup() { lcd.begin(20, 4); //inicializamos o LCD, 20 colunas, 4 linhas lcd.clear(); //apagamos qualquer conteúdo residual } void loop() { //executamos isto apenas uma vez if(firstTime){ lcd.clear(); //limpamos qualquer conteúdo residual lcd.setCursor(0,0); //colocamos o cursor na coluna 0, linha 0 lcd.print("Curso de Arduino"); //imprimimos este texto firstTime=false; //para que não volte a repetir } } |
Vamos analisar por partes:
Declarar o objecto LiquidCrystal
1 2 3 4 5 6 7 |
#include #include "bqLiquidCrystal.h" /*** Variáveis globais ***/ bool firstTime=true; LiquidCrystal lcd(0); //criamos um objecto LCD |
O tipo de variável LiquidCristal será o que nos permitirá controlar o módulo LCD. Por isso declaramos uma variável global deste tipo, que neste caso chamamos lcd e iniciamo-la com o valor 0. A partir de agora, todas as operações no LCD serão do tipo lcd.xxx.
Inicializar o LCD
1 2 3 4 5 |
void setup() { lcd.begin(20, 4); //inicializamos o LCD, 20 columnas, 4 linhas lcd.clear(); //apagamos qualquer conteúdo residual } |
Como sempre, todas as inicializações são feitas na função setup(). Inicializamos o lcd, indicando o número de linha e colunas. O LCD que estamos a usar é de 4 lx 20, e portanto indicamos esses valores. Posteriormente limpamos qualquer “resíduo” que possa estar no ecrã.
Escrever
1 2 3 4 5 6 7 8 9 10 11 |
void loop() { //executamos isto apenas uma vez if(firstTime){ lcd.clear(); //limpamos qualquer conteúdo residual lcd.setCursor(0,0); //colocamos o cursor na coluna 0, linha 0 lcd.print("Curso de Arduino"); //imprimimos este texto firstTime=false; //para que não volte a repetir } } |
Tal como fizemos anteriormente, utilizamos uma variável global para realizar uma acção somente uma vez, e quando estiver feita, começamos a escrever.
- lcd.clear(). Limpamos todo o que exista no ecrã,mas não é necessário, pois já o fizemos no setup()
- lcd.setCursor(0,0). Indicamos em que coluna e linha desejamos escrever, e este caso, será na linha 0 e coluna 0, ou seja, canto superior esquerdo.
- lcd.print(“Curso de Arduino”). Finalmente escrevemos o texto que desejamos imprimir.
Se compilarmos e enviarmos este programa para a placa, teremos o seguinte resultado:
Mover texto pelo ecrã
E se agora quisérmos que o texto “bq” aparecesse movendo-se por todo o ecrã? Deixamos-te aqui o código para que o experimentes, o analises, e se quiseres, para que o possas modificar para fazer coisas diferentes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include #include "bqLiquidCrystal.h" /*** Variáveis globais ***/ LiquidCrystal lcd(0); //criamos um objecto LCD void setup() { lcd.begin(20, 4); //inicializamos o LCD, 20 colunas, 4 linhas lcd.clear(); //apagamos qualquer conteúdo residual } void loop() { //loop para iterar através das linhas for(byte linha=0; linha < 4; linha++) { //loop para iterar através das colunas for (byte coluna=0; coluna < 19 ; coluna++) { lcd.clear(); lcd.setCursor(coluna,linha); lcd.print("bq"); delay(200); } } } |