記事

I2CインターフェースLCDモジュール用のライブラリを作る(3)ライブラリ化(2)

■I2CインターフェースLCDモジュール用のプログラムをライブラリ化(2)
 対象となるI2CインターフェースのLCDモジュールは当面、ACM1602AQM1602AQM0802を対象にします。それぞれの特徴は、次のようになります。

◆ACM1602
電源電圧 3.3V(5Vで使用時はバックライトの電流制限が必要)
 輝度調整;ボリュームで電源電圧を分圧した電圧をVoに加える。
◆AQM1602
電源電圧 3.1V~5.5V
 拡張コマンドで電源電圧、輝度調整を行う。初期化プログラムで設定。
◆AQM0802
電源電圧 3.1V~5.5V
拡張コマンドで電源電圧、輝度調整を行う。初期化プログラムで設定。

I2CインターフェースのLCDモジュールを利用する条件
① I2Cインターフェースのデバイスのアドレス0x3E(AQM)、0x50(ACM)
② 表示行数(2行をデフォルトとする)
③ カーソルの表示の有無(カーソルの表示オフをデフォルトとする)

AQM1602、AQM0802の初期化処理に必要な事項
 電源電圧が3.3Vか5Vなのか、輝度の設定値、I2Cインターフェースのデバイス・アドレスはAQMXXXXなら0x3E、ACM1602なら0x50となります。
 i2clcdをインスタンス化するときに、これら最大3個の引数をプログラムに引き渡します。

コンストラクタ
 前回のテストでは、コンストラクタにi2cデバイスのアドレスを引数としていました。今回はアドレスのほかに輝度、電源電圧の値を設定してみます。次に示すように、クラス名と同じ型名のつかない関数メンバがコンストラクタです。

  public:
  i2clcd();
  i2clcd(byte i2cadr);
  i2clcd(byte lbr, byte i2cadr);
  i2clcd(byte v5or33, byte lbr, byte i2cadr);

i2clcd()
 i2clcd()は引数のないコンストラクタです。プログラムの中で実際にインスタンス化するときはi2clcd lcd;とかっこは記述しません。引数のないものは()をつけるとエラーとなり少々解決のために時間を要してしまいました。引数のないこのタイプは、ACM1602が輝度の設定、電源電圧についてもハードウェア側の対応だけで済みます。またI2Cデバイスのアドレスも0x50と固定となります。そのため、ACM1602を利用する場合はこの引数のないコンストラクタが対応します。

i2clcd(byte i2cadr)
 引数のbyte i2cadrはI2CインターフェースのLCDモジュールのデバイス・アドレスです。AQMシリーズの場合は電源電圧を3.3V、輝度はデフォルトの0x13とします。

i2clcd(byte lbr, byte i2cadr);
 引数のbyte i2cadrはI2CインターフェースのLCDモジュールのデバイス・アドレスです。byte lbrはAQMシリーズの輝度となります。輝度はデフォルトの0x23とします。AQMシリーズの場合は電源電圧を3.3V(3)と設定します。

i2clcd(byte v5or33, byte lbr, byte i2cadr);
 引数のbyte i2cadrは、I2CインターフェースのLCDモジュールのデバイス・アドレスです。byte lbrはAQMシリーズの輝度となります。輝度はデフォルトの0x13とします。AQMシリーズの拡張命令のBONの設定の指標となる電源電圧を3.3V(3)または5V(5)に設定します。BONビットは3(3.3V)のときBON=1、5(5V)のときBON=0と設定します。

クラス i2clcdのインスタンスlcd
 実際のI2Cインターフェースの処理を行うオブジェクトは、引数を使用しないコンストラクタを使用する場合は、

    i2clcd lcd;


とプログラムの中で、I2CインターフェースのLCDモジュールの制御を行うi2clcd(クラス)のインスタンスを示すインスタンスlcdを定義します。インスタンス名は任意のわかりやすい名前を付けます。今までパラレル・インターフェースのLCDモジュールで利用していたlcdを使用しました。

クラス i2clcdのアドレスを指定したインスタンスの指定
 インスタンスの設定時に引数として指定する場合次のように設定します。

    i2clcd lcd(0x3E);


 この場合のインスタンス名も、わかりやすい任意の名称を付けることができます。i2clcdのライブラリでは引数はアドレス、輝度、電源電圧の3引数まで用意されています。引数0から3までそれぞれ指定した引数に応じた適切なコンストラクタがインストールされます。
 次回は、複数のコンストラクタから設定されたデバイスの設定値でそれぞれのデバイスに応じたプログラムを記述します。

(2017/10/8 V1.0)

<神崎康宏>

 

Arduino I2CインターフェースLCDモジュール用のライブラリを作る

(1) ライブラリの構成

(2) 基本形を作成

(3) ライブラリ化(2)

(4) ライブラリ化(3)

(5) ライブラリ化(4)

(6) 機能の動作確認

(7) ライブラリ完成