10月8日 こうしろうが早くNQCを身に付けたいと意気込んでいるので連日のMindStorms日記である。4年生の春に入部した少年野球チームの公式戦が終わり、6年生はほぼ引退状態になった。休日に暇ができたこうしろうにとって、この秋は『NQCの秋』になりそうな気配である。今日はタスクの勉強である。この辺から一気にプログラムらしくなる。

 「今まではmainタスクの中にコードを全部書いていたやろ。でもコードが長くなるとズラズラっとしたプログラムになるよね。それだとわかりにくくなるから、複数のタスクに処理を分けるんだ。とりあえずプログラム作ってみよう。」「うん。」と言ってテキストを横目にこうしろうがプログラムを入力した。

task main()
 {
  SetSensor(SENSOR_1,SENSOR_TOUCH);
  start check_sensors;
  start move_square;
 }

 task move_square()
 {
  while (true)
  {
   OnFwd(OUT_A+OUT_C);Wait(100);
   OnRev(OUT_C);Wait(85);
  }
 }

 task check_sensors()
 {
  while (true)
  {
   if (SENSOR_1 == 1)
   {
    stop move_square;
    OnRev(OUT_A+OUT_C);Wait(50);
    OnFwd(OUT_A);Wait(85);
    start move_square;
   }
  }
 }

 「mainタスクとmove_squareとcheck_sensorsという3つのタスクを定義したわけだ。mainタスクからstart命令でmove_squareタスクとcheck_sensorsタスクを実行しているね。」NQCのプログラミング・スタイルはいかにもマルチタスクという感じがする。「それから、check_sensors タスクではstop命令でmove_squareタスクを止めて、再度start命令でmove_squareタスクを起動しているね。子タスクからも他の子タスクを呼び出すことができるんだよ。」わかったようなわからぬような顔をしているこうしろうに図を書いて説明した。



 タスクはmainタスクも含めて最大10個まで作成することができる。このプログラムは無限軌道車を四角形を描くように動かし、なにか障害物にぶつかったらバックして方向を変えるプログラムである。