[[2005/C5/しょう]]
*壁に沿って動くプログラム [#qd1b3229]


 task main ()
 {
   SetSensor (SENSOR_1, SENSOR_TOUCH); //left
   SetSensor (SENSOR_3, SENSOR_TOUCH); //right
   ClearTimer (0);
 
   while (Timer (0) < 600) //時間制限
   {
     SetPower(OUT_A+OUT_C, OUT_FULL);
 
     while (SENSOR_1==1 && SENSOR_3==0) //壁に沿っている
     {
       Off (OUT_A+OUT_C);
       OnFwd (OUT_A+OUT_C);
     }
 
     while (SENSOR_1==0 && SENSOR_3==0) //壁から離れた
     {
       Off (OUT_A+OUT_C);
       OnFwd (OUT_C);
       OnRev (OUT_A);
       Wait (10);
       OnFwd (OUT_A+OUT_C);
       Wait (10);
     }
  
    while (SENSOR_1==0 && SENSOR_3==1) //向きがおかしい
     {
       Off (OUT_A+OUT_C);
       OnFwd (OUT_A);
     }
 
 
     if (SENSOR_1==1 && SENSOR_3==1)  //曲がり角にぶつかった
     {
       OnRev (OUT_A+OUT_C);
       Wait (15);
       OnFwd (OUT_A);
       OnRev (OUT_C);
       Wait (120);
       Off (OUT_A+OUT_C);
     }
   }
 
   Off (OUT_A+OUT_C);
 }
 

壁に当たって左側のセンサが反応しているときは直進する。センサーが壁から離れたら、壁の方に曲がっていく。両方のセンサーが反応したら壁にぶつかっているので、少し後退して右に約90°曲がる。右側のセンサーのみが反応しているときは逆走しかけているので右に曲がって壁にぶつけて方向を直している。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS