[[2005/C6]]
*センサーロボの試作プログラム [#y81b9421]
 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)はおそらく必要ないですね。 -- [[松本(教員)]] &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

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS