Lesson5:条件分岐処理

 Lesson4では、プログラミングで、同じ処理が続く場合は、繰り返しブロックを使って、コードをシンプルにするという事を理解しました。順次処理、繰り返し処理は、無条件の単純動作をでしたが、様々な場面で使うロボットの場合は、その時々によって動作を変えたりする必要があります。

日常生活でも、私たちは、分岐処理を常にしています。

例えば、雨が降っていた時、傘をさすという動作の場合、
これまでの順次処理では、プログラムとして書きようがありません。

「もし、雨が降っていれば、傘をさす、そうでなければ、傘をささない」

このような処理をしたい場合、プログラミングでは、条件分岐処理・if/then文・真偽などという言葉で説明がされます。今回は、その場合のブロックの組み方についてのお話です。

■Lesson5の目標

・プログラミングにおける、条件分岐処理の概念を理解する
・mBlock5のブロックプログラミングにおいて、条件分岐処理の作り方を理解する

■Lesson5で準備するもの

Lesson1と同じです。
・Makeblock社のCodey Rocky(アマゾンとかで\13000くらいです)
・PC(windoows10 or mac)※こちらの講座ではWindows10で話を進めます。
・mBlock5 ※PCにダウンロードして使います。無料でダウンロードできます。
 

キーコンセプト:条件分岐処理とは?

条件分岐処理(if文)ですが、言葉で説明すると、

if文(イフぶん)はプログラミング言語において、真理値に従って「もしXならば、Yせよ、さもなくばZせよ」というような条件実行の「文 (プログラミング) 」で、制御構造のひとつである。if else文と呼ばれることもある。

具体的な構文はプログラミング言語によって異なるが一般的に、条件式と、条件式の評価結果の値が「真として扱うべき値」の場合に実行される「then節」と呼ばれる部分があり、「偽として扱うべき値」の場合に実行されるelse節と呼ばれる部分が付く場合もある。
引用元:wikipedia https://ja.wikipedia.org/wiki/If%E6%96%87

はい、なかなか直感的には、理解しにくいですよね。で、まあ、単純に言うと、mblock5の制御パレットの中のブロックを使って、「もし■■ならば、〇〇する」というブロックを作るだけです(笑)

mBlock5の条件分岐ブロック

上の画像の左側のブロックは、
上の六角形の穴の中の条件が、合っていれば(真ならば)、その下の動作(命令)を実行します。
上の六角形の穴の中の条件が、合っていなければ(偽ならば)、その下の動作(命令を)を実行しない。

上の画像の右側のブロックは、
上の六角形の穴の中の条件が、合っていれば(真ならば)、その下の動作(命令)を実行します。
上の六角形の穴の中の条件が、合っていなければ(偽ならば)、「でなければ」の下のの動作(命令を)を実行する。

ただそれだけです。

一方で、難しいというか、面白くてやりがいがあるのが、六角形の中に入れるブロックを作る部分です。

六角形の中に入れるブロックとして、最初に理解しておきたいが、センシングパレットの中の↓ブロックと、CodeyRockyをの関係です。

センシングブロックとCodeyRocky対応図

センシングブロックとCodeyRocky対応図

つまり、CodeyRockyに搭載されているセンサー・ボタンなどで、センシングした内容を六角形に入れるイメージですね。

例えば、「もし、Cボタンを押されたら、怒った表情をする」という動作を実行したい場合は、こんな感じのブロックを組めばよいですね。

条件分岐処理説明3
また、「もし、Cボタンを押されたら、怒った表情をする、そうでなければ、笑っている」ならば、

条件分岐処理説明4

では、実際にCodeyRockyにイベントブロックは、「Aボタンを押されたとき」にして、「もし、Cボタンを押されたら、怒った表情をする、そうでなければ、笑っている」プログラムをアップロードしてみましょう。

条件分岐処理説明4

さて、↑のプログラムで、動きましたか?
はい、実は、上だと上手く動きません。↑のプログラムだと、「Aボタンが押されたとき、Cボタンが押されたなら」なので、ロボットとしては、AボタンとCボタン両方を同時に押さないと動かないのです。

同時に押すのは、結構難しい。そこで、Aボタンが押されたとき、その瞬間じゃなくて、「ずっと、繰り返し、もしCボタンが押されてなら」にすれば、Aボタンが押された後は、(ずっと好きなタイミングで)Cボタンが押されたならになります。

条件分岐処理説明5
恐らく、初めて条件分岐処理をする場合に、この間違いはありがちな気がします。ロボットは、プログラム通りにしか動かない正直者です。ロボットとコミュニケ―ションをとる場合は、必ず、ロボットが理解しやすいように、動作を一つ一つ細かく分解して、考えることが大切ですね。

コーディング練習

1)下の動画を同じプログラムを、mBlock5で作ってみましょう

■注意!
赤外線距離センサーは、前方の障害物に向けなければいけないので、前面に向けましょう。
一方、カラーセンサーは、下面のカードの色を検出する必要があるので、下面に向けましょう。

CodeyRockyのセンサーの向きは変えられる説明画像

さて、できましたか?
私の場合は、例えば、こんなブロックで実行しました。

カラーセンサーを使った条件分岐処理ブロック説明画像

 

まとめ:CodeyRockyの外部からの入力タイミングをしっかり理解する

今回、ロボットプログラミングにおける条件分岐処理と呼ばれるプログラムを理解しました。

1、条件分岐処理ブロックは、2種類ある(もし○○なら・もし○○なら、でなければ■■)
2、条件の設定(六角形のブロック)するときは、CodeyRockyのセンサーやスイッチとブロックの対応関係を把握しておく
3、条件を設定(六角形のブロック)する時は、どのタイミングで、その条件を適用するべきなのかまで考えて、プログラムを作る