しなぷすのハード製作記

KanaLiquidCrystalライブラリ

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
2013年10月03日 Ver. 1.00公開。
2015年06月01日 Ver. 1.01公開。
print関数で半角カナを簡単に表示
print関数で半角カナを簡単に表示

Arduinoでキャラクタ液晶に半角カナを表示する時に、文字化けしない様に工夫した、液晶表示ライブラリです。

目次

1. はじめに … 1ページ
2. 半角カナの文字化けについて … 1ページ
3. 対応するArduino IDEのバージョン … 1ページ
4. KanaLiquidCrystalライブラリのインストール方法 … 1ページ
5. KanaLiquidCrystalライブラリの使い方 … 1ページ
6. MGLCDライブラリのご紹介 … 1ページ

1.はじめに

Arduino IDEには、標準で、LiquidCrystalライブラリという、キャラクタ型LCD(液晶)を制御するためのライブラリが付いています。たいていのキャラクタ型LCDはこのライブラリで制御できるため、多くの人に使われています。しかし、LiquidCrystalライブラリで半角カナを表示しようと思って、文字化けに悩んだ人も多いのではないでしょうか?

そこで、LiquidCrystalライブラリを拡張して、半角カナをprint関数の中で直接記述しても、文字化けしないライブラリを作りました。名づけてKanaLiquidCrystalライブラリです。

2.半角カナの文字化けについて

試しに、以下のスケッチを、お手持ちのArduinoとキャラクタ型液晶で実行してみてください。半角カナが文字化けして表示されます。なお、このスケッチのLCDのピン接続は、スイッチサイエンスで販売しているLCDシールドキット(緑)を仮定しています。ピン接続が違う場合は、それにあわせてスケッチの修正が必要です。

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
{
  lcd.begin(16,2);
  lcd.print("Hello コンニチハ");
}

void loop()
{
}

私の場合、このスケッチを実行すると、次の様な画面になりました。

写真1、LiquidCrystalライブラリでlcd.print"Hello コンニチハ";を実行した結果
写真1、LiquidCrystalライブラリでlcd.print"Hello コンニチハ";を実行した結果

lcd.print("Hello コンニチハ");の"Hello "までは正常に表示されているのですが、その後の"コンニチハ"が文字化けしています。実は、Arduino IDEで半角カナを入力すると、半角文字なのに、1文字当たり3バイトで内部表現されます。ここでは詳しい話に立ち入りませんが、詳しい話がMGLCDライブラリのSetCodeMode関数の説明ページに載っています。

上記のページでも解説していますが、半角カナを正常に表示するためには、文字コード表を参照して、次の様にスケッチを書き換える必要があります。

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
{
  lcd.begin(16,2);
  lcd.print("Hello \xba\xdd\xc6\xc1\xca");
}

void loop()
{
}
写真2、LiquidCrystalライブラリでlcd.print"Hello \xba\xdd\xc6\xc1\xca";を実行した結果
写真2、LiquidCrystalライブラリでlcd.print"Hello \xba\xdd\xc6\xc1\xca";を実行した結果

今度は文字化けせずに液晶に表示されていますが、スケッチの方が暗号のようになっています。(16進数で文字コードを直接書いているから) これでは、とても読みにくいスケッチになってしまいます。

このような問題を解決するために作ったのが、KanaLiquidCrystalライブラリです。このライブラリは、LiquidCrystalライブラリに、半角カナ表示の機能を付け加えるライブラリですので、必ずLiquidCrystalライブラリと組み合わせて使います。

KanaLiquidCrystalライブラリを使うと、先ほどのスケッチが、次の様になります。

#include <KanaLiquidCrystal.h>
#include <LiquidCrystal.h>

KanaLiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
{
  lcd.begin(16,2);
  lcd.kanaOn(); // 半角カナの表示を許可する
  lcd.print("Hello コンニチハ"); // 文字化けせずに表示される
}

void loop()
{
}
写真2(再掲)、KanaLiquidCrystalライブラリでlcd.print"Hello コンニチハ";を実行した結果
写真2(再掲)、KanaLiquidCrystalライブラリでlcd.print"Hello コンニチハ";を実行した結果

この様に、lcd.kanaOn();を実行すると、それ以降、print関数内でカナ文字を使っても、文字化けすることなくLCDに表示されるようになります。

広告

3.対応するArduino IDEのバージョン

KanaLiquidCrystalライブラリのバージョンにより、対応するArduino IDEのバージョンが異なりますので、ご注意ください。(下記の表を参照)

表1、KanaLiquidCrystalライブラリのバージョンと、対応するArduino IDE
KanaLiquidCrystalライブラリ
のバージョン
対応するArduino IDE
のバージョン
動作検証に用いた
Arduino IDE
1.00 1.0.1~1.0.6 Windows版Arduino IDE 1.0.1、1.0.4および1.0.5
1.01以降 1.0.1~1.0.6および1.6.X Windows版Arduino IDE 1.0.6、および1.6.4

また動作検証は、Arduino MEGA2560LCDシールドキット(緑)の組み合わせで行いましたが、ライブラリに機種依存性のあるコードを含まないので、他の8ビットのArduinoでも動作すると思います。

4.KanaLiquidCrystalライブラリのインストール方法

KanaLiquidCrystalライブラリは、次のリンクからダウンロードできます。

KanaLiquidCrystalライブラリ Ver1.01 KLCD_101.zip (5kB)リリースノート

古いバージョンのKanaLiquidCrystalライブラリをお使いの場合は、次のリンクからダウンロードできます。

Ver1.00 KLCD_100.zip (4kB) (2013/10/03公開)

ダウンロードしたZIPファイルを解凍すると、KanaLiquidCrystalというフォルダができます。それをArduinoのスケッチブックのフォルダ(Windowsなら、通常は マイドキュメント\Arduino)の下の、librariesというフォルダの中に、移動(またはコピー)すると、インストールが完了します。もし、librariesというフォルダがなければ、librariesフォルダを作成してから、移動(またはコピー)してください。なお、移動(またはコピー)の操作は、Arduino IDEが起動していない状態で行ってください。

図1、KanaLiquidCrystalフォルダのコピー
図1、KanaLiquidCrystalフォルダのコピー

5.KanaLiquidCrystalライブラリの使い方

KanaLiquidCrystalライブラリの使い方は、LiquidCrystalライブラリの使い方とほぼ一緒なので、LiquidCrystalライブラリ用のスケッチをKanaLiquidCrystalライブラリ用に書き換える方法を説明します。

LiquidCrystalライブラリを使うスケッチは、必ずLiquidCrystal.hをインクルードしているはずですが、それに追加して、KanaLiquidCrystal.hもインクルードしてください。どちらを先にインクルードするかは重要ではありません。

#include <KanaLiquidCrystal.h> // この行を追加する
#include <LiquidCrystal.h>

また、LiquidCrystalライブラリを使うスケッチは、LiquidCrystalクラスの変数(名前はlcdにするのが慣例)を宣言している行があるはずですが、KanaLiquidCrystalクラスに変更してください。

// LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LiquidCrystalライブラリを使う場合は、こういう行があるはず。
KanaLiquidCrystal lcd(12, 11, 5, 4, 3, 2); // KanaLiquidCrystalクラスに変更する。

以上で、LiquidCrystalライブラリ用のスケッチをKanaLiquidCrystalライブラリ用に書き換えられましたが、まだ半角カナをprint関数で使えるようにはなっていません。次の行をスケッチのどこかに追加してください。この行を実行して以降は、半角カナが文字化けせずに表示されるようになります。通常はsetup関数の中で1度実行すればOKです。

lcd.kanaOn(); // この行を実行して以降、半角カナは文字化けせずに表示されます。

以上の手順で半角カナが表示できるようになりますが、場合によってはこの機能が邪魔になる事があります。その時は、次の行を実行してください。この行の実行以降は、文字変換(3バイトで表現された半角カナの1バイト表現への変換)を行わなくなります。つまり、LiquidCrystalと同じ動作をします。

lcd.kanaOff(); // この行を実行して以降、文字変換を行わなくなる。

また半角カナを表示したくなったら、lcd.kanaOn();を実行すれば、OKです。

Arduino IDEのファイル→スケッチの例→KanaLiquidCrystal→HelloWorldメニューから、サンプルスケッチを開けますので、こちらも参考にしてください。

図2、HelloWorldのサンプルスケッチを開く
図2、HelloWorldのサンプルスケッチを開く

6.MGLCDライブラリのご紹介

もともと、print関数内で半角カナを使ってもLCDの文字化けをしないようにしたいと思ったのは、MGLCDライブラリという、グラフィックLCD用のライブラリを作っていた時でした。MGLCDライブラリは、S12232ZASG12232CSG12864ASLB-GBといったグラフィックLCD用のライブラリで、直線や円などのグラフィック表示だけでなく、ライブラリにフォントを内蔵していて、文字も表示できるものです。

MGLCDライブラリのprint関数で半角カナを表示するために作ったプログラムの一部を、LiquidCrystalライブラリの拡張に流用しできたのが、今回作成したKanaLiquidCrystalライブラリです。

Arduinoに接続したLCDにたくさんの文字を表示したい場合、大型のキャラクタ型LCDを使うよりは、グラフィックLCDを使う方が安くつく場合もあります。このような場合にはMGLCDライブラリの使用も是非ご検討ください。

MGLCDライブラリは、122X32モノクログラフィックLCDシールドのように、たった2本のI/Oピンで動作するグラフィックLCDもサポートしていますので、こちらも合わせてご検討いただけると幸いです。

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー

このページで使われている用語の解説

関連ページ

このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
サイトマッププライバシーポリシーお問い合わせ用語集
しなぷすのハード製作記