ArduinoでグラフィックLCDを動かす(SG12232C編)(3)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ
2015年06月01日 MGLCDライブラリVer.0.34Aのリリースにあわせて、記述を変更。
写真12、MGLCDライブラリのSpeedTestスケッチの実行時の画面
写真12、MGLCDライブラリのSpeedTestスケッチの実行時の画面

5.モノクログラフィックLCD制御用ライブラリMGLCD

前のページで述べたように、グラフィックLCDモジュールで文字や図形を書くのには、結構な手間がかかります。そこで簡単にグラフィックLCDモジュールを扱えるライブラリを作成しました。名付けてMGLCDライブラリ (Monochrome Graphic LCD library) です。

MGLCDライブラリには、7X5ドットの英数かなフォントを搭載しており、文字列が簡単に表示できます。また、直線、長方形、円などの描画ルーチンもあります。

実は、このライブラリを開発している途中でArduino PLAYGROUNDにglcdという完成度の高いグラフィック液晶用ライブラリがあるのに気が付きました。glcdはSG12232Cに対応していないものの、少し作り変えたらSG12232Cの制御にも使えそうな気がします。でも、勉強を兼ねて、勢いで独自ライブラリを作成しました。MGLCDライブラリはglcdとは別の形で発展させたいという思いもあります。

MGLCDライブラリは、下記リンクからダウンロードできます。このファイルはLGPLライセンスで配布しています。

MGLCD Ver. 0.34A MGLCD_034A.zip (324kB)

6.MGLCDライブラリのインストール・アンインストール

上記リンクからダウンロードしたZIPファイルを解凍すると、MGLCDというフォルダができますので、このフォルダをArduinoのlibraryフォルダにコピーすればインストールは完了です。Arduinoのlibraryフォルダは、Windows XPの環境では

C:\Documents and Settings\ユーザ名\My Documents\Arduino\libraries

になっています。MGLCDライブラリをアンインストールするには、ArduinoのlibraryフォルダからMGLCDフォルダを削除してください。

7.MGLCDライブラリでHello World

とりあえずMGLCDを使ってSG12232Cの画面に何か表示してみたいという人のために、HelloWorld.inoというサンプルスケッチを用意しました。下の図を参考に、Arduino IDEからファイル->スケッチの例->MGLCD->mglcd_SG12232->HelloWorldメニューを選択してください。

図6、HelloWorldスケッチを開く
図6、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の標準関数で、スケッチが起動してからの経過時間をミリ秒単位で返します。

以上の処理で、次の様な画面になります。

写真13、HelloWorldスケッチの実行時の表示
写真13、HelloWorldスケッチの実行時の表示
広告

8.MGLCDライブラリのデモ用スケッチ

Arduino IDEでファイル->スケッチの例->MGLCD->mglcd_SG12232->demoメニューを選んでください。MGLCDの色々な機能のデモ用のスケッチが開きます。

写真14、demoスケッチの実行時の画面(1)
写真14、demoスケッチの実行時の画面(1)
写真15、demoスケッチの実行時の画面(2)
写真15、demoスケッチの実行時の画面(2)
写真16、demoスケッチの実行時の画面(3)
写真16、demoスケッチの実行時の画面(3)
写真17、demoスケッチの実行時の画面(4)
写真17、demoスケッチの実行時の画面(4)
写真18、demoスケッチの実行時の画面(5)
写真18、demoスケッチの実行時の画面(5)
写真19、demoスケッチの実行時の画面(6)
写真19、demoスケッチの実行時の画面(6)
写真20、demoスケッチの実行時の画面(7)
写真20、demoスケッチの実行時の画面(7)
写真21、demoスケッチの実行時の画面(8)
写真21、demoスケッチの実行時の画面(8)
写真22、demoスケッチの実行時の画面(9)
写真22、demoスケッチの実行時の画面(9)
写真23、demoスケッチの実行時の画面(10)
写真23、demoスケッチの実行時の画面(10)

9.描画速度のテスト

Arduino IDEでファイル->スケッチの例->MGLCD->mglcd__SG12232->SpeedTestを選んでください。描画速度のテストのためのスケッチが開きます。glcdライブラリのGLCDdemoと同等の描画をするスケッチです。

写真24、SpeedTestスケッチの実行時の画面
写真24、SpeedTestスケッチの実行時の画面

FPSはFrames Per Secondの略で、一秒間に何フレームかけたかを表わしています。この数字が大きいほど描画が早いことを表わしています。

MGLCDライブラリはArduino Unoで使った場合に、描画速度が速くなるように作ってあります。各Arduinoで何FPS出るかを計測し、表にしてみました。

表2、Arduinoの種類とFPS値
Arduinoの種類 FPS値
Uno 60.60
Mega 2560 10.35
Leonardo 10.29
Pro 328 16MHz 5V 60.60

他にもシリアルポートから受け取った文字列を画面に表示するスケッチもサンプルとして用意していますが、その解説は後ほど行います。

次のページでは、MGLCDライブラリの関数の説明を行います。

目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ

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

関連ページ

Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。