1.文字を表示する
RobotCもプログラミング言語ですので、C言語等のようにLCD上に「Hello World」と表示するプログラムを作成します。
それでは、次のプログラムを作成して下さい。ここでは display1.c とします。
このプログラムで新しく用いたAPIについて解説します。
LCDの中心に Hello Wolrd と表示されたと思います。 しかし、これだけではデバッグにあまり役立たないため、これを改良していきましょう。
それでは、次のプログラムを作成して下さい。ここでは display1.c とします。
このプログラムで新しく用いたAPIについて解説します。
nxtDisplayCenteredTextLine(3,"Hello World")
LCDに中央揃えで文字列を表示します。
第1の引数は文字列を表示する行数を指定します。この行数は0〜7の整数で指定します。 今回は3と指定したため、LCDの上から4行目に表示されます。
第2の引数は表示したい文字列を指定します。文字列が長過ぎると、文字列の端は切られて画面に表示されません。
第1の引数は文字列を表示する行数を指定します。この行数は0〜7の整数で指定します。 今回は3と指定したため、LCDの上から4行目に表示されます。
第2の引数は表示したい文字列を指定します。文字列が長過ぎると、文字列の端は切られて画面に表示されません。
LCDの中心に Hello Wolrd と表示されたと思います。 しかし、これだけではデバッグにあまり役立たないため、これを改良していきましょう。
2.変数を表示する
次に変数を表示するプログラムを作りましょう。ここではロボットの左右のモーターの回転量を表示するプログラムを作成します。
それでは次のプログラムを作成してください。ここでは display2.c とします。
プログラムを起動したら、タイヤを回転させてみて下さい。タイヤの回転量が表示されると思います。
では、このプログラムで新しく用いたAPIについて解説します。
今回はnxtDisplayTextLine関数を使用しましたが、上述のnxtDisplayCenteredTextLine関数でも同様に変数の表示が行えます。
文字列や変数の表示を行うAPIは他にもあります。詳しくは、API Referenceを参照してください。
それでは次のプログラムを作成してください。ここでは 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()
nxtDisplayTextLine(3,"LEFT :%5d",l_count)
LCDに表示されている内容を全て消去します。LCD上部の本体情報の表示も消去されます。
nxtDisplayTextLine(3,"LEFT :%5d",l_count)
LCDに左揃えで文字列を表示します。
第1の引数は文字列を表示する行数を指定します。
第2の引数は表示したい文字列を指定します。 変数を表示するときはC言語のprintf関数と同じように書式指定子を用います。 このときに同様に桁数の指定も可能です。
第3の引数もC言語のprintf関数と同じように、第2の引数の文字列中の書式指定子と対応した変数名を記述します。
第1の引数は文字列を表示する行数を指定します。
第2の引数は表示したい文字列を指定します。 変数を表示するときはC言語のprintf関数と同じように書式指定子を用います。 このときに同様に桁数の指定も可能です。
第3の引数もC言語のprintf関数と同じように、第2の引数の文字列中の書式指定子と対応した変数名を記述します。
今回はnxtDisplayTextLine関数を使用しましたが、上述のnxtDisplayCenteredTextLine関数でも同様に変数の表示が行えます。
文字列や変数の表示を行うAPIは他にもあります。詳しくは、API Referenceを参照してください。
3.図形の描画
RobotCではLCDに図形を描画することが可能です。今回は直線、円、四角を表示するプログラムを作成します。
それでは次のプログラムを作成してください。ここでは display3.c とします。
プログラムを動かすと、左下から右上までの直線 → 中央に正方形 → 穴の空いた正方形 → LCD中央に円 → 穴の空いた塗りつぶし円、 という順で図形が表示されると思います。
では、このプログラムで新しく用いたAPIについて解説します。
LCDへの図形描画は他にも点の描画などがあります。それらについては詳しくは API Referenceを参照してください。
それでは次のプログラムを作成してください。ここでは 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)
nxtDrawRect(34,46,63,17) / nxtFillRect(34,46,63,17) / nxtEraseRect(39,41,58,22)
nxtDrawCircle(34,46,30)
nxtFillEllipse(34,46,63,17) / nxtEraseEllipse(39,41,58,22)
LCD上に直線を描画します。
引数は直線の始点と終点を指定します。 (x1,y1,x2,y2)の場合には始点が(x1,y1)で終点が(x2,y2)で指定されます。原点(0,0)は画面の左下で、横:x、縦:yです。 従って、今回は(0,0)から(99,63)までの直線を描画します。
NXTのLCDは100×64であるので、 引数は、x:0〜99、y:0〜63までが画面に表示される範囲です。これは直線描画以外のAPIも同じです。
引数は直線の始点と終点を指定します。 (x1,y1,x2,y2)の場合には始点が(x1,y1)で終点が(x2,y2)で指定されます。原点(0,0)は画面の左下で、横:x、縦:yです。 従って、今回は(0,0)から(99,63)までの直線を描画します。
NXTのLCDは100×64であるので、 引数は、x:0〜99、y: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の長方形となります。
第1と第2の引数は長方形の左上の点を(x,y)の順で指定します。
第3と第4の引数は長方形の右下の点を同じように指定します。
今回は縦と横を等しく指定したため、実際に描画されるのは30×30の長方形となります。
nxtDrawCircle(34,46,30)
LCDに円を描画します。このAPIでは引数で指定した正方形に内接する円を描画します。
第1と第2の引数は正方形の左上の点を(x,y)の順で指定します。
第3の引数は正方形の一辺の長さ、すなわち円の直径を指定します。
第1と第2の引数は正方形の左上の点を(x,y)の順で指定します。
第3の引数は正方形の一辺の長さ、すなわち円の直径を指定します。
nxtFillEllipse(34,46,63,17) / nxtEraseEllipse(39,41,58,22)
LCDに楕円を描画します。このAPIでは引数で指定した長方形に内接する楕円を描画します。
引数の指定はnxtDrawRectなどと同じで、その長方形内に楕円を描画します。
引数の指定はnxtDrawRectなどと同じで、その長方形内に楕円を描画します。
LCDへの図形描画は他にも点の描画などがあります。それらについては詳しくは API Referenceを参照してください。
4.課題
前回の「ボタンの使用」を参考に、押されたボタンに対応してLCDに文字などを表示させなさい。
この時、全てのボタンに反応するようにしなさい。