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

Codificación compatible con Arduino 12: desplazamiento de texto largo en la pantalla LCD de caracteres usando Arduino

En el tutorial anterior, discutimos:

  • Los bloques funcionales de un LCD de caracteres.
  • Cómo funciona la pantalla LCD de caracteres y cómo interactúa con un controlador
  • Cómo mostrar texto en una pantalla LCD de caracteres

En este tutorial, aprenderemos cómo desplazar largas cadenas de texto en una pantalla LCD de caracteres, lo que puede resultar complicado. Un módulo de caracteres LCD tiene una pequeña cantidad de RAM que puede almacenar texto y admite el desplazamiento continuo de texto en una pantalla LCD. Sin embargo, esto requiere un diseño cuidadoso del programa integrado.

En este tutorial, mostraremos una larga cadena de texto en una pantalla LCD de caracteres Arduino y revisaremos los diferentes pasos y preocupaciones que se deben considerar.

Mostrando texto largo
Mostrar largas cadenas de texto en una pantalla LCD no es nada sencillo. La razón de esto es que la RAM de datos de visualización de los módulos LCD de caracteres es limitada. Por ejemplo, la RAM de datos de visualización (DDRAM) de una pantalla LCD de 16x2 caracteres sólo puede almacenar 80 caracteres. En modo de dos líneas, DDRAM sólo puede almacenar 40 caracteres por línea. Esto significa que cualquier intento de almacenar una cadena de texto de más de 40 caracteres sobrescribirá la otra línea.

Si desea mostrar y desplazar texto de más de 40 caracteres en una línea LCD de 16x2, la única forma de hacerlo es dividir la cadena original en partes y escribir estas partes de la cadena de texto en DDRAM una por una desplazándose por cada parte de la cadena de texto.

Otra preocupación es mantener la continuidad del texto que aparece en la pantalla LCD. Si sólo se pueden escribir 40 caracteres por línea en un módulo LCD a la vez, entonces sólo se podrán mostrar 16 caracteres en la pantalla LCD a la vez. Para mantener la continuidad del desplazamiento del texto en la pantalla LCD, algunos caracteres del segmento de texto anterior deben repetirse en el siguiente segmento de texto escrito en DDRAM.

Por ejemplo, en una pantalla LCD de 16x2 caracteres, si el texto se desplaza un carácter a la vez, será necesario repetir 15 caracteres del segmento de texto actual en el siguiente segmento de texto escrito en DDRAM. Para otros módulos LCD, es necesario repetir uno menos que el número de caracteres por línea en los segmentos de texto. El tamaño del segmento de texto que se puede escribir en DDRAM a la vez depende de la cantidad de caracteres por línea que se pueden almacenar en la DDRAM de este módulo LCD.

Entonces, supongamos que la siguiente cadena de texto se va a desplazar en una línea de caracteres de la pantalla LCD: “Rápido zorro marrón salta sobre un perro perezoso. Rápido zorro marrón salta sobre un perro perezoso. Rápido zorro marrón salta sobre un perro perezoso”.

La cadena de arriba tiene 120 caracteres. Dado que sólo se pueden escribir 40 caracteres en DDRAM a la vez, se deben repetir 15 caracteres del segmento de texto anterior para mantener la continuidad del texto en una pantalla LCD de 16×2.

Esto significa que la cadena anterior debe dividirse en las siguientes cadenas para desplazarse hacia abajo en una línea LCD de 16×2:

1: “El rápido zorro marrón salta sobre el perro perezoso”
2: “R el perro perezoso Saltos rápidos del zorro marrón”
3: “Un zorro salta sobre el perro perezoso, ceja rápida”
4: “el veloz perro zorro marrón salta sobre el perezoso”
5: “Acabé con el perro perezoso”

Para mostrar y desplazar la cadena de texto de 120 caracteres proporcionada anteriormente en una pantalla LCD de 16×2, debe dividirla en cinco segmentos de texto de 40 caracteres (excepto el último), con 15 (16-1) caracteres repetidos en cada uno consecutivo. segmento. Esto se debe a que cada línea muestra 16 caracteres a la vez mientras se desplaza un carácter a la vez.

Los segmentos de texto 1 a 4 deben desplazarse 24 (40-16) veces, ya que se escriben 40 caracteres en DDRAM a la vez. Estos caracteres se desplazan en una línea de 16 caracteres, mientras que el último segmento de texto debe desplazarse tantas veces como la longitud del segmento en caracteres, más un relleno adicional (espacios) entre cada repetición del desplazamiento.

Si no agrega ningún relleno entre el desplazamiento repetido del texto, el segmento de texto "5" deberá desplazarse 21 veces (la longitud del segmento) o al menos cinco veces (21-16) según su elección.

Desplazamiento de texto largo
La biblioteca LiquidCrystal de Arduino tiene una serie de funciones que se pueden utilizar para desplazar texto en una pantalla LCD de caracteres.

Estos métodos son útiles para desplazar texto en una pantalla LCD:

1. desplazarsePantallaIzquierda
2. desplazarse hacia la derecha
3. desplazamiento automático
4. No realizar desplazamiento automático
5. de izquierda a derecha
6. de derecha a izquierda

La función de impresión se utiliza para escribir datos textuales en la DDRAM de la pantalla LCD de caracteres. Para desplazar texto largo en una pantalla LCD de caracteres, el texto se puede dividir, como se explicó anteriormente, y cada segmento se puede escribir en DDRAM usando la función de impresión.

Después de escribir cada segmento, se puede desplazar por él con la ayuda de cualquiera de las funciones enumeradas anteriormente.

Cabe señalar, sin embargo, que para desplazar el texto en los bits LCD, S/C y RL del “cambio de cursor o pantalla”, se define el comando LCD. Visite el tutorial anterior para conocer los comandos de la pantalla LCD.

El método scrollDisplayLeft
Esta función desplaza el contenido de la pantalla (texto y cursor) un espacio hacia la izquierda. No se necesitan argumentos. Simplemente desplaza el texto escrito en DDRAM un espacio desde la dirección DDRAM actual (como en el contador de direcciones LCD).

Esta función tiene esta sintaxis:

lcd.scrollDisplayLeft // lcd es un objeto de la clase LiquidCrystal

Además, tiene este código fuente:

Esta función utiliza una “función de comando”, que se utiliza para enviar comandos desde la pantalla LCD a la pantalla LCD de caracteres.

El método scrollDisplayRight
Esta función desplaza el contenido de la pantalla (texto y cursor) un espacio hacia la derecha. No se necesitan argumentos. Simplemente desplaza el texto escrito en DDRAM un espacio desde la dirección DDRAM actual (en el contador de direcciones LCD).

Esta función tiene esta sintaxis:

lcd.scrollDisplayRight //lcd es un objeto de la clase LiquidCrystal

Además, tiene este código fuente:

El método leftToRight

Esta función establece la dirección del texto en una pantalla LCD de caracteres, de izquierda a derecha. Es la dirección del texto predeterminada. Después de llamar a esta función, cuando se escriben caracteres en la DDRAM de la pantalla LCD, los caracteres se mostrarán de izquierda a derecha. Esta función no afecta ningún texto mostrado anteriormente. Sólo afecta el texto que se pasa a la pantalla LCD (a través de la función de impresión o escritura) después de llamarlo.

Tiene esta sintaxis:

lcd.leftToRight //lcd es un objeto de la clase LiquidCrystal

Este es el código fuente:

El método rightToLeft

Esta función establece la dirección del texto en una pantalla LCD de caracteres de derecha a izquierda. La dirección del texto predeterminada es de izquierda a derecha. Después de llamar a esta función, cuando se escriben caracteres en la DDRAM de la pantalla LCD, los caracteres se mostrarán de derecha a izquierda. Esta función no afecta ningún texto mostrado anteriormente. Sólo afecta el texto que se pasa a la pantalla LCD (a través de la función de impresión o escritura) después de llamarlo.

Tiene esta sintaxis:

lcd.rightToLeft //lcd es un objeto de la clase LiquidCrystal

Este es el código fuente:

El método de desplazamiento automático
Esta función es para desplazar automáticamente el texto de la pantalla LCD. La dirección del texto predeterminada es de izquierda a derecha. La dirección de desplazamiento del texto se puede configurar usando la función leftToRight o rightToLeft.

Al llamar a esta función, el texto se desplaza de izquierda a derecha o de derecha a izquierda un espacio, según la dirección del texto. Además, esta función desplaza el texto escrito en DDRAM. No cambia el contenido de DDRAM.

Tiene esta sintaxis:

lcd.autoscroll //lcd es un objeto de la clase LiquidCrystal

Este es el código fuente:

El método noAutoscroll
Esta función desactiva el desplazamiento automático de texto en la pantalla LCD.

Tiene esta sintaxis:

lcd.noAutoscroll //lcd es un objeto de la clase LiquidCrystal

Este es el código fuente:

Los métodos de comando, escritura y envío.
Todas las funciones utilizadas para desplazarse por la pantalla de caracteres LCD utilizan el método de comando. Este método se utiliza para pasar comandos LCD al módulo LCD.

Este método también utiliza otro método, enviar, para pasar comandos a la pantalla LCD. El método de comando se usa para pasar comandos a la pantalla LCD, mientras que el método de escritura se usa para pasar datos al módulo LCD (para escribir en DDRAM).

Los métodos comando, escritura y envío tienen estos códigos fuente:

La receta
En esta receta, desplazaremos textos de cadenas largas en una pantalla LCD de 16x2 caracteres. Se desplazarán dos cadenas diferentes en dos líneas de la pantalla LCD de 16×2.

Una de las cadenas se desplazará por la línea superior de la pantalla LCD de caracteres y mostrará repetidamente "EEWORLDONLINE". La segunda cadena se desplazará en la línea inferior de la pantalla LCD de 16×2. Muestra todos los sitios de EE Network con WTWH Media LLC.

Componentes necesarios
1. Arduino UNO x1
2. LCD de 16×2 caracteres x1
3. Bote de 10K x1
4. Resistencia de 330 ohmios o cualquier resistencia de bajo valor x1
5. Tablero de prueba x1
6. Cables de unión o cables de conexión macho a macho

Conexiones de circuito
El módulo LCD utilizado en este proyecto es el JHD162A. Este es un módulo LCD de 16×2 con puntos de caracteres de 5×8. El módulo LCD tiene una interfaz de 16 pines. La pantalla LCD interactúa con Arduino en modo de 4 bits. Los pines 1 (GND) y 16 (LED) del módulo LCD están conectados a tierra. El pin 2 (VCC) está conectado a VCC.

El pin 15 (LED+) del módulo LCD está conectado a VCC a través de una resistencia de pequeño valor. El pin 3 (VEE) está conectado al terminal variable de un potenciómetro, mientras que los terminales fijos del potenciómetro están conectados a tierra y VCC.

El pin R/W está conectado a tierra porque Arduino solo escribirá datos en el módulo LCD. Los pines RS, EN, DB4, DB5, DB6 y DB7 de la pantalla LCD están conectados a los pines 13, 11, 7, 6, 5 y 4 de Arduino UNO respectivamente. La placa de pruebas se alimenta a la tierra común y al riel de alimentación de 5 V de uno de los pines de tierra y al pin de 5 V del Arduino UNO.

Diagrama de circuito

Bosquejo de Arduino

Cómo funciona el proyecto

El objetivo es mostrar dos cadenas en un módulo LCD de 16×2. Una de las cadenas simplemente muestra el texto "EEWORLDONLINE" en la línea 0 de la pantalla LCD. Mientras se desplaza por la pantalla, este texto también debe desplazarse continuamente en la línea 0. El texto se repite en una secuencia larga con dos espacios entre cada repetición del texto.

La segunda cadena contiene los nombres de los sitios web de EE Network con WTWH Media LLC, que incluyen:

  1. eeworldonline.com
  2. edaboard.com
  3. electro-tech-online.com
  4. ingenierosgarage.com
  5. analogictips.com
  6. Conectortips.com
  7. microcontrollertips.com
  8. puntas electrónicas de potencia. con
  9. sensorestips.com
  10. testandmeasurementtips.com
  11. wireandcabletips.com
  12. diseñofast.com
  13. 5gtechnologyworld.com

La segunda cadena tiene 269 caracteres y contiene este texto:

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

Para mostrar texto en desplazamiento en la línea 0, los siguientes segmentos de texto se envían a la pantalla LCD de caracteres:

1. ”EEWORLDONLINE EEWORLDONLINE EEWORLDO”

2. “NLINE EEWORLDONLINE EEWORLDONLINE EEW”

3. “ORLDONLINE EEWORLDONLINE EEWORLDONLINE”

Después del tercer segmento de línea, los segmentos de cadena 1 a 3 comienzan a repetirse para permitir la visualización repetida del texto, “EEWORLDONLINE”. Los tres segmentos de texto anteriores tienen 40 caracteres y deben desplazarse 24 veces (40-16) en una línea de la pantalla LCD de 16×2.

Para mostrar texto en desplazamiento en la línea 1, la cadena de 269 caracteres se divide en los siguientes segmentos de texto de 40 caracteres”.

1. “eeworldonline.com ingenierosgarage.com”

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

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

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 cablean”

9. “ips.com wireandcabletips.com designfas”

10. “.com designfast.com 5gtechnologyworld”

11. “tecnologíaworld.com”

Todos los segmentos de texto tienen 40 caracteres excepto el último, porque la capacidad máxima de LCD DDRAM es de 40 caracteres por línea. Cada segmento de texto posterior comienza repitiendo los últimos 15 caracteres del segmento de texto anterior para garantizar la continuidad del texto que se desplaza en la pantalla.

Se repiten un total de 15 caracteres porque cada línea de la pantalla tiene 16 caracteres y al desplazarse por un espacio, los últimos 15 caracteres deben coincidir con el segmento de texto anterior cada vez que se escriben nuevos datos en DDRAM. Cada segmento de texto se desplaza 24 veces (40-16), ya que hay 40 caracteres almacenados en DDRAM a la vez y 16 caracteres se muestran en una línea a la vez en la pantalla LCD. La última línea se desplaza según el número de caracteres que contiene. Esto significa que se lanza menos de 24 veces.

El resultado es una pantalla LCD de desplazamiento de 16x2 que resalta EEWORLDONLINE en la línea 0 y todos los sitios que forman parte de la red EE en la línea 1.

Guía de programación
El boceto de Arduino comienza a importar la biblioteca LiquidCrystal. A continuación se define un objeto definido por la variable “lcd” de la clase LiquidCrystal.

#incluir
//LCD Cristal líquido(RS, E, D4, D5, D6, D7);
LCD de cristal líquido (13, 11, 7, 6, 5, 4);

Se define una variable global “contador” para desplazar el texto y se define la función de configuración. En la función de configuración, la pantalla LCD se inicializa con el tamaño 16×2 usando el método Begin de la siguiente manera:

configuración nula
{
lcd.comenzar(16, 2);
}

En la función de bucle, la pantalla LCD se borra primero usando el método clear y el cursor se coloca en la columna 0 de la fila 0 usando el método setCursor.

El texto “EEWORLDONLINE EEWORLDONLINE EEWORLDO” se imprime utilizando el método de impresión en el objeto “lcd”. De manera similar, el texto “”eeworldonline.com ingenierosgarage.com” está impreso en la columna 0 de la línea 1.

Luego se ejecuta un bucle for en el que toda la pantalla se desplaza hacia la izquierda usando el método scrollDisplayLeft 24 veces. Después de desplazarse por la pantalla LCD, se proporciona un retraso de 300 milisegundos a la vez utilizando la función de retraso.

bucle vacío
{
lcd.claro;
lcd.setCursor(0, 0);
lcd.print(”EEWORLDONLINE EEWORLDONLINE EEWORLDO”);
lcd.setCursor(0, 1);
lcd.print ("eeworldonline.com ingenierosgarage.com");
para(contador = 0; contador <24; contador++)
{
lcd.scrollDisplayLeft;
retraso(300);
}

Asimismo, los demás segmentos de texto se muestran y desplazan. En la línea 0, se repiten tres segmentos de texto continuamente hasta que se muestra el último segmento de texto cortado. En la línea 1 se muestran y desplazan 11 segmentos de texto. El último segmento de texto de ambas líneas se desplaza cinco veces, según la longitud de los segmentos de texto.

Para simplificar, los últimos segmentos de texto de las líneas 0 y 1 también se mantienen con la misma longitud.

El cuerpo de la función de bucle se repite hasta que se apaga el Arduino. Por lo tanto, ambas cadenas largas siguen desplazándose en las líneas 0 y 1 del módulo LCD.

Arduino no admite funciones de manipulación de cadenas estilo C. De lo contrario, el boceto podría reducirse a unas pocas líneas almacenando la cadena completa en una variable y luego cortándola en cada paso para pasar a la DDRAM del módulo LCD. Incluso si la biblioteca de cadenas C estándar hubiera sido compatible, el uso de la función de manipulación de cadenas habría aumentado el espacio ocupado por el programa integrado.

En el próximo tutorial, analizaremos cómo mostrar caracteres personalizados en la pantalla LCD de caracteres.

Vídeo de demostración

(tagsToTranslate)Arduino

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.