Como lidar com caracteres unicode com displays LCD de caracteres?

8

Gostaria de comprar uma tela LCD do Arduino para exibir alguns resultados de uma chamada http da Web; a API da Web retorna um texto JSON codificado em UTF-8.

Eu li que a UTI é o caminho a seguir para lidar com Unicode em programas C / C ++ para Arduino.

Minhas perguntas:
poderei exibir caracteres UTF-8 para esse tipo de tela ?
Existem telas LCD de caracteres (acessíveis) capazes de exibir caracteres UTF-8?

systempuntoout
fonte
3
Estamos falando sobre uma exibição gráfica ou uma exibição de caracteres segmentados? Em uma exibição segmentada, obviamente não é possível exibir nada que não se encaixe no padrão de segmento. Para usos não ocidentais "ocidentais", você provavelmente pode voltar ao caractere base (sem acentuação etc.). Para outros scripts, você provavelmente não terá sorte.
precisa saber é o seguinte

Respostas:

6

Eu não estou muito familiarizado com o Arduino, mas vamos dar uma olhada na perspectiva do LCD.

Praticamente todos os LCDs de caracteres populares usam o controlador HD44780 atualmente (é isso que LiquidCrystal biblioteca suporta). Este controlador não suporta UTF-8 diretamente, cada caractere é representado por um único byte.

Portanto, você precisa converter manualmente os caracteres UTF-8 para 8 bits. O controlador possui um gerador de caracteres interno com 208 caracteres 5x8 e 32 caracteres 5x10, além de até 8 caracteres definidos pelo usuário (consulte createChar ). Você precisa mapear todos os caracteres de entrada para um dos caracteres predefinidos / personalizados - obviamente, você pode exibir apenas um subconjunto de caracteres UTF8; você precisa decidir quais caracteres deseja / pode exibir.

A conversão em si deve ser bem direta - basta iterar sobre a string UTF8, mapeando cada caractere para um único byte. Provavelmente, você desejará usar uma tabela de pesquisa para simplificar. Deixe-me saber se isso precisa de mais explicações.

Pintores de código
fonte
obrigado; você acha que esse tipo de tela gráfica Tft poderia oferecer um melhor suporte unicode?
Systempuntoout
1
Esta é uma exibição gráfica, tanto quanto posso ver, para que possa exibir praticamente qualquer coisa que você desejar. A biblioteca fornecida fornece funções para pintar texto também, mas, novamente, suporta apenas caracteres de 8 bits. Portanto, com essa exibição, você precisa do mesmo tipo de conversão descrito acima e usa a biblioteca como está, ou precisa modificar a biblioteca para dar suporte ao UTF8. Lembre-se de que o uso de uma exibição gráfica aumentará o seu código - você precisa de uma biblioteca, fonte, etc. extras, mas pelo menos você tem controle total do conjunto de caracteres disponível - a fonte faz parte do software.
Código Pintores
4

O Unicode é complicado e grande, na sua totalidade é grande demais para um Arduino. Na versão atual, existem no total mais de 100000 caracteres, incluindo cuneiforme, hieróglifo, klingon e sem mencionar muitos milhares de caracteres chineses.

Portanto, se você realmente deseja mostrar alguns caracteres Unicode em um Arduino:

  • Obtenha uma exibição gráfica. O que você mencionou é uma exibição de caracteres, só pode mostrar um conjunto fixo de 256 caracteres.

  • Defina um pequeno subconjunto de caracteres que você deseja manipular. Existem alguns subconjuntos predefinidos, por exemplo, os subconjuntos europeus multilíngues têm uma boa aparência.

  • Obtenha algumas fontes e reduza-as para o conjunto necessário. Observe que até a exibição pode ser muito mais complicada do que a que você está acostumado no ASCII, devido à combinação de caracteres, escrita bidirecional e outras coisas. Provavelmente, o melhor é manter os caracteres latinos sem acentos combinados. Cirílico e grego também devem estar bem, assim como qualquer coisa que seja uma sequência simples de caracteres da esquerda para a direita.

  • Talvez você possa usar alguma memória externa para armazenar as fontes.

Depois, há muitos outros tópicos dos quais você provavelmente não precisa, por exemplo, classificação e pesquisa, consulte o padrão Unicode e seus anexos (é grande!).

Esqueça a UTI, ele precisa de megabytes de memória.

starblue
fonte
Vou ter que tentar colocar (um subconjunto!) De UTI no Arduino .. deve ser divertido.
Steven R. Loomis