目次 #Contents *課題2の内容 [#ifff3ad7] #ref(2016b/Member/god22ila/Mission2/2016b-mission2.png,50%,コース) 今回の課題2の内容は上図のコースにライントレーサーを走らせ、途中に置いてあるピンポン球を掴み、ゴールにシュートするというものである。僕はA地点をスタート→P地点直進→Q地点直進→ピンポン球を掴む→Q地点直進→R地点右折→P地点直進→S地点左折→D地点へシュートというものである。 *ロボットの説明 [#r97767b5] **本体について [#he30576e] **アームについて [#t2a53cfc] *プログラミングについて [#t3de1858] #define turnright OnFwd(OUT_C,40); #define turnleft OnFwd(OUT_B,40); #define SR OnFwdSync(OUT_BC,40,-100); #define SL OnFwdSync(OUT_BC,40,100); #define gomae OnFwdSync(OUT_BC,40,0); #define XrdTR TR Wait(500);SL Wait(1400);Off(OUT_BC);Wait(300);GF Wait(500);Off(OUT_BC);n++; #define XrdST TR Wait(1000); GF Wait(200);n++; #define armup OnFwd(OUT_A,25);Wait(700);Off(OUT_A); #define armdown OnRev(OUT_A,25);Wait(700);Off(OUT_A); #define XX PlaySound(SOUND_CLICK);Wait(500);Wait(1000); **センサーとタイマーの起動 [#eb19429c] task main() { SetSensorLight(S1);//光センサー起動 int n=0; long t0 = CurrentTick();//時間を測り始める直前の時刻をt0に代入する armup//アームを上げる まず、タイマーと光センサーを起動させる while(n<7){ t0 = CurrentTick(); while(CurrentTick()-t0<600){ //CurrentTick()とt0の差が0.6秒以下の時 if(SENSOR_1>42){ //もしセンサーの値が42以上だったら左に旋回してタイマーをリセット senkaileft t0 = CurrentTick(); } else if(SENSOR_1>40){ //もしセンサーの値が40以上なら左に曲がりタイマーをリセット turnleft t0 = CurrentTick(); } else if(SENSOR_1>38){ //もしセンサーの値が38以上なら前進してタイマーをリセット gomae t0 = CurrentTick(); } else if(SENSOR_1>37){ //もしセンサーの値が37以上なら右に曲がりタイマーをリセット turnright t0 = CurrentTick(); } else{ senkairight } } Off(OUT_BC); while(n==6){ XrdST Off(OUT_BC); armup OnFwdSync(OUT_BC,40,0); Wait(300); n++; } アームを上げてそのまま本体で押し込んでシュート while(n==5){ SR Wait(700); n++; //変えた } while(n==4){ XX XrdST } while(n==3){ XrdTR } while(n==2){ XX XrdST } while(n==1){ XX XrdST PlaySound(SOUND_CLICK); Wait(500); t0 = CurrentTick(); while(CurrentTick()-t0<6000){ if(SENSOR_1>42){ SL } else if(SENSOR_1>40){ turnleft } else if(SENSOR_1>38){ GF } else if(SENSOR_1>37){ turnright } else{ SR } } Off(OUT_BC); Wait(500); armdown } while(n==0){ XX XrdST //変えた } } }