[[2007a/A10/課題3右]] **3.ゆっくり動く懐中電灯に向かって進み、懐中電灯の動きが止まればブロックを投げる(担当:タマヂャン)[#e7324568] #define RUN_TIME 020 #define TURN_TIME 210 //一周に要する時間(ロボを走らせる場所によって異なる) #define TURN_TIME 138 //一周に要する時間(ロボを走らせる場所によって異なる) sub turn_left() {OnRev(OUT_A);Wait(RUN_TIME);} sub turn_right() {OnFwd(OUT_A);Wait(RUN_TIME);} sub throw() {OnRev(OUT_C);Wait(100);} task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1を光センサと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3を光センサと定義 int i; //変数iを定義(i:カウント) int i_min=0,i_max=5; int time_max,light_max=0; //光の最大値とその時の時間の変数の初期値を0に int now,last=0; //変数nowとlastを定義し初期値を0に(now:今回の動作、last:前回の動作) (1) ClearTimer(0); //タイマの値を0にする OnRev(OUT_A); //(左に旋回し光を探し始める) while(FastTimer(0)<TURN_TIME) //一周するまでwhileの中を繰り返す { if(SENSOR_1>light_max) //センサ1の値が現在の光の最大値よりも大きい場合 { light_max=SENSOR_1; //センサ1の値をlight_maxに代入 time_max=FastTimer(0); //その時の時間をtime_maxに代入 } } Off(OUT_A); OnRev(OUT_A);Wait(time_max); //光のある方向を向く (2) for(i=i_min;i<=i_max;) //カウントが0回から始まり5回以下の時forの中を繰り返す { if(SENSOR_1>SENSOR_3) //センサ1がセンサ3より大きい場合 {turn_left(); //左に曲がり now=1; //この動作をnow=1とする if(now==last) {i=0; //もし、今回の動作が前の動作と同じ場合、カウントを0にする }else{ i+=1; //今回の動作が前の動作と違う場合、カウントを+1し、 last=now;} //今回の動作をlastに代入する }else{turn_right(); //センサ1がセンサ3より小さい場合、右に曲がり now=0; //この動作をnow=0とする if(now==last) { //もし、今回の動作と前回の動作が同じ場合、カウントを0にし i=0; }else{ //今回の動作と前回の動作が同じ場合、カウントを+1し i+=1; last=now;} //今回の動作をlastに代入 } } Off(OUT_A); //(カウントが5回になったら)停止し throw(); //ブロック(ホイール)を投げる Off(OUT_C); // } (1)は懐中電灯の光を探す。[[プログラム1>2007a/A10/プログラム1]]とほぼ同じ。 &size(10){ちなみに[[失敗作>2007a/A10/失敗作]]};