第27話から、NQCによるMindstormsプログラミングの勉強を始めたのであるが、こうしろうはエディタで英文を打ち込んで、プログラムを作成するというスタイルが結構気に入っているようである。自作ロボットのプログラムを自分である程度自由に作れるようになるまで『NQCのお勉強』を続けて行きたいと思う。

 かずは「僕、何もすることがなくてつまらん」と嘆いていますが、読者のみなさんにおかれましては是非「つまらん」などと言わず、お付き合いいただきますようお願い申し上げます。

8月19日 小学生には難しすぎるかと心配しながら始めたNQCプログラミングであるが、命令そのものはRIS(Mindstorms標準のプログラム開発環境)の命令とほぼ一致しているので「なんとかなるか」と父は少し楽観的な気分になってきた。今回はまず、前回作成したプログラムにモーターの速度をセットするSetPower命令を追加するところから、こうしろうに説明を開始した。

task main
{
 SetPower(OUT_A+OUT_C,5)
 OnFwd(OUT_A+OUT_C);
 Wait(400);
 OnRev(OUT_A+OUT_C);
 Wait(400);
 Off(OUT_A+OUT_C);
}

「SetPowerはあっち(RIS)と同じだね。出力ポートを指定して、カンマで区切って0~7の範囲でモーターの回転スピードを設定できるんだ。」と説明すると「続けて書けるがや。」とこうしろう。SetPowerやOnFwd、OnRevなどで出力ポートを指示する時は、+でつないで複数のポートをまとめて指定することができるのだ。



 次に無限軌道車を曲げるプログラムをこうしろうが打ち込んだ。

task main
{
 SetPower(OUT_A+OUT_C,5)
 OnFwd(OUT_A+OUT_C);
 Wait(100);
 OnRev(OUT_C);
 Wait(160);
 Off(OUT_A+OUT_C);
}

1秒間前進して、1.6秒間右に曲がるプログラムであるが、きちんと90度曲がるようにするには、OnRev(OUT_C)の後のWaitに与えるチェック値(1/100秒)を何度か変更しなくてはいけなかった。

 「こんどは、定数を使ってみよう。」 ?顔のこうしろうに「プログラムのなかで直接、数字でWaitの時間を指定するんじゃなくて、最初にdefineで数値に名前を付けて置くんだよ」と本当は富山弁で説明をした。

#define MOVE_TIME 100
#define TURN_TIME 160
task main
{
 SetPower(OUT_A+OUT_C,5)
 OnFwd(OUT_A+OUT_C);
 Wait(MOVE_TIME);
 OnRev(OUT_C);
 Wait(TURN_TIME);
 Off(OUT_A+OUT_C);
}

NQCの場合、定数はすべてグローバル定数なので関数の外に記述する。プログラムをコンパイル&ダウンロードして、テストしているとRCXがバッテリ切れのアラームを鳴らした。「いいや、プログラミングだけ進めよう」と構わずにRepeat文の説明を始めた私はあせっていたのかもしれない。Mindstorms専用の言語だといっても、これからこうしろうが覚えなくてはいけないことは山ほどある。

task main()
{
 SetPower(OUT_A+OUT_C,5);
 repeat(10)
 {
  repeat(4)
  {
   OnFwd(OUT_A+OUT_C);
   Wait(MOVE_TIME);
   OnRev(OUT_C);
   Wait(TURN_TIME);
  }
 }
 Off(OUT_A+OUT_C);
}

「Repeat(リピート)はね、後ろのかっこ( )の中に回数を指定すると、中かっこ{ }で囲まれた中の命令を回数分繰り返すんだ。わかる?」「うん。」とこうしろう。
「repeat(4)の中の命令を4回繰り返すと、四角形に移動するやろ。それを外側のrepeat(10)で10回繰り返すんだよ。」

 最後に、コメントの書き方を教えたのだが、こんなところに大きな落とし穴があったのだ。「コメントは、プログラムの内容を説明したり、メモを書くために使うんだ。」

/*
 複数行のコメント
*/

「スラッシュ・アスタ、アスタ・スラッシュで挟んでその間に複数行のコメントを書くのが、Cスタイルのコメントだ。」

// コメント

「スラッシュ・スラッシュの後ろにコメントを書くのがC++スタイルだ。」とC++の学習を途中で投げ出した父が説明した。(C#はなんとか身に付けたいと、40歳を目前にして思っている。そんなことはどうでもよくって)ここに問題があったのだ。NQCとRCXCCは、当然のことであるが日本語には対応していない。コメントを書こうとしても、英語で書くしかないのだ。(実際にコメントを書くまでコロッと忘れていた。)こうしろうにとってコメントを書くことは、プログラムを書くことよりも難しいのである。