[[2012b/MemberOnly/進行状況]] #define right01 OnFwd(OUT_C,40);OnRev(OUT_B,20);//右に前進 #define left01 OnFwd(OUT_B,40);OnRev(OUT_C,20);//左に前進 #define THRESHOLD 20//閾値を設定 #define STEP 10//一回の判定で動く時間 #define left00 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);Wait(1200);//ボール回収時の左折 #define mae00 OnFwd(OUT_BC,20);Wait(600);//ボール回収時の前進 #define right00 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(400);//ボール回収時の右折 #define short_break00 Off(OUT_BC); Wait(1000);//一時停止 #define mae01 OnFwd(OUT_BC,20);Wait(400);//ボール回収時の前進 #define short_break01 Off(OUT_BC); Wait(500);//発射時の一時停止 task main() { SetSensorLight(S3);//光センサーを起動 short_break01 /*タイマーをセットし起動*/ long time1,timeA; /*タイマーの初期化*/ time1 = 0; timeA = 0; time1 = CurrentTick(); /*指定時間の間黒線上なら左、白線上なら右へ曲がるプログラムで移動*/ while(9000 >= timeA) { //5秒間繰り返す timeA = CurrentTick()-time1; if(SENSOR_3 < THRESHOLD) { left01; }else { right01; } Wait(STEP); } /*ここで黒線上なら右、白線上なら左へ曲がるプログラムに切り替える*/ short_break01 OnFwd(OUT_C,30);Wait(300);//切り替えが失敗しないようにプログラムの切り替え前に右側に振り切る long time2,timeB; //二つ目のタイマーを作成 /*タイマーの初期化*/ time2 = 0; timeB = 0; time2 = CurrentTick(); //タイマーを起動 while(13000 >= timeB) { //9秒間繰り返す timeB = CurrentTick()-time2; if(SENSOR_3 < THRESHOLD) { right01; }else { left01; } Wait(STEP); } /*ここで再び最初のプログラムに切り替える*/ short_break01; OnFwd(OUT_B,30); Wait(300);//切り替えが失敗しないように左に振り切る long time3,timeC;//三つ目のタイマーを作成 /*タイマーの初期化*/ time3 = 0; timeC = 0; time3 = CurrentTick(); //タイマーを起動 while(30000 >= timeC) { //26秒間繰り返す timeC = CurrentTick()-time3; if(SENSOR_3 < THRESHOLD) { left01; }else { right01; } Wait(STEP); } }