Codificação compatível com Arduino 12: Rolagem de texto longo no LCD de caracteres usando Arduino

No tutorial anterior, discutimos:

  • Os blocos funcionais de um LCD de caracteres
  • Como o LCD de caracteres funciona e faz interface com um controlador
  • Como exibir texto em um LCD de caracteres

Neste tutorial, aprenderemos como rolar longas sequências de texto em um LCD de caracteres, o que pode ser complicado. Um módulo LCD de caracteres possui uma pequena quantidade de RAM que pode armazenar texto e suporta a continuidade da rolagem do texto em um display LCD. No entanto, isto requer um design cuidadoso do programa incorporado.

Neste tutorial, exibiremos uma longa sequência de texto em um LCD de caracteres do Arduino e revisaremos as diferentes etapas e preocupações que devem ser consideradas.

Exibindo texto longo
Exibir longas sequências de texto em um LCD de caracteres está longe de ser simples. A razão para isso é que a RAM de dados de exibição dos módulos LCD de caracteres é limitada. Por exemplo, a RAM de dados de exibição (DDRAM) de um LCD de 16×2 caracteres pode armazenar apenas 80 caracteres. No modo de duas linhas, a DDRAM pode armazenar apenas 40 caracteres por linha. Isso significa que qualquer tentativa de armazenar uma sequência de texto com mais de 40 caracteres substituirá a outra linha.

Se você deseja exibir e rolar texto com mais de 40 caracteres em uma linha de LCD 16×2, a única maneira de fazer isso é quebrar a sequência original em partes e gravar essas partes da sequência de texto na DDRAM, uma por uma, rolando cada parte da string de texto.

Outra preocupação é manter a continuidade do texto que percorre o LCD. Se apenas 40 caracteres por linha puderem ser gravados em um módulo LCD por vez, então apenas 16 caracteres poderão ser exibidos no LCD por vez. Para manter a continuidade da rolagem do texto no LCD, alguns caracteres do segmento de texto anterior precisam ser repetidos no próximo segmento de texto gravado na DDRAM.

Por exemplo, em um LCD de 16×2 caracteres, se o texto for rolado um caractere por etapa, 15 caracteres do segmento de texto atual precisarão ser repetidos no próximo segmento de texto gravado na DDRAM. Para outros módulos LCD, um a menos do número de caracteres por linha precisa ser repetido nos segmentos de texto. O tamanho do segmento de texto que pode ser gravado na DDRAM por vez depende do número de caracteres por linha que podem ser armazenados na DDRAM desse módulo LCD.

Então, vamos supor que a seguinte sequência de texto deva ser rolada em uma linha de caracteres LCD: “Rápida raposa marrom salta sobre o cachorro preguiçoso Raposa marrom rápida salta sobre o cachorro preguiçoso Raposa marrom rápida salta sobre o cachorro preguiçoso “

A string acima possui 120 caracteres. Como apenas 40 caracteres podem ser gravados na DDRAM por vez, 15 caracteres devem ser repetidos do segmento de texto anterior para manter a continuidade do texto em um LCD 16×2.

Isso significa que a string acima deve ser dividida nas seguintes strings para rolar por uma linha de LCD 16×2:

1: “Rápida raposa marrom salta sobre o cachorro preguiçoso”
2: “R o cachorro preguiçoso Raposa marrom rápida salta”
3: “Uma raposa pula sobre o cachorro preguiçoso, sobrancelha rápida”
4: ”cachorro Raposa marrom rápida pula sobre o preguiçoso”
5: “Acabei com o cachorro preguiçoso”

Para exibir e rolar a sequência de texto de 120 caracteres fornecida acima em um LCD 16×2, é necessário dividi-la em cinco segmentos de texto de 40 caracteres (exceto o último) – com 15 (16-1) caracteres repetindo em cada segmento consecutivo. Isso ocorre porque cada linha exibe 16 caracteres por vez enquanto rola um caractere por vez.

Os segmentos de texto de 1 a 4 devem ser rolados 24 (40-16) vezes, pois 40 caracteres são gravados na DDRAM por vez. Esses caracteres são rolados em uma linha de 16 caracteres, enquanto o último segmento de texto deve ser rolado quantas vezes for o comprimento do segmento em caracteres – mais preenchimento adicional (espaços) entre cada repetição da rolagem.

Se você não estiver adicionando nenhum preenchimento entre a rolagem repetida do texto, o segmento de texto “5” precisará ser rolado 21 vezes (o comprimento do segmento) ou pelo menos cinco vezes (21-16) conforme sua escolha.

Rolando texto longo
A biblioteca LiquidCrystal do Arduino possui uma série de funções que podem ser usadas para rolar texto em um LCD de caracteres.

Estes métodos são úteis para rolar texto em um display LCD:

1. scrollDisplayLeft
2. scrollDisplayRight
3. auto rolagem
4. nãoAutoscroll
5. da esquerda para direita
6. direita para esquerda

A função print é usada para gravar dados textuais na DDRAM do LCD de caracteres. Para rolar um texto longo em um LCD de caracteres, o texto pode ser dividido, conforme explicado acima, e cada segmento pode ser gravado na DDRAM usando a função print .

Depois de escrever cada segmento, ele pode ser rolado com a ajuda de qualquer uma das funções listadas acima.

Deve-se notar, entretanto, que para rolar o texto nos bits LCD, S/C e RL do “cursor ou mudança de exibição”, o comando LCD é definido. Visite a tutorial anterior para aprender sobre os comandos do LCD.

O método scrollDisplayLeft
Esta função rola o conteúdo do display (o texto e o cursor) um espaço para a esquerda. Não precisa de argumentos. Ele simplesmente rola o texto escrito na DDRAM um espaço a partir do endereço atual da DDRAM (como no contador de endereços do LCD).

Esta função tem esta sintaxe:

lcd.scrollDisplayLeft // lcd é um objeto da classe LiquidCrystal

Além disso, possui este código-fonte:

Esta função usa uma “função command ”, que é usada para enviar os comandos do LCD para o LCD de caracteres.

O método scrollDisplayRight
Esta função rola o conteúdo do display (o texto e o cursor) um espaço para a direita. Não precisa de argumentos. Ele simplesmente rola o texto escrito na DDRAM um espaço a partir do endereço DDRAM atual (no contador de endereços do LCD).

Esta função tem esta sintaxe:

lcd.scrollDisplayRight //lcd é um objeto da classe LiquidCrystal

Além disso, possui este código-fonte:

O método leftToRight

Esta função define a direção do texto em um LCD de caracteres, da esquerda para a direita. É a direção padrão do texto. Após chamar esta função, quando os caracteres forem escritos na DDRAM do LCD, os caracteres serão exibidos da esquerda para a direita. Esta função não afeta nenhum texto exibido anteriormente. Afeta apenas o texto que é passado para o LCD (via função de impressão ou gravação) após chamá-lo.

Tem esta sintaxe:

lcd.leftToRight //lcd é um objeto da classe LiquidCrystal

Este é o código fonte:

O método rightToLeft

Esta função define a direção do texto em um LCD de caracteres da direita para a esquerda. A direção padrão do texto é da esquerda para a direita. Após chamar esta função, quando caracteres forem escritos na DDRAM do LCD, os caracteres serão exibidos da direita para a esquerda. Esta função não afeta nenhum texto exibido anteriormente. Afeta apenas o texto que é passado para o LCD (via função de impressão ou gravação) após chamá-lo.

Tem esta sintaxe:

lcd.rightToLeft //lcd é um objeto da classe LiquidCrystal

Este é o código fonte:

O método autoscroll
Esta função serve para rolar automaticamente o texto do LCD. A direção padrão do texto é da esquerda para a direita. A direção de rolagem do texto pode ser definida usando a função leftToRight ou a função rightToLeft .

Ao chamar esta função, o texto é rolado da esquerda para a direita ou da direita para a esquerda em um espaço, de acordo com a direção do texto. Além disso, esta função rola o texto escrito na DDRAM. Não altera o conteúdo da DDRAM.

Tem esta sintaxe:

lcd.autoscroll //lcd é um objeto da classe LiquidCrystal

Este é o código fonte:

O método noAutoscroll
Esta função desativa a rolagem automática do texto no LCD.

Tem esta sintaxe:

lcd.noAutoscroll //lcd é um objeto da classe LiquidCrystal

Este é o código fonte:

Os métodos command , write e send
Todas as funções usadas para rolar a tela do LCD de caracteres usam o método command . Este método é usado para passar os comandos LCD para o módulo LCD.

Este método também usa outro método — send — para passar comandos para o LCD. O método command é usado para passar comandos para o LCD enquanto o método write é usado para passar dados para o módulo LCD (para escrever na DDRAM).

Os métodos command , write e send possuem estes códigos-fonte:

A receita
Nesta receita, rolaremos textos longos de strings em um LCD de 16×2 caracteres. Duas strings diferentes serão roladas em duas linhas do LCD 16×2.

Uma das strings rolará na linha superior do LCD de caracteres e exibirá repetidamente “EEWORLDONLINE”. A segunda string irá rolar na linha inferior do LCD 16×2. Ele exibe todos os sites da Rede EE com WTWH Media LLC.

Componentes necessários
1. Arduino UNO x1
2. LCD de 16×2 caracteres x1
3. Pote de 10K x1
4. Resistor de 330 Ohms ou qualquer resistor de baixo valor x1
5. Tábua de ensaio x1
6. Fios de ligação macho-macho ou fios de conexão

Conexões de circuito
O módulo LCD utilizado neste projeto é o JHD162A. Este é um módulo LCD 16×2 com pontos de 5×8 caracteres. O módulo LCD possui uma interface de 16 pinos. O LCD faz interface com o Arduino no modo de 4 bits. Os pinos 1 (GND) e 16 (LED) do módulo LCD estão conectados ao terra. O pino 2 (VCC) está conectado ao VCC.

O pino 15 (LED+) do módulo LCD é conectado ao VCC através de um resistor de pequeno valor. O pino 3 (VEE) está conectado ao terminal variável de um potenciômetro, enquanto os terminais fixos do potenciômetro estão conectados ao terra e VCC.

O pino R/W está conectado ao terra porque o Arduino só gravará dados no módulo LCD. Os pinos RS, EN, DB4, DB5, DB6 e DB7 do LCD são conectados aos pinos 13, 11, 7, 6, 5 e 4 do Arduino UNO, respectivamente. A placa de ensaio é alimentada ao aterramento comum e ao trilho de alimentação de 5 V de um dos pinos de aterramento e do pino de 5 V do Arduino UNO.

Diagrama de circuito

Esboço do Arduino

Como funciona o projeto

O objetivo é exibir duas strings em um módulo LCD 16×2. Uma das strings apenas exibe o texto “EEWORLDONLINE” na linha 0 do LCD. Durante a rolagem no display, este texto também deve rolar continuamente na linha 0. O texto é repetido em uma longa sequência com dois espaços entre cada repetição do texto.

A segunda string contém os nomes dos sites da EE Network com WTWH Media LLC, que incluem:

  1. eeworldonline.com
  2. edaboard.com
  3. eletro-tech-online.com
  4. engenheirosgarage.com
  5. analogictips.com
  6. Connectortips.com
  7. microcontrollertips.com
  8. powerelectronictips. com
  9. sensortips.com
  10. testandmeasurementtips.com
  11. wireandcabletips.com
  12. designfast.com
  13. 5gtechnologyworld.com

A segunda string tem 269 caracteres e contém este texto:

“eeworldonline.com edaboard.com electro-tech-online.com engenheirosgarage.com analogictips.com conectortips.com microcontrollertips.com powerelectronictips.com sensortips.com testandmeasurementtips.com wireandcabletips.com designfast.com 5gtechnologyworld.com”

Para exibir o texto de rolagem na linha 0, os seguintes segmentos de texto são encaminhados para o LCD de caracteres:

1. ”EEWORLDONLINE EEWORLDONLINE EEWORLDO”

2. “NLINE EEWORLDONLINE EEWORLDONLINE EEW”

3. “ORLDONLINE EEWORLDONLINE EEWORLDONLINE”

Após o terceiro segmento de linha, os segmentos de string 1 a 3 começam a se repetir para permitir a exibição repetida do texto, “EEWORLDONLINE”. Todos os três segmentos de texto acima têm 40 caracteres e precisam ser rolados 24 vezes (40-16) em uma linha do LCD 16×2.

Para exibir o texto de rolagem na linha 1, a sequência de 269 caracteres é dividida nos seguintes segmentos de texto de 40 caracteres”

1. “eeworldonline.com engenheirosgarage.com ”

2. “ersgarage.com edaboard.com eletro-tec”

3. “om electro-tech-online.com dica analógica”

4. “om analogictips.com conectortips.com ”

5. “nectortips.com microcontrollertips.com ”

6. “rollertips.com powerelectronictips.com ”

7. “ronictips.com sensortips.com testandme”

8. “.com testandmeasurementtips.com wirean”

9. “ips.com wireandcabletips.com designfas”

10. “.com designfast.com 5gtechnologyworld”

11. “technologyworld.com”

Todos os segmentos de texto têm 40 caracteres, exceto o último, porque a capacidade máxima da DDRAM do LCD é de 40 caracteres por linha. Cada segmento de texto subsequente começa repetindo os últimos 15 caracteres do segmento de texto anterior para garantir a continuidade do texto rolante no display.

Um total de 15 caracteres são repetidos porque cada linha do display possui 16 caracteres e ao rolar um espaço, os últimos 15 caracteres devem corresponder ao segmento de texto anterior sempre que novos dados forem gravados na DDRAM. Cada segmento de texto é rolado 24 vezes (40-16), pois há 40 caracteres armazenados na DDRAM por vez e 16 caracteres são exibidos em uma linha por vez no LCD. A última linha é rolada de acordo com o número de caracteres nela contidos. Isso significa que ele é rolado menos de 24 vezes.

O resultado é uma tela de rolagem em LCD 16×2 que destaca EEWORLDONLINE na linha 0 e todos os sites que fazem parte da rede EE na linha 1.

Guia de programação
O esboço do Arduino começa a importar a biblioteca LiquidCrystal. Em seguida, é definido um objeto definido pela variável “lcd” da classe LiquidCrystal.

#include
//LCD Cristal Líquido(RS, E, D4, D5, D6, D7);
LCD Cristal Líquido (13, 11, 7, 6, 5, 4);

Uma variável global “contador” é definida para rolar o texto e a função setup é definida. No função configuração o LCD é inicializado com o tamanho 16×2 usando o método Begin da seguinte maneira:

configuração nula
{
lcd.begin(16, 2);
}

Na função loop , o display LCD é primeiro limpo usando o método clear , e o cursor é colocado na coluna 0 da linha 0, usando o método setCursor .

O texto “EEWORLDONLINE EEWORLDONLINE EEWORLDO” é impresso usando o método print no objeto “lcd”. Da mesma forma, o texto “”eeworldonline.com engenheirosgarage.com ”é impresso na coluna 0 da linha 1.

Em seguida, um loop for é executado no qual toda a exibição é deslocada para a esquerda usando o método scrollDisplayLeft 24 vezes. Depois de rolar a tela no LCD, um atraso de 300 milissegundos de cada vez é fornecido usando a função delay .

loop vazio
{
lcd.claro ;
lcd.setCursor(0, 0);
lcd.print(”EEWORLDONLINE EEWORLDONLINE EEWORLDO”);
lcd.setCursor(0, 1);
lcd.print (“eeworldonline.com engenheirosgarage.com“);
for(contador = 0; contador <24; contador++)
{
lcd.scrollDisplayLeft ;
atraso(300);
}

Da mesma forma, os outros segmentos de texto são exibidos e rolados. Na linha 0, três segmentos de texto são repetidos continuamente até que o último segmento de texto cortado seja exibido. Na linha 1, 11 segmentos de texto são exibidos e rolados. O último segmento de texto em ambas as linhas é rolado cinco vezes, de acordo com o comprimento dos segmentos de texto.

Para simplificar, os últimos segmentos de texto nas linhas 0 e 1 também são mantidos no mesmo comprimento.

O corpo da função loop continua se repetindo até que o Arduino seja desligado. Portanto, ambas as strings longas continuam rolando nas linhas 0 e 1 do módulo LCD.

O Arduino não possui suporte para funções de manipulação de strings no estilo C. Caso contrário, o esboço poderia ser reduzido a algumas linhas, armazenando a string inteira em uma variável e depois cortando a string em cada etapa para passar para a DDRAM do módulo LCD. Mesmo que a biblioteca de strings do C padrão pudesse ter sido suportada, o uso da função de manipulação de strings teria aumentado o espaço ocupado pelo programa incorporado.

No próximo tutorial, discutiremos como exibir caracteres personalizados no LCD de caracteres.

Vídeo de demonstração

(tagsParaTraduzir)Arduino

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.