2015年06月01日 | MGLCDライブラリVer.0.34Aのリリースにあわせて、記述を変更。 |
前のページで述べたように、グラフィックLCDモジュールで文字や図形を書くのには、結構な手間がかかります。そこで簡単にグラフィックLCDモジュールを扱えるライブラリを作成しました。名付けてMGLCDライブラリ (Monochrome Graphic LCD library) です。
MGLCDライブラリには、7X5ドットの英数かなフォントを搭載しており、文字列が簡単に表示できます。また、直線、長方形、円などの描画ルーチンもあります。
実は、このライブラリを開発している途中でArduino PLAYGROUNDにglcdという完成度の高いグラフィック液晶用ライブラリがあるのに気が付きました。glcdはSG12232Cに対応していないものの、少し作り変えたらSG12232Cの制御にも使えそうな気がします。でも、勉強を兼ねて、勢いで独自ライブラリを作成しました。MGLCDライブラリはglcdとは別の形で発展させたいという思いもあります。
MGLCDライブラリは、下記リンクからダウンロードできます。このファイルはLGPLライセンスで配布しています。
上記リンクからダウンロードしたZIPファイルを解凍すると、MGLCDというフォルダができますので、このフォルダをArduinoのlibraryフォルダにコピーすればインストールは完了です。Arduinoのlibraryフォルダは、Windows XPの環境では
になっています。MGLCDライブラリをアンインストールするには、ArduinoのlibraryフォルダからMGLCDフォルダを削除してください。
とりあえずMGLCDを使ってSG12232Cの画面に何か表示してみたいという人のために、HelloWorld.inoというサンプルスケッチを用意しました。下の図を参考に、Arduino IDEからファイル->スケッチの例->MGLCD->mglcd_SG12232->HelloWorldメニューを選択してください。
HelloWorld.inoはコメントや#ifdefによる条件コンパイルがあって、少々長いスケッチになっていますが、実行に必要のない行を削除すると、次の様になります。
#include <mglcd.h>
static const TLcdPinAssignTable PinAssignTable={
A0_DI : A3, // A0 for SG12232, D/I for SG12864
CS1_E1 : A0, // CS1
CS2_E2 : A1, // CS2
E : A4,
RW : A2,
DB0 : 8 ,
DB1 : 9 ,
DB2 : 10,
DB3 : 11,
DB4 : 4 ,
DB5 : 5 ,
DB6 : 6 ,
DB7 : 7
}; // PinAssignTable;
static mglcd_SG12232 MGLCD(PinAssignTable);
void setup()
{
while(MGLCD.Reset());
MGLCD.print("Hello World!");
} // setup
void loop()
{
MGLCD.Locate(0,1);
MGLCD.print(millis());
} // loop
最初に、MGLCDライブラリのヘッダファイルをインクルードしています。
#include <mglcd.h>
次に、ピン接続の宣言を行っています。TLcdPinAssignTalbe型の定数の構造体に、LCD側のピンとArduino側のピンの対応表を記述します。(static const TLcdPinAssignTableとなっていますが、staticを取ってconst TLcdPinAssignTableとしても構いません) 構造体定数の名前は何でもいいのですが、ここではPinAssignTableとしています。
static const TLcdPinAssignTable PinAssignTable={
A0_DI : A3, // A0 for SG12232, D/I for SG12864
CS1_E1 : A0, // CS1
CS2_E2 : A1, // CS2
E : A4,
RW : A2,
DB0 : 8 ,
DB1 : 9 ,
DB2 : 10,
DB3 : 11,
DB4 : 4 ,
DB5 : 5 ,
DB6 : 6 ,
DB7 : 7
}; // PinAssignTable;
次に、mglcd_SG12232型のオブジェクト変数を宣言します。
static mglcd_SG12232 MGLCD(PinAssignTable);
他のファイル(ライブラリなど)との名前の衝突を避けるためにstatic宣言していますが、staticを取っても構いません。MGLCDというの が、オブジェクト変数の名前です。このように宣言すると、前述のPinAssignTableにしたがって配線したLCDを制御できるようになります。こ の宣言以降、MGLCD.関数名(引数,…)という形式で、LCDの制御関数が使えるようになります。
上記の例では変数名がMGLCDとなっていますが、他の変数名でも結構です。例えば
static mglcd_SG12232 hoge(PinAssignTable);
と宣言するとhogeが変数名になりますが、この場合はLCDの制御関数をhoge.関数名(引数,…)という形式で呼び出すことになります。
setup関数の中では、まず次の様にLCDの初期化をしています。
while(MGLCD.Reset());
MGLCD.Reset()が初期化の関数です。SG12232CをArduinoから直接制御する場合Reset関数は必ず0を返しますので、
MGLCD.Reset();
としても問題ありません。ただ、グラフィックLCDシールド等とソフトの互換性を持たせるために、while文でループを回しています。詳しい話はこのページの中ほどに書いてあります。
次の
MGLCD.print("Hello World!");
で、画面にHello World!と表示しています。
Loop関数では、画面の2行目に、経過時間をミリ秒単位で表示しています。
MGLCD.Locate(0,1);
は、表示位置を2行目の先頭に移動する事を表わしています。
MGLCD.print(millis());
は、経過時間をミリ秒単位で表示することを表わしています。millis()は、Arduinoの標準関数で、スケッチが起動してからの経過時間をミリ秒単位で返します。
以上の処理で、次の様な画面になります。
Arduino IDEでファイル->スケッチの例->MGLCD->mglcd_SG12232->demoメニューを選んでください。MGLCDの色々な機能のデモ用のスケッチが開きます。
Arduino IDEでファイル->スケッチの例->MGLCD->mglcd__SG12232->SpeedTestを選んでください。描画速度のテストのためのスケッチが開きます。glcdライブラリのGLCDdemoと同等の描画をするスケッチです。
FPSはFrames Per Secondの略で、一秒間に何フレームかけたかを表わしています。この数字が大きいほど描画が早いことを表わしています。
MGLCDライブラリはArduino Unoで使った場合に、描画速度が速くなるように作ってあります。各Arduinoで何FPS出るかを計測し、表にしてみました。
Arduinoの種類 | FPS値 |
---|---|
Uno | 60.60 |
Mega 2560 | 10.35 |
Leonardo | 10.29 |
Pro 328 16MHz 5V | 60.60 |
他にもシリアルポートから受け取った文字列を画面に表示するスケッチもサンプルとして用意していますが、その解説は後ほど行います。
次のページでは、MGLCDライブラリの関数の説明を行います。