2012a/Member 目次

課題2 ライトレースロボット

今回はこのようなコースを走る DSC_0037.JPG

ページ作成者

Hato

ロボット本体

今回はただ走るだけのロボットなので、あまり工夫はしなかった。
強いて言うなら、タイヤ間を狭くして小回りができるようにした。 DSC_0035.JPG

青い部品がセンサー DSC_0036.JPG

プログラム

今回のポイントは
1 交差点
2 直角カーブ
3 半周したらコースから出る
である
 

 #define THRESHOLD 45 //閾値~
 #define go_st OnFwd(OUT_AC);~
 #define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
 #define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
 #define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A);  OnFwd(OUT_C);  OnRev(OUT_A);~
 #define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A);  OnRev(OUT_C);~
 #define go_le3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
 #define go_ri3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
 #define t_overa 1400~
 #define t_overb 3000~
 #define t_overc 4000~
 #define t_overd 5000~
 #define t_overe 5500~
 #define t_overf 7000~
 #define t_overg 7890~
 
 
 task main() {
   ClearTimer(0);                                //タイマーリセット
   SetPower(OUT_A,0);
   SetPower(OUT_C,0);
   SetSensor(SENSOR_1, SENSOR_LIGHT);
   SetSensor(SENSOR_3, SENSOR_LIGHT);
   int cross = 0;                                            //両方黒になった回数をカウント
  while(true){                                        //百回きたら止める。
        if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){          //両方黒線の上にいるとき
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_st;
           cross++;                                          //カウントする
        }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){       //3だけ黒線の上にあるとき
           PlaySound(SOUND_CLICK);
           go_st;
           Wait(5);
           SetPower(OUT_A,0);
           SetPower(OUT_C,4);
           go_ri1;
           
        }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){       //1だけ黒線の上にある時
           PlaySound(SOUND_CLICK);
           go_st
           Wait(5);
           SetPower(OUT_A,4);
           SetPower(OUT_C,0);
           go_le1;
           
           
         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //直角を曲がるさい1だけ黒線の上にあるとき
           
           
           go_ri3;
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //直角を曲がるさい3だけ黒線の上にある時
           
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_le3;
         
        }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //3だけ黒線の上にあるとき
           PlaySound(SOUND_CLICK);
           go_st;
           Wait(5);
           SetPower(OUT_A,0);
           SetPower(OUT_C,4);
           go_ri1;
           
        }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //1だけ黒線の上にある時
           PlaySound(SOUND_CLICK);
           go_st
           Wait(5);
           SetPower(OUT_A,4);
           SetPower(OUT_C,0);
           go_le1;
  
         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //1だけ黒線の上にあるとき
           
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_ri2;
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //3だけ黒線の上にある時
           
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_le2;
         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //3だけ黒線の上にあるとき
           PlaySound(SOUND_CLICK);
           go_st;
           Wait(5);
           SetPower(OUT_A,0);
           SetPower(OUT_C,4);
           go_ri1;
           
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //1だけ黒線の上にある時
           PlaySound(SOUND_CLICK);
           go_st
           Wait(5);
           SetPower(OUT_A,4);
           SetPower(OUT_C,0);
           go_le1;
        }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //1だけ黒線の上にあるとき
           
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_ri2;
                         
                   
        }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //3だけ黒線の上にある時
          
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_le2;
                 
                         
                   
                                                
        }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overf){       //3だけ黒線の上にあるとき
           PlaySound(SOUND_CLICK);
           go_st;
           Wait(5);
           SetPower(OUT_A,0);
           SetPower(OUT_C,4);
           go_ri1;
             
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){       //1だけ黒線の上にある時
           PlaySound(SOUND_CLICK);
           go_st
           Wait(5);
           SetPower(OUT_A,4);
           SetPower(OUT_C,0);
           go_le1;
        }else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){       //両方黒の外にあるとき
           SetPower(OUT_A,0);
           SetPower(OUT_C,0);
           go_st;
           }
    }
}

添付ファイル: fileDSC_0036.JPG 260件 [詳細] fileDSC_0035.JPG 253件 [詳細] fileDSC_0037.JPG 268件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-07-06 (金) 15:51:38