グラフィックLCDシールドには、LCDだけではなく、小さなLEDが1つとボタン(タクトスイッチ)が4つ付いています。LEDの制御やボタンの状態の取得も、MGLCDライブラリを使ってできます。
LEDの制御には、Led関数を使います。Led関数の構文は次の通りです。
LED番号には、LEDの番号を指定します。LED番号は0~LEDの数-1の範囲の整数です。今回製作したグラフィックLCDシールドにはLEDが1つしかないため、LED番号は常に0となります。
LEDの状態は、Led関数実行後のLEDの状態を表します。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が返ります。
ボタン(タクトスイッチ)の状態の取得には、ReadButton関数を使います。ReadButton関数の構文は次の通りです。
ボタン番号には、ボタンの番号を指定します。ボタン番号は0~ボタンの数-1の範囲の整数です。今回製作したグラフィックLCDシールドにはボタンが4つあるので、0~3の数を指定します。
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を返します。
次に、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を点灯 } }
次のページではMGLCDライブラリに付属するデモスケッチの解説をします。