- 追加された行はこの色です。
- 削除された行はこの色です。
[[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);}