10月13日 朝から「今日,マインドストーム何時にする?」と聞いてくる。12歳になったかずはマインドストームが面白くて仕方がないようだ。



 今回は,まるでアイスダンスを踊るように,RIS2.0の無限軌道車にRIS1.0の無限軌道車が寄り添うように動くプログラムを作ることになった。マインドストームの本体RCXから赤外線の信号を「IRメッセージ」として出力することができるので,もう一方のRCXがそのメッセージを読み取り,動作を合わせることで,リードする側とされる側の関係を作ることができる。

 RIS2.0から何種類かのIRメッセージをランダムに送信し,それに合わせてRIS1.0の無限軌道車が動くようにしたいとかずは最初から難しいことを言う。

 「かず,まず手順を決めよう」とIRメッセージと無限軌道車の動きの対応を決める。

IRメッセージ  動作
1         前進
2         後退
3         右折
4         左折
5         停止

と,あわて者のかずが間違わないように紙に手順を書く。かずは兄こうしろうと違い,慎重さは持ち合わせていない。いつでも「あっ,わかった」と早とちりを数度繰り返し,理解に至る。

 まず,リードされる側のRIS1.0のプログラムを標準の開発環境で作成する。こちらは英語版なので,RCXセンサーウォッチャーを並べて,受信したIRメッセージに合わせて無限軌道車が動くようプログラムすれば良いことをかずに説明した。



set Directionでモーターの回転方向を決め,次のonコマンドでロボットを前進,後退,右左折させる。かずは当初,waitコマンドで動く時間を決めていた。「RIS2.0が次のメッセージを送ってくるまで,同じ動きをしていればいいだろ」と言うと「そっか」とwaitを抜いた。

 受け取ったIRメッセージを忘れさせるために,Reset Messageが必要なことは,かずが見つけた。「グリフィンドールに50点」と言いそうになったが,やめた。ハリーポッターの新しい作品が出ないので,かずは今ダレンシャンに夢中なのだ。「読んだ,終わった。」と次から次へと巻を読み進めている。

 停止が送られてきた時は,くるくると回るようにWait 50を入れている。

 RIS2.0のプログラム開発環境は日本語なので,かずはもうかなり慣れている。



「マイブロック使えばいいがや」とこうざらなことを言う(富山弁解説 こうざら:「難しい」,「手の込んだ」の意。近頃はあまり使う人がいない)。

 RIS2.0では複数のスモールブロックを組み合わせたビッグブロックを使って,手早くプログラムを作れることは前回説明したが,マイブロックとは自分で作れるビッグブロックのようなものだ。プログラミングの用語で言うとサブルーチンのようなイメージだ。

 黄色いコマンドがマイブロックである。TEISIマイブロックは次のようなコマンドで構成されている。



RIS1.0の無限軌道車と同じようにくるくる回転してから,停止するようにかずがプログラムしたのだ。Waitの単位は1/10秒なので,RIS1.0ではWait 50となるが,RIS2.0では親切に5.0秒と表示してくれる。

 リピートコマンドで10回繰り返されているRANDAMUマイブロックはより複雑だ。



 SASETU,USETU,KOUTAI,ZENSINもマイブロックである。マイブロックにはマイブロックを含むことができるのだ。

 まず,設定コマンドで0.1から0.4の乱数を発生させている。屋根のような形をしたブロックがはい/いいえブロックである。これはプログラミングの用語でいうと,if文である。条件分岐を行い0.1の時にZENSIN,0.2の時に後退,…とプログラムロジックを作っていく。



 たとえば,ZENSINマイブロックは,1のIRメッセージを出力後,ビッグブロックで3秒間前進する。最初かずは,3秒前進してからIRメッセージを送っていたが,それでは動きが遅れてしまうと考え直した。

 これでRIS2.0の無限軌道車が乱数をもとにIRメッセージを送信した後,どちらかに動くと,それに合わせRIS1.0の無限軌道車も同じ方向についてくるようになった。停止の時は2つの無限軌道車がアイスダンスのようにくるくる回ってから止まる。

 はい/いいえブロックの使い方は説明を要したが,早とちりしながらも,どんどん自分でプログラムを作っていくかずに,こりゃ面白くなりそうだと感じた。