「[IF][もし]」に関連する項目
-
[ELSE]のしくみ
-
[ELSE]は、同じ値の[IF]の条件が一致しなかった場合に、プログラムの内容を実行します。
ELSE=(値)
ポイント[ELSE]は同じ値の[IF]の条件が一致しなかった場合に、内容のプログラムを実行する。次のサンプルプログラムは、赤外線センサーモジュールを2つ【IN0】と【IN1】につなぎ、LEDモジュールを【OUT0】につないである前提です。赤外線センサーモジュールの反応が両方ともオフの場合は[IF=0]の条件が一致し、それ以外の状態では[ELSE=0]と一致し【OUT0】のLEDがモジュールが[ON=0]により点灯します。
もし、上のサンプルプログラムを[ELSE]を使わずにプログラミングすると次のようになります。
どちらのプログラムも動作は同じですが、[ELSE]を使った方は少しだけ少ない命令で同じ動きをしています。このサンプルプログラムは、赤外線センサーを2個使っていますが、センサー類は最大で4個付けられますので、同じ動作をする場合などは[ELSE]を使うと便利です。
-
[IF]のしくみ
-
対象教材: インテリジェント, エースラボ3, エースラボ4, クリエイティブ, 体験用モデルA-1, 体験用モデルB-1
学習内容: ネスト, 条件分岐, [ENDIF][もし終], [IF][もし]
レベル: ★★★★
「IF」は、多くのプログラミング言語で条件分岐に使われている命令です。ある条件を判定し、結果により異なる処理をさせるために使われます。
IF=値
TronZ-Card V2とTAMI-TOOLで使用する命令の[IF](もし)も、取り付けたセンサー類のオン、オフで条件を分ける事ができます。例えば赤外線センサーからの入力信号がオンだった場合の動作と、オフだった場合の動作をそれぞれプログラミングする事によりロボットを制御します。
TronZ-Card V2とTAMI-TOOLの[IF]TronZ-Card V2とTAMI-TOOLでの[IF]の役割は、取り付けたセンサーからの情報をもとにして、条件分岐をするために使う。[IF]命令語カードの配置
基本的に[IF]と[ENDIF]はセットで配置して使いますが[ENDIF]は、[IF]や[ELSE]が複数あっても一連の分岐の最後に一つ入っていれば良い事になっています。上記プログラムの途中に[ENDIF]を入れても[IF]の分岐先で更に[IF]で分岐するといった、ネスト(入れ子状態)は、この教材では作れません。
※センサー類を使用する場合は、値部分に使用するポートの番号を指定した[IN=値]の命令カードを入れる必要があります。
※センサー類を使って分岐する場合の多くは、プログラムをループさせる必要性が出てきます。ループしないと電源を入れた瞬間にプログラムが実行され瞬時に終わってしまうからです。
[ENDIF][ENDIF]は、[IF]や[ELSE]が複数あっても最後に一つ入っていれば良い。値について
[IF]を配置すると、値を決める画面が出ます。
値は0~3まで4つあり、それぞれコントローラーのIN0~IN3を示しています。
※画像のコントローラーは、クリエイティブやインテリジェントに使われているタイプですが、エースラボシリーズのプログラムコントローラーでも説明は同じです。
値指定画面には、4つの四角いチェックボックスと、その右に値のセレクトボックスがあります。どちらを操作しても値を決められますが、下の表のように、セレクトボックス内の数値の仕組みは複雑なので、チェックボックスを使うとわかりやすいでしょう。
IFの設定パターンは覚える必要は有りません。挿入した命令カードの[IF=値]の値部分の数字とセンサーをつないだコントローラーの【IN0~3】ポートの数字とはイコールでは無い所がポイントです。
例えば、[IF]を挿入した時に出るチェックボックスのIN3の部分にチェックを入れると、カードの表示は[IF=8]になります。(2進法の底は2で、ポート番号の数値が冪指数)
しくみのポイント指定したセンサーのIN番号が[IF=値]の値になる訳では無い -
ライントレースプログラム
-
ライントレースとは
赤外線センサーモジュールの働きにより、床などの黒い線に沿ってロボットが自動で走る状態を言います。
画像のモデルでは、ロボットの前についている二箇所の赤外線センサーモジュールが、黒い線と白い床を判断しています。
ライントレースしているロボットを観察すると、黒い線を追っている様に見えますが、プログラムの仕組みとしては、実は黒い線を避けて走行しています。
赤外線センサーは、自ら出した光が物体に反射し、戻ってきた光を感知した時は「オン」(1)になり、無感知の時は「オフ」(0)になります。黒い色は光を吸収してしまいほとんど反射しませんので、センサーは反射を感知せずに、離れた時と同じ「オフ」になる仕組みです。
ロボットを持ち上げた時も光が反射する物体が無いので両方の赤外線センサーは「オフ」になり、下記のプログラム内容だと[IF=0]の条件と一致し[STOP]を実行します。しくみのポイント「自動ドアと同じで近付くとオンになる」とおぼえるとわかりやすい。プログラム
- [IF=0]は、両方の赤外線センサーがオフで実行
- [IF=1]は、左側(IN 0)の赤外線センサーだけがオンで実行
- [IF=2]は、右側(IN 1)の赤外線センサーだけがオンで実行
- [IF=3]は、両方の赤外線センサーがオンで実行
しくみの説明
画像の状態は、右側(IN1)の赤外線センサーだけが黒いラインの上にかかり、センサーがオフになっている状態です。この場合プログラムは、残った左側(IN0)の[IF=1]条件に一致と判断するので、[IF=1]の中にある[RIGHT=0]を実行しロボットを右回転させます。
ロボットが右回転する事で黒いラインにかかっていた右側(IN1)のセンサーは白い床へと戻り、センサーの状態はオンに変わります。すると両方のセンサーがオンの条件[IF=3]と一致するので[GO=0]を実行しロボットは直進します。
しくみのポイント片方のセンサーがオフになると条件が変わり、反対側のセンサーがオンの時のプログラムを実行する。