- センサーロボの試作です。センサー1にタッチセンサーが2個付いています。改良したプログラムでは1と3にそれぞれ独立させています。
センサーロボの試作プログラム†
// 作成者:山崎
// 作成日:2005-11-4
task main()
{
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);//細かい前進の繰り返しで前へ進む
}
}
}
- とりあえず作ったぶつかるとさがって右に曲がるを繰り返すプログラムです。
- ifの割込みがまだ研究中のため、前進動作はWait(1)の繰り返しにしました。
- アドバイス
- repeat(9999){…} の代わりに while(true){…}を使えば、このWait(1)はおそらく必要ないですね。 -- 松本(教員)
- アドバイスありがとうございます。早速書き換えてみます。 -- 山崎
センサーロボの試作プログラム改(センサー2個版)†
// 作成者:山崎
// 作成日:2005-11-4
// 変更日:2005-11-14
task main()
{
//タッチセンサの宣言
SetSensor(SENSOR_1, SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_TOUCH);
while(true)//無限に繰り返す。
{
OnFwd(OUT_A+OUT_C) ;//前進
until((SENSOR_1 == 1) || (SENSOR_3 == 1));//センサー1または3がぶつかるまで
//以下はぶつかると開始する処理
OnRev(OUT_A+OUT_C);//バックして
Wait(100);
OnFwd(OUT_A);//右に曲がる
OnRev(OUT_C);
Wait(160);
}
}
改良点
- while(true){…}を使い、repeat(9999){…} 、Wait(1)を書き換えた。
- 割り込み処理はifからuntilに書き換えた。
- 命令の回数を減らし、プログラムも簡単になった。
- センサー1または3がぶつかるまでとし、センサーを独立させた。
わかったこと
- 無限に繰り返す処理はwhile(true){…}を使う。
- 割り込みを待つ処理はWaitよりuntilで続行する。
- 割り込み処理後は元の処理に戻るように、繰り返し処理の中に割り込みを待つ処理を書く。
- 条件式は((A)||(B))でAまたはB、((A)&&((B))でAかつBになる。
疑問点
- 今はダブルバンパーのタッチセンサーを2つともセンサー1に付けているが、until(条件式)等を使うとき条件式を二つ使うことはできないのか?(「AまたはBのときまで続行」の様な条件)(解決しました。)
アドバイスなどありましたらこちらへ†
- until( (SENSOR_1==1) || (SENSOR_3==1) ); という感じで || を使えば、「AまたはB」が実現できます。逆に「AかつB」のときには && を使ってください。 -- 松本(教員)
- アドバイスありがとうございます。参考にプログラムを書き換えてみました。 -- 山崎
戻る
C6のTOPへ
tya1
0
&counter([total|today|yesterday]);