- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C6]]
*センサーロボの試作プログラム [#y81b9421]
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
// タッチセンサであると宣言
repeat(9999){
OnFwd(OUT_A+OUT_C); // モータAとモータC を正回転
if(SENSOR_1 == 1){ // センサーが反応したら
OnRev(OUT_A+OUT_C); // バックしてから
Wait(100);
OnFwd(OUT_A); // 右に曲がる
OnRev(OUT_C);
Wait(160);
SetSensor(SENSOR_1,SENSOR_TOUCH);// タッチセンサの宣言
repeat(9999){
OnFwd(OUT_A+OUT_C);// 前進
if(SENSOR_1 == 1){ // センサーが反応したら
OnRev(OUT_A+OUT_C);// バックしてから
Wait(100);
OnFwd(OUT_A);// 右に曲がる
OnRev(OUT_C);
Wait(160);
}
else{
Wait(1);//細かい前進の繰り返しで前へ進む
}
}
}
else{
Wait(1);
}
}
}
-とりあえずぶつかると右に曲がり続けるプログラムです。
-とりあえず作ったぶつかるとさがって右に曲がるを繰り返すプログラムです。
-ifの割込みがまだ研究中のため、前進動作はWait(1)の繰り返しにしました。
-アドバイスなどありましたらこちらへ
-アドバイス
-repeat(9999){…} の代わりに while(true){…}を使えば、このWait(1)はおそらく必要ないですね。 -- [[松本(教員)]] &new{2005-11-11 (金) 22:30:03};
-アドバイスありがとうございます。早速書き換えてみます。 -- [[山崎]] &new{2005-11-11 (金) 23:36:19};
*センサーロボの試作プログラム改 [#a17827b8]
task main()
{
SetSensor(SENSOR_1, SENSOR_TOUCH);
while(true)//無限に繰り返す。
{
OnFwd(OUT_A+OUT_C) ;//前進
until(SENSOR_1 == 1);//センサーがぶつかるまで
//以下はぶつかると開始する処理
OnRev(OUT_A+OUT_C);//バックして
Wait(100);
OnFwd(OUT_A);//右に曲がる
OnRev(OUT_C);
Wait(160);
}
}
&size(25){改良点};
-while(true){…}を使い、repeat(9999){…} 、Wait(1)を書き換えた。
-割り込み処理はifからuntilに書き換えた。
-命令の回数を減らし、プログラムも簡単になった。
&size(25){わかったこと};
-無限に繰り返す処理はwhile(true){…}を使う。
-割り込みを待つ処理はWaitよりuntilで続行する。
-割り込み処理後は元の処理に戻るように、繰り返し処理の中に割り込みを待つ処理を書く。
&size(25){疑問点};
-今はダブルバンパーのタッチセンサーを2つともセンサー1に付けているが、until(条件式)等を使うとき条件式を二つ使うことはできないのか?(「AまたはBのときまで続行」の様な条件)
**アドバイスなどありましたらこちらへ [#scc0121a]
#comment