if文を主要な部分で用いたプログラム †
プログラム内容 †
#define THRESHOLD 42
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(1){
if((SENSOR_1 >= THRESHOLD) && (SENSOR_3 >= THRESHOLD)){ // センサーがどちらも白と判断している場合に直進
OnFwd(OUT_A+OUT_C);
}else if((SENSOR_1 < THRESHOLD) && (SENSOR_3 >= THRESHOLD)){ // センサーの左側が黒と判断している場合にハンドルを左にきる
OnFwd(OUT_C);
OnRev(OUT_A);
}else if((SENSOR_1 >= THRESHOLD) && (SENSOR_3 < THRESHOLD)){ // センサー右側が黒と判断している場合にハンドルを右にきる
OnFwd(OUT_A);
OnRev(OUT_C);
}else if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)){ // センサーがどちらも黒と判断している場合に右に回転
OnFwd(OUT_A);
OnRev(OUT_C);
}
if(SENSOR_2 == 1){ // タッチセンサー押された場合右側に避けて追い越していく
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(50);
OnFwd(OUT_A+OUT_C);
Wait(175);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(50);
OnFwd(OUT_A+OUT_C);
Wait(175);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(50);
OnFwd(OUT_A+OUT_C);
}
}
}
プログラムの説明 †
- このプログラムでは、if文をメインにしています。
- まず、define文で閾値を設定します。このプログラムでは前者の反転するプログラムと統一性を見せるためにTHRESHOLDを閾値に用いています。
- その後、各センサーのタイプを設定し、while(1)で無限ループを作り出しています。
- 無限ループ内では、if文の中で各処理を行っています。
- センサーがどちらも白と判断している場合、AとCのモーターを正転させています。
- 左側のセンサーのみが黒と判断している場合、左側にハンドルを切るためにAモーターを逆転させ、Cモーターを正転させています。
- 右側のセンサーのみ黒と判断している場合、右側にハンドルを切るためにAモーターを正転させ、Cモーターを逆転させています。
- どちらのセンサーも黒と判断している場合、右側にハンドルを切るようにしていますが、この判断が正しいのかどうかはまだ分かりません。
- 最後に、タッチセンサーが反応した場合、つまり他のマシンと接触した場合、まず右側にハンドルをきり右側に避けた後追い越し、線上に復帰するように設定しています。
06.06.15更新