モーターを動かしてみる プログラム編
さてプログラム編です。今回のプログラムも簡単なモノですが、「ロボットを動かしてみる プログラム編」で作ったモノと違って、プログラミングにおいて大事な要素の一つである「ループ」を活用しています。
まずはプログラム全体を見てみましょう。
「左回転で30度づつ12回動かし、その後右回転で90度づつ4回動かす」という動作からもっとたくさんのブロックが並んでいるのを想像した人もいると思いますが、実際にはたったこれだけで組めてしまいます。並んでいるブロックは4つだけですが、2個づつ矢印名のようなグラフィックで囲われていますね。これが「ループブロック」です。
ループブロックはその名の通り「ブロックの中を繰り返す」ブロックです。同じ動作を何回も繰り返したいときに使います。今回の場合は「左回転で30度」を12回繰り返したり「右回転で90度」を4回繰り返すために使っています。ループを使わないと同じ動作を回数分組み合わせなくてはいけないため非常に長いプログラムになってしまいますが、このループブロックのおかげでこんなに短く書くことができます。繰り返したい内容を変えるときも、こうしておけば一箇所変えるだけで済むのでラクチンです。
今回はこのループブロックを回数指定で使っていますが、何秒間繰り返す、センサーが反応するまで繰り返す、ボタンが押されるまで繰り返す、といった指定もできるようになっています。また、永遠と繰り返すことも可能です。このようにループブロックは、ある条件を満たすまで同じ処理を繰り返すブロックです。地味なようで超重要なのでぜひ使いこなせるようになってください。
さて、肝心の繰り返す中身を見てみましょう。最初にあるのが「モーターブロック」です。
このブロックには「ポートAのモーターを50%の力で30度だけ正転させる」という設定がしてあります。加えて「回転が終わるまで待つ」という設定もしてあります。このブロックが1回実行されると、今回の場合は画面で見て左回転で30度だけ棒が動くことになります。この角度指定を何回転と指定したり、何秒と指定したり、もちろん永遠に回しっぱなしという設定もできます。モーターの動きを止まる場合もこのブロックを使います。このようにモーターブロックは、指定した条件だけモーターを動かすブロックです。これまでのモーターには力と回転方向しか指定できなかったのに、ずいぶんと便利になったものです。
モーターが30度回ったあとに実行されるのが「ウェイトブロック」です。
このブロックには「1秒間待つ」という設定がしてあります。モーターブロックの実行後は30度動いた状態で止まっているので、止まった状態で1秒何も実行しないことになります。これがムービーの「カクッ、カクッ」という動きになっているわけです。ループブロックと同じように、センサーが反応するまで待つ、ボタンが押されるまで待つ、といった指定もできるようになっています。このようにウェイトブロックは、指定した条件になるまで待つ=プログラムの進行を一時停止するブロックです。
そしてこのウェイトブロックの処理が終わる (1秒間待つ) と、ループブロックによってプログラムの進行が最初のモーターブロックに戻ります。これを12回繰り返してようやくループブロックから次のブロックに行くことができるのです。 続くループブロックも同じように逆回転を4回繰り返すように設定してあるので、ムービーのような動きになるわけです。
NXT のプログラムをマスターするにはまだまだ覚えなきゃいけないことがたくさんありますが、基本的にプログラムはこれまで出てきたような単機能のプログラムブロックの組み合わせで成り立っています。応用力が大事です。プログラムブロックの役割をひとつ覚えるごとにできることが広がっていきますので、少しづつマスターしていきましょう。
次回のプログラム編では、センサーによる入力とその値による分岐を説明したいと思います。