¿Cómo lidiar con caracteres Unicode con pantallas LCD de caracteres?


8

Me gustaría comprar una pantalla LCD de Arduino para mostrar algunos resultados de una llamada http web; la API web devuelve un texto JSON codificado en UTF-8.

He leído que ICU es el camino a seguir para manejar Unicode en programas C / C ++ para Arduino.

Mis preguntas:
¿Podré mostrar caracteres UTF-8 en este tipo de pantalla ?
¿Hay pantallas LCD de caracteres (asequibles) capaces de mostrar caracteres UTF-8?


3
¿Estamos hablando de una pantalla gráfica o una pantalla de caracteres segmentados? En una pantalla segmentada, obviamente no puede mostrar ningún signo que no se ajuste al patrón de segmento. Para usos "occidentales" no ascii, probablemente puede recurrir al carácter base (sin acento, etc.). Para otros guiones es muy probable que no tengas suerte.
drxzcl

Respuestas:


6

No estoy muy familiarizado con Arduino, pero veámoslo desde la perspectiva de la pantalla LCD.

Prácticamente todos los LCD de caracteres populares usan el controlador HD44780 en estos días (eso es lo que admite la biblioteca LiquidCrystal ). Este controlador no admite UTF-8 directamente, cada carácter está representado por un solo byte.

Por lo tanto, debe convertir UTF-8 a caracteres de 8 bits manualmente. El controlador tiene un generador de caracteres incorporado con 208 5x8 y 32 5x10 caracteres, más hasta 8 caracteres definidos por el usuario (consulte createChar ). Debe asignar cada carácter de entrada a uno de los caracteres predefinidos / personalizados; obviamente, solo puede mostrar un subconjunto de caracteres UTF8, debe decidir qué caracteres desea / puede mostrar.

La conversión en sí debería ser bastante sencilla: solo necesita iterar sobre la cadena UTF8, asignando cada carácter a un solo byte. Lo más probable es que desee utilizar tablas de búsqueda para que sea simple. Avíseme si esto necesita más explicaciones.


gracias; ¿Crees que este tipo de pantalla gráfica Tft podría ofrecer un mejor soporte Unicode?
systempuntoout

1
Esta es una pantalla gráfica, por lo que puedo ver, por lo que puede mostrar casi cualquier cosa que desee. La biblioteca proporcionada también proporciona funciones para pintar texto, pero de nuevo solo admite caracteres de 8 bits. Por lo tanto, con esta pantalla, necesita el mismo tipo de conversión que se describió anteriormente y usar la biblioteca tal como está, o debe modificar la biblioteca para que sea compatible con UTF8. Tenga en cuenta que el uso de una pantalla gráfica hará que su código sea más grande: necesita una biblioteca adicional, fuente, etc. Pero al menos tiene el control total del conjunto de caracteres disponible: la fuente es parte del software.
Code Painters

4

Unicode es complicado y grande, en su totalidad es demasiado grande para un Arduino. En la versión actual hay en total más de 100000 caracteres, incluidos cuneiformes, jeroglíficos, klingon, y sin mencionar muchos miles de caracteres chinos.

Entonces, si realmente quieres mostrar algunos caracteres Unicode en un Arduino:

  • Obtenga una pantalla gráfica. El que menciona es una pantalla de caracteres, solo puede mostrar un conjunto mayormente fijo de 256 caracteres.

  • Defina un pequeño subconjunto de caracteres que desea manejar. Hay algunos subconjuntos predefinidos, por ejemplo, los subconjuntos europeos multilingües se ven bien.

  • Obtenga algunas fuentes y quítelas al conjunto que necesita. Tenga en cuenta que incluso la visualización puede ser mucho más complicada de lo que está acostumbrado en ASCII, debido a la combinación de caracteres, escritura bidireccional y demás. Lo mejor es, probablemente, apegarse a los caracteres latinos sin combinar acentos. El cirílico y el griego también deberían estar bien, al igual que cualquier cosa que sea una simple secuencia de caracteres de izquierda a derecha.

  • Tal vez podría usar un poco de memoria externa para almacenar las fuentes.

Luego, hay muchos otros temas que probablemente no necesite, por ejemplo, ordenar y buscar, ver el estándar Unicode y sus anexos (¡es grande!).

Olvídese de la UCI, necesita megabytes de memoria.


Tendré que intentar poner (¡un subconjunto!) De UCI en el Arduino ... debería ser divertido.
Steven R. Loomis
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.