しなぷすのハード製作記

Arduino用122X32モノクログラフィックLCDシールド(Rev.A)の製作(5)

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) 次のページへ

11.MGLCDライブラリの主な関数(LED制御、ボタン状態取得)

グラフィックLCDシールドには、LCDだけではなく、小さなLEDが1つとボタン(タクトスイッチ)が4つ付いています。LEDの制御やボタンの状態の取得も、MGLCDライブラリを使ってできます。

11-1.Led関数

LEDの制御には、Led関数を使います。Led関数の構文は次の通りです。

MGLCD.Led(LED番号,LEDの状態)

LED番号には、LEDの番号を指定します。LED番号は0~LEDの数-1の範囲の整数です。今回製作したグラフィックLCDシールドにはLEDが1つしかないため、LED番号は常に0となります。

LEDの状態は、Led関数実行後のLEDの状態を表します。LEDの状態を表す定数が、次の通り宣言されています。

表1、LEDの状態を表わす定数
定数 意味
MGLCD_LED_OFF 値は0。LEDを消灯することを表す
MGLCD_LED_ON 値は1。LEDを点灯することを表す
MGLCD_LED_BLINK 値は2。LEDを点滅させることを表す
MGLCD_LED_TOGGLE 値は3。Led関数呼び出し前にLEDが点灯している場合は、消灯させることを意味する。Led関数呼び出し前にLEDが消灯している場合は、点灯させることを意味する。Led関数呼び出し前にLEDが点滅していた場合は、Led関数の呼び出しがエラーになる

例えば、次の例はLEDを消灯させます。

MGLCD.Led(0,MGLCD_LED_OFF);

Led関数の返り値はLed関数呼出し後のLEDの状態です。(後述する、LEDの数の取得の際は例外)得られる値は、MGLCD_LED_OFF、MGLCD_LED_ON、MGLCD_LED_BLINKの3つの値の内1つになります。通信エラーなどが発生した場合は、Led関数は負の値を返します。

Led関数の第2引数をMGLCD_GET_LED_STATE(値が127の定数)に指定すると、LEDの状態を変更せず、単に現在のLEDの状態を取得します。得られる値は、MGLCD_LED_OFF、MGLCD_LED_ON、MGLCD_LED_BLINKの3つの値の内1つになります。

具体的には、次の呼び出しでLEDの状態が取得できます。

MGLCD.Led(0,MGLCD_GET_LED_STATE)

また、シールドに付いているLEDの数は、次の様にして取得できます。

MGLCD.Led(MGLCD_GET_LED_NUM)

このように第1引数をMGLCD_GET_LED_NUM(値は126)にして、第2引数を省略すると、返り値がLEDの数になります。今回製作したグラフィックLCDシールドはLEDが1個なので、1が返ります。

11-2.ReadButton関数

ボタン(タクトスイッチ)の状態の取得には、ReadButton関数を使います。ReadButton関数の構文は次の通りです。

MGLCD.ReadButton(ボタン番号)

ボタン番号には、ボタンの番号を指定します。ボタン番号は0~ボタンの数-1の範囲の整数です。今回製作したグラフィックLCDシールドにはボタンが4つあるので、0~3の数を指定します。

ReadButton関数の返り値として、以下の定数が宣言されています。

表2、ReadButton関数の返り値として使われる定数
定数 意味
MGLCD_BUTTON_OFF 値は0。ボタンが押されていないことを示す
MGLCD_BUTTON_ON 値は1。ボタンが押されていることを示す

ボタンの状態の取得に成功すると、上記のいずれかの値が返りますが、ボタン番号が不正だったり、通信エラーが発生するなどしてボタンの状態が取得できないと、負の値を返します。

ボタンの数を取得するには、次の様にします。

MGLCD.ReadButton(MGLCD_GET_BUTTON_NUM)

MGLCD_GET_BUTTON_NUMは、ボタンの数を取得する際に使う定数で、値は127です。今回製作したグラフィックLCDシールドにはボタンが4つあるので、ReadButton(MGLCD_GET_BUTTON_NUM)は4を返します。

11-3.Led関数とReadButton関数を使ったデモスケッチ

次に、Led関数とReadButton関数を使ったデモスケッチを示します。スケッチを実行すると、LEDの個数、ボタンの個数、および各ボタンの状態を表示します。また、LEDの点灯/消灯を、SW1の状態に連動させます。

#include <mglcd.h>

mglcd_serial MGLCD(&Serial,500000);

void setup()
{
  // LCDの初期化
  while(MGLCD.Reset());

  // LEDの個数の表示
  MGLCD.Locate(0,0);
  MGLCD.print("LEDs:");
  MGLCD.print(MGLCD.Led(MGLCD_GET_LED_NUM));

  // ボタンの個数の表示
  MGLCD.print("  Buttons:");
  MGLCD.println(MGLCD.ReadButton(MGLCD_GET_BUTTON_NUM));

  // SW1 SW2・・・を表示
  for(int i=0; i<MGLCD.ReadButton(MGLCD_GET_BUTTON_NUM); i++) {
    MGLCD.Locate(i*5,2);
    MGLCD.print("SW");
    MGLCD.print(i+1);
  } // for i
}

void loop ()
{
  // ボタンの状態を取得し、表示する
  for(int i=0; i<MGLCD.ReadButton(MGLCD_GET_BUTTON_NUM); i++) {
    MGLCD.Locate(i*5,3);
    if(MGLCD.ReadButton(i)==MGLCD_BUTTON_OFF) {
      MGLCD.print("OFF");
    } else {
      MGLCD.print("ON ");
    }
  } // for i

  // SW1の状態に応じてLED1を点灯/消灯する
  if(MGLCD.ReadButton(0)==MGLCD_BUTTON_OFF) { // SW1は0番目のボタンであることに注意
    MGLCD.Led(0,MGLCD_LED_OFF); // LEDを消灯else {
    MGLCD.Led(0,MGLCD_LED_ON); // LEDを点灯
  }
}
写真20、デモスケッチの実行画面
↑ 画像をクリックすると拡大
写真20、デモスケッチの実行画面

次のページではMGLCDライブラリに付属するデモスケッチの解説をします。

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) 次のページへ

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

関連ページ

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