Adafruit_ILI9341に漢字表示機能追加
Adafruit_ILI9341クラスを拡張し、fontxの描画機能を組み込み、漢字を表示できるようになった。クラス名はHumblesoft_ILI9341でGitHubで公開している。zipでダウンロードし、Arduino で”.ZIP形式のライブラリをインストール”すれば使えるようになるはず。
サンプルとして同梱しているのは、文市(あやち)さんがblogで公開されているILフォント、IPAフォントをfontx化したもの。小さいフォントが多いfontxには珍しく、16,24,32dotのフォントが提供されているのがありがたい。今回は16dotのフォントを使用したが、フラッシュの空き容量からすると24dotぐらいまでは使用できそう。
fontxの使用は、通常の文字描画に使用するprint(),println()メソッドで行う。Printクラスのvirtual methodであるwrite()を拡張し、fontxのフォントが設定されていなければ、親クラスのwrite()を呼び出し、設定されていると自前でutf-8のデコード、unicode-shiftjis変換を行い、fontxの文字の描画を行う。C++だと、こんな感じで機能の拡張を行えて便利だ…と久しぶりに思った。
写真はサンプルプログラムkanjiDisp.inoの実行後の状態。ソースプログラムは、こんな感じ。
#include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" #include "Humblesoft_ILI9341.h" IMPORT_BIN("fontx/ILGH16XB.FNT", font_h); IMPORT_BIN("fontx/ILGZ16XB.FNT", font_z); extern uint8_t font_h[], font_z[]; Humblesoft_ILI9341 tft = Humblesoft_ILI9341(); void setup() { delay(100); tft.begin(); tft.setFontx(font_h,font_z); tft.setRotation(3); tft.fillScreen(ILI9341_BLACK); tft.setTextSize(1); tft.print("Humblesoft_ILI9341 漢字表示デモ\nABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); tft.print("\n"); tft.print("このプログラムはILフォントを使用しています。"); tft.print("ILフォントはIPAフォントを元に作成されたfontx形式のフォントです。\n"); tft.setTextSize(4); tft.setTextColor(ILI9341_GREEN); tft.setCursor(0, tft.getCursorY() + 10); tft.print("Hello世界\n"); tft.setCursor(80, tft.getCursorY() + 10); tft.setTextSize(3); tft.setTextColor(ILI9341_YELLOW); tft.print("ILI9341\n"); } void loop() { }
まぁまぁ上手く実装できたのではなかろうか。
あと、NetLCDも対応済。コードを送るだけで漢字を描画できる。
ILI9341にはあと少し拡張したい機能がある。タッチパネルもなんとかしたい。ほかにもやりたいことがいろいろある。さぁ何をしよう。
最近のコメント