Básico - Projeto 46

Mostra texto digitado no display LCD, contador de caracteres e scroll

Objetivo

Neste projeto vamos montar um display LCD para mostrar textos digitados pelo teclado do computador. No monitor serial do IDE do Arduino você também encontrará os textos digitados com os seus tamanhos (números de caracteres). Se o texto tiver mais que 16 caracteres, o programa irá automaticamente gerar um scroll apenas na primeira linha do display.

O projeto irá apresentar noções de alguns conceitos muito importantes para utilizar nos seus projetos, sendo eles:

  • Class String() - como instanciar e utilizar o objeto Srting() e seus métodos - Para saber mais leia: Classe String()
  • Comunicação serial usando a função Serial.read() - Para saber mais leia: Comunicação Serial
  • Rotinas para contar caracteres e criar scroll em apenas uma linha

Aplicação

Para fins didáticos e projetos display de cristal líquido.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos

Comprar

1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho

Comprar

1  
Display LCD

Display LCD 16X2 com pinos soldados

Comprar

1 DISPLAY LCD 16X2

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Potenciômetro

Potenciômetro 1OK

Comprar


 

1 Resultado de imagem para potenciômetro

O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo.

Obs.: Se não possuir potenciômetro de 10KΩ você poderá utilizar um de outro valor, de 1kΩ até 100kΩ.

Arduino UNO R3 Arduino UNO Original

Comprar

 

Arduino UNO Similar

Comprar


 

1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.


Atenção

1) Neste projeto vamos utilizar um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão. Atenção: Utilize um display LCD com os pinos soldados.

border:1px solid #000;

2) Preste muita atenção na montagem do dsiplay LCD. Observe que utilizamos os 6 primeiros pinos do LCD, pulamos os 4 próximos e então utilizamos mais 6pinos. Veja a tabela abaixo:

3) Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:

Obs.: Ao girar o eixo do potenciômetro, o valor da tensão deverá aumentar do negativo para o positivo, ou seja, se a tensão do circuito for 5V, o potenciômetro irá variar de 0 a 5V.

No nosso exemplo, girando-se o eixo do potenciômetro no sentido horário, aumentamos a tensão na entrada do pino 3 do display e diminuímos o contraste dos caracteres com o back light (luz de fundo) até que não é mais possível visualizá-los. Fazendo o contrário, ou seja, diminuindo a tensão até o zero, teremos um contraste máximo entre os caracteres e a luz de fundo.

4) A montagem do nosso projeto foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

Ligando o display LCD

Para visualizar o display funcionando, digite o código abaixo no ambiente de desenvolvimento IDE do Arduino. Faça a verificação e o upload:

/*******************************************************************************
*
*          Testando o Display LC 16 X 2
*            http://squids.com.br/arduino
*
*******************************************************************************/
//Carrega a biblioteca LiquidCrystal
#include <LiquidCrystal.h>

//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
//Define LCD 16 colunas por 2 linhas
lcd.begin(16, 2);

//Posiciona o cursor na coluna 0, linha 0;
lcd.setCursor(0,0);
//Envia o texto entre aspas para o LCD
lcd.print("Ola, meu nome e:");

//Posiciona o cursor na coluna 1, linha 1;
lcd.setCursor(1,1);
//Envia o texto entre aspas para o LCD
lcd.print("Squids Arduino");
}

void loop() {

} 

Se o display acender e mostrar os caracteres como na figura abaixo, a ligação está correta.

ATENÇÃO: Se o display acender e não mostrar os caracteres provavelmente é em função do contraste. Gire o eixo do potenciômetro no sentido anti-horário para aumentar o contraste. Se mesmo assim o display não mostrar os caracteres, corrija a montagem do circuito e/ou o código.

Comandos do display LCD para a biblioteca LiquidCrystal

No projeto vamos utilizar alguns comandos de controle do display LCD através da biblioteca LiquidCrystal que já vem embutida na IDE do Arduino. Para conhecer todos os comandos desta biblioteca, acesse o link: Comandos display LCD para biblioteca LiquidCrystal e LiquidCrystal Library (Arduino Reference).

Obs.: Para acessarmos uma biblioteca embutida na IDE do arduino, assim como, para acessarmos um biblioteca local através de um header file, utilizaremos a diretiva #include.

Código do Projeto (Sketch)

1) Faça o dowload e abra o arquivo projeto46.ino no IDE do Arduino:

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*  Projeto 46 - Mostra texto no display LCD digitado no computador com contador
* de caracteres
*                   http://squids.com.br/arduino
*
*******************************************************************************/
#include <LiquidCrystal.h> //Carrega a biblioteca LiquidCrystal nativa na IDE

//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Instancia a classe String
String linha1;
String linha2 = "Squids Arduino";

// Define as variáveis e constantes
char texto;
int ini = 1;
int tamanho_anterior;

//Configuracoes LCD 16x2  
int screenWidth = 16;  
int screenHeight = 2; 

// Define as variáveis para o scroll
int stringStart, stringStop = 0;  
int scrollCursor = screenWidth;  
int tamanho =0;

void setup() {
  lcd.begin(screenWidth, screenHeight); // Define o display com 16 colunas e 2 linhas
  lcd.clear(); // limpa a tela do display
  lcd.setCursor(1, 1);  
  lcd.print(linha2);   
  Serial.begin(9600);// inicializa a comunicação serial
  Serial.print("Digite um texto:\n");
  Serial.println("--------------------");
}
 
void loop() {
  // quando caracteres são digitados no monitor serial
  if (Serial.available()) {
    delay(100); // espere um pouco para que toda a mensagem chegue...
    lcd.clear(); // limpa a tela
    linha1 = "";
    lcd.setCursor(1, 1);
    lcd.print(linha2); 
    // lê todos caracteres
    while (Serial.available() > 0) {
      texto = Serial.read(); // coloca todos caracteres na variável texto
      linha1 += texto;
      ini = 0;
    }
  }
  displayTexto();
  displayLCD();
  //limpa a String e o buffer
  Serial.flush();
}

void displayTexto() {
    if (ini == 0) {
      // Imprime no monitor serial
      Serial.println(linha1); // mostra o texto no monitor serial
      Serial.print("n. carcateres = ");
      Serial.println(linha1.length());
      Serial.println("--------------------");
    }
    ini = 1;
}

void displayLCD() {
      // Colca texto no display
  if (linha1.length() >16) { // chama a função scroll se maior que 16
     // Para o scroll
    lcd.setCursor(scrollCursor, 0);  
    lcd.print(linha1.substring(stringStart,stringStop));
    lcd.setCursor(1, 1);
    lcd.print(linha2);
     delay(250);
     scroll();
     tamanho = linha1.length()+1; 
        if (stringStart == tamanho) {
        stringStart = 0;
        stringStop = 0;
        }
  } else {
      lcd.setCursor(0, 0);
      lcd.print(linha1); // mostra palavra no display
    }
}

void scroll() {
    lcd.clear();  
    if(stringStart == 0 && scrollCursor > 0)  {  
    scrollCursor--;  
    stringStop++;  
  } else if (stringStart == stringStop){  
    stringStart = stringStop = 0;  
    scrollCursor = screenWidth;  
  } else if (stringStop == (linha1.length()) && scrollCursor == 0) {  
    stringStart++;  
  } else {  
    stringStart++;  
    stringStop++;  
  }  
} 

Vídeo

Como o projeto deve funcionar

1. Ao executar o programa, abra o monitor serial do IDE do Arduino. Aguarde o monitor estar pronto para você digitar o texto.

2. Após digitar o texto desejado tecle <Enter>. Observe que o texto apareceu no display de LCD e no monitor serial, como mostra a imagem abaixo:

Obs.: Veja que o texto também aparece no monitor serial, assim como, o tamanho em número de caracteres.

3. Se o texto digitado for maior que 16 caracteres, a primeira linha do display irá produzir um scroll de modo que permita o usuário ler toda frase digitada.

Obs.: Veja que o texto acima possui mais do que 16 caracteres.

Desafios

Com base neste projeto, resolva os seguintes desafios:

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Compartilhe: