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);}