文字LCDディスプレイでUnicode文字を処理する方法は?


8

ArduinoからLCD画面を購入して、Web http呼び出しからの結果を表示したいと思います。Web APIは、UTF-8でエンコードされたJSONテキストを返します。

私は、ICUがArduinoのC / C ++プログラムでUnicodeを処理する方法であることを読みました。

私の質問:この種類の画面に
UTF-8文字を表示できますか?
UTF-8文字を表示できる(手頃な)文字LCD画面はありますか?


3
私たちは、グラフィック表示またはセグメント化された文字表示について話し合っていますか?セグメント化されたディスプレイでは、セグメントパターンに適合しないものは明らかに表示できません。「西洋」の非ASCIIの使用の場合は、おそらくベース(アクセントなしなど)の文字にフォールバックできます。他のスクリプトについては、運が悪い可能性が高いです。
drxzcl 2011

回答:


6

Arduinoについてはあまり詳しくありませんが、LCDの観点から見てみましょう。

最近、ほとんどすべての人気のキャラクターLCDがHD44780コントローラーを使用しています(これがLiquidCrystalライブラリでサポートされています)。このコントローラーはUTF-8を直接サポートしていません。各文字は1バイトで表されます。

したがって、UTF-8を手動で8ビット文字に変換する必要があります。コントローラーには、208個の5x8および32個の5x10文字に加えて、最大8個のユーザー定義文字(createCharを参照)を備えた組み込みの文字ジェネレーターがあります。すべての入力文字を事前定義/カスタム文字の1つにマッピングする必要があります。明らかに、UTF8文字のサブセットのみを表示できます。表示する/表示できる文字を決定する必要があります。

変換自体はかなり単純なはずです。UTF8文字列を反復処理して、すべての文字を1バイトにマッピングするだけです。ほとんどの場合、ルックアップテーブルを使用して単純にする必要があります。これについてさらに説明が必要な場合はお知らせください。


ありがとうございました; この種のTftグラフィカルディスプレイは、より優れたUnicodeサポートを提供できると思いますか?
systempuntoout 2011

1
これは私が見る限りグラフィックスディスプレイなので、ほとんど何でも表示できます。提供されるライブラリは、テキストをペイントする関数も提供しますが、8ビット文字のみをサポートします。したがって、この表示では、上記と同じ種類の変換を行ってライブラリをそのまま使用するか、ライブラリを変更してUTF8をサポートする必要があります。グラフィックディスプレイを使用するとコードが大きくなることに注意してください。追加のライブラリやフォントなどが必要です。ただし、少なくとも使用可能な文字セットを完全に制御できます。フォントはソフトウェアの一部です。
コード

4

Unicodeは複雑で大きく、全体としてArduinoには大きすぎます。現在のバージョンでは、楔形文字、象形文字、クリンゴン語を含め、合計で10万文字を超え、数千の漢字は言うまでもありません。

したがって、ArduinoでいくつかのUnicode文字を表示したい場合は、次のようにします。

  • グラフィックディスプレイを取得します。あなたが言及するのは文字ディスプレイであり、256文字のほとんど固定されたセットしか表示できません。

  • 処理する文字の小さなサブセットを定義します。定義済みのサブセットがいくつかあります。たとえば、多言語のヨーロッパのサブセットは見栄えがします。

  • いくつかのフォントを入手し、必要なセットにそれらを取り除きます。文字の組み合わせ、双方向の書き込みなどにより、表示でさえ、ASCIIで使用するものよりもはるかに複雑になる可能性があることに注意してください。おそらく、アクセントを組み合わせずにラテン文字に固執するのが最善でしょう。単純な左から右への文字のシーケンスであるものと同様に、キリル文字とギリシャ語も大丈夫です。

  • フォントを保存するために外部メモリを使用することもできます。

次に、おそらく必要ない他のトピックがたくさんあります。たとえば、並べ替えや検索については、Unicode標準とその付属文書(大きいです)を参照してください。

ICUは忘れてください。メガバイトのメモリが必要です。


ICUの(サブセット!)をArduinoに配置してみる必要があります。楽しいはずです。
スティーブンR.ルーミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.