7.ボタンの使用 TOPへ 9.音を鳴らす

8.LCDの使用


ここではLCDの利用について学びます。NXTのLCDは様々な情報を表示できるので、プログラムのデバッグなど 今の状態を知るのに役に立ちます。


1.文字を表示する

RobotCもプログラミング言語ですので、C言語等のようにLCD上に「Hello World」と表示するプログラムを作成します。
それでは、次のプログラムを作成して下さい。ここでは display1.c とします。
display1.c
task main(){
	nxtDisplayCenteredTextLine(3,"Hello World");
	wait1Msec(1000);
}

このプログラムで新しく用いたAPIについて解説します。

nxtDisplayCenteredTextLine(3,"Hello World")
LCDに中央揃えで文字列を表示します。
第1の引数は文字列を表示する行数を指定します。この行数は0〜7の整数で指定します。 今回は3と指定したため、LCDの上から4行目に表示されます。
第2の引数は表示したい文字列を指定します。文字列が長過ぎると、文字列の端は切られて画面に表示されません。

LCDの中心に Hello Wolrd と表示されたと思います。 しかし、これだけではデバッグにあまり役立たないため、これを改良していきましょう。


2.変数を表示する

次に変数を表示するプログラムを作りましょう。ここではロボットの左右のモーターの回転量を表示するプログラムを作成します。
それでは次のプログラムを作成してください。ここでは display2.c とします。
display2.c
#define LEFT motorB
#define RIGHT motorC

task main(){
	int l_count = 0;
	int r_count = 0;

	nMotorEncoder[LEFT] = 0;
	nMotorEncoder[RIGHT] = 0;

	while(true){
		eraseDisplay();
		l_count = nMotorEncoder[LEFT];
		r_count = nMotorEncoder[RIGHT];

		nxtDisplayTextLine(3,"LEFT :%5d",l_count);
		nxtDisplayTextLine(4,"RIGHT:%5d",r_count);
		wait10Msec(1);
	}
}

プログラムを起動したら、タイヤを回転させてみて下さい。タイヤの回転量が表示されると思います。
では、このプログラムで新しく用いたAPIについて解説します。

eraseDisplay()
LCDに表示されている内容を全て消去します。LCD上部の本体情報の表示も消去されます。

nxtDisplayTextLine(3,"LEFT :%5d",l_count)
LCDに左揃えで文字列を表示します。
第1の引数は文字列を表示する行数を指定します。
第2の引数は表示したい文字列を指定します。 変数を表示するときはC言語のprintf関数と同じように書式指定子を用います。 このときに同様に桁数の指定も可能です。
第3の引数もC言語のprintf関数と同じように、第2の引数の文字列中の書式指定子と対応した変数名を記述します。

今回はnxtDisplayTextLine関数を使用しましたが、上述のnxtDisplayCenteredTextLine関数でも同様に変数の表示が行えます。
文字列や変数の表示を行うAPIは他にもあります。詳しくは、API Referenceを参照してください。


3.図形の描画

RobotCではLCDに図形を描画することが可能です。今回は直線、円、四角を表示するプログラムを作成します。
それでは次のプログラムを作成してください。ここでは display3.c とします。
display3.c
task main(){
	eraseDisplay();
	nxtDrawLine(0,0,99,63);
	wait1Msec(1000);

	eraseDisplay();
	nxtDrawRect(34,46,63,17);
	wait1Msec(1000);

	eraseDisplay();
	nxtFillRect(34,46,63,17);
	nxtEraseRect(39,41,58,22);
	wait1Msec(1000);

	eraseDisplay();
	nxtDrawCircle(34,46,30);
	wait1Msec(1000);

	eraseDisplay();
	nxtFillEllipse(34,46,63,17);
	nxtEraseEllipse(39,41,58,22);
	wait1Msec(1000);
}

プログラムを動かすと、左下から右上までの直線 → 中央に正方形 → 穴の空いた正方形 → LCD中央に円 → 穴の空いた塗りつぶし円、 という順で図形が表示されると思います。
では、このプログラムで新しく用いたAPIについて解説します。

nxtDrawLine(0,0,99,63)
LCD上に直線を描画します。
引数は直線の始点と終点を指定します。 (x1,y1,x2,y2)の場合には始点が(x1,y1)で終点が(x2,y2)で指定されます。原点(0,0)は画面の左下で、横:x、縦:yです。 従って、今回は(0,0)から(99,63)までの直線を描画します。
NXTのLCDは100×64であるので、 引数は、x:0〜99y:0〜63までが画面に表示される範囲です。これは直線描画以外のAPIも同じです。

nxtDrawRect(34,46,63,17) / nxtFillRect(34,46,63,17) / nxtEraseRect(39,41,58,22)
LCDに長方形を描画します。それぞれ長方形の描画、塗りつぶし長方形の描画、長方形に消去を行います。
第1と第2の引数は長方形の左上の点を(x,y)の順で指定します。
第3と第4の引数は長方形の右下の点を同じように指定します。
今回は縦と横を等しく指定したため、実際に描画されるのは30×30の長方形となります。

nxtDrawCircle(34,46,30)
LCDに円を描画します。このAPIでは引数で指定した正方形に内接する円を描画します。
第1と第2の引数は正方形の左上の点を(x,y)の順で指定します。
第3の引数は正方形の一辺の長さ、すなわち円の直径を指定します。

nxtFillEllipse(34,46,63,17) / nxtEraseEllipse(39,41,58,22)
LCDに楕円を描画します。このAPIでは引数で指定した長方形に内接する楕円を描画します。
引数の指定はnxtDrawRectなどと同じで、その長方形内に楕円を描画します。

LCDへの図形描画は他にも点の描画などがあります。それらについては詳しくは API Referenceを参照してください。


4.課題

前回の「ボタンの使用」を参考に、押されたボタンに対応してLCDに文字などを表示させなさい。 この時、全てのボタンに反応するようにしなさい。



7.ボタンの使用 TOPへ 9.音を鳴らす