[[2011a/A3/課題2左]]

[[2011a/A3/課題2左]]

*■プログラム紹介 [#af3d4b36]

**コース順序 [#re2e8fb5]

#ref(2011a/A3/課題2左/course_map_all.jpg,120%,コース)


**1.定義します [#udfb71fc]
 #define THRESHOLD 50
 task main(){

**2.光センサーをセットします [#p8d035b2]
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_3,SENSOR_LIGHT);

**3.#1区間(startからロータリーに入る前まで) [#eb0f9361]
 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区間(ロータリーに入り、ロータリーを進む) [#a5ec6403]
 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区間(ロータリーの中で、一本目の左折ルートを無視する) [#uf7ad7b7]
 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区間(一本目の左折ルートを無視した後、二本目の左折ルートに入る) [#d620cf64]
 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区間(ロータリーを出てからの直角カーブを含むルートの進行) [#x13a6a3f]
 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区間(ロータリーに入り、ロータリーを進む) [#t50e66cc]
  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区間(ロータリーの中で、一本目の左折ルートを無視する) [#y0bda2fb]
 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区間(一本目の左折ルートを無視した後、二本目の左折ルートに入る) [#q460e66e]
 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区間(ロータリーを出てから、直角カーブゾーンに入るまで) [#qf089749]
 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区間(直角カーブ区間を進行) [#c8a8a743]
 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区間(直角カーブ区間を抜ける直前から、急カーブまで) [#p5ed3b82]
 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区間(急カーブゾーンからゴールまで) [#nce83daf]
 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.停止線で停止   [#tfb66e20]
 Off(OUT_A+OUT_C);}



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