2011a/A3/課題2左

■プログラム紹介

コース順序

コース

としている。

1.定義します

#define THRESHOLD 50
task main(){

2.光センサーをセットします

   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_LIGHT);

3.#1区間(startからロータリーに入る前まで)

ClearTimer(0);  
while(FastTimer(0)<=900)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //交差点の時
    {OnFwd(OUT_A+OUT_C);}
}

4-1.#2区間(ロータリーに入り、ロータリーを進む)

ClearTimer(0);  
while(FastTimer(0)<=150)
{
 
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<40)&&(SENSOR_3<41))  //交差点の時
    {Off(OUT_A); OnFwd(OUT_C);}
}

4-2.#2区間(ロータリーの中で、一本目の左折ルートを無視する)

ClearTimer(0);  
while(FastTimer(0)<=125)
{
 
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<40)&&(SENSOR_3>THRESHOLD))  //無視パターンの時
    {Off(OUT_C); OnFwd(OUT_A); }
}

4-3.#2区間(一本目の左折ルートを無視した後、二本目の左折ルートに入る)

ClearTimer(0);  
while(FastTimer(0)<=150)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if(SENSOR_1<39)  //特別左曲がり
    {OnRev(OUT_A); OnFwd(OUT_C); }
}

5.#3区間(ロータリーを出てからの直角カーブを含むルートの進行)

ClearTimer(0);  
while(FastTimer(0)<=730)
{

   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<39)&&(SENSOR_3>THRESHOLD))  //直角カーブの時
    {OnRev(OUT_A); OnFwd(OUT_C); }
}

6-1.#4区間(ロータリーに入り、ロータリーを進む)

 ClearTimer(0);  
while(FastTimer(0)<=150)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<40)&&(SENSOR_3<41))  //交差点の時
    {OnRev(OUT_A); OnFwd(OUT_C); }
}

6-2.#4区間(ロータリーの中で、一本目の左折ルートを無視する)

ClearTimer(0);  
while(FastTimer(0)<=150)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<40)&&(SENSOR_3>THRESHOLD))  //無視パターンの時
    {Off(OUT_C); OnFwd(OUT_A); }
}

6-3.#4区間(一本目の左折ルートを無視した後、二本目の左折ルートに入る)

ClearTimer(0);  
while(FastTimer(0)<=150)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if(SENSOR_1<39) //特別左曲がり
    {Off(OUT_A); OnFwd(OUT_C); }
}

7.#5区間(ロータリーを出てから、直角カーブゾーンに入るまで)

ClearTimer(0);  
while(FastTimer(0)<=300)
{
  
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //交差点の時
    {OnFwd(OUT_A+OUT_C); }
} 

8.#6区間(直角カーブ区間を進行)

ClearTimer(0);  //#1区間
while(FastTimer(0)<=650)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //交差点の時
    {OnFwd(OUT_A+OUT_C); }
   if(SENSOR_1<39)  //直角カーブの時
    {OnRev(OUT_A); OnFwd(OUT_C); }
}

9.#7区間(直角カーブ区間を抜ける直前から、急カーブまで)

ClearTimer(0);  //#1区間
while(FastTimer(0)<=700)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //交差点の時
    {OnFwd(OUT_A+OUT_C); }
} 

10.#8区間(急カーブゾーンからゴールまで)

ClearTimer(0);  //#1区間
while(FastTimer(0)<=300)
{
   
   
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが直進の時
    {OnFwd(OUT_A+OUT_C);}
   if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))  //ラインが右曲がりの時
    {OnFwd(OUT_A); Off(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))  //ラインが左曲がりの時
    {Off(OUT_A); OnFwd(OUT_C);}
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //交差点の時
    {Off(OUT_A+OUT_C); }
} 

11.停止線で停止  

Off(OUT_A+OUT_C);}

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