#contents *今回の課題 [#d8f15565] 自分は以下の第1コースを担当した。 Aをスタート Bを直進 Cを右折 Fを直進 Rを左折(一時停止) Pを直進 X地点の紙コップを取得してコースに戻る Qを左折 Sを直進(一時停止) Y地点に紙コップを置いてコースに戻る Sを直進(一時停止) Fを左折(一時停止) Cを右折(一時停止) D地点へ(ゴール) #ref(2017b/Mission2/2017b-mission2.png,50%,課題2のコース) * ロボット本体の説明 [#feff4d29] #ref(im1.jpg); #ref(im2.jpg); #ref(im3.jpg); #ref(im4.jpg); *プログラム[#sb3f8163] #define rightSENKAI OnFwd(OUT_A);OnRev(OUT_C); #define rightMAGARU OnFwd(OUT_A);Off(OUT_C); #define leftSENKAI OnFwd(OUT_C);OnRev(OUT_A); #define leftMAGARU OnFwd(OUT_C);Off(OUT_A); #define middle 41 #define carb 41 #define ch OnFwd(OUT_B);Wait(10);Off(OUT_B); #define re OnRev(OUT_B);Wait(5);Off(OUT_B); #define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); #define TURN_RIGHT OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_2<=40);Off(OUT_AC); #define TURN_LEFT OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2>=50);Off(OUT_AC); #define cross_stop Off(OUT_AC);Wait(100); 基本的なラインの右側トレースを以下のように定義した。 sub r() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<=21) { if(SENSOR_2>middle+5) { rightSENKAI ClearTimer(0); } else if(SENSOR_2>middle+3) { rightMAGARU ClearTimer(0); } else if(SENSOR_2>middle) { OnFwd(OUT_AC); ClearTimer(0); } else if(SENSOR_2>middle-3) { leftMAGARU ClearTimer(0); } else { leftSENKAI } } Off(OUT_AC); } task main () {r(); cross_stop;//B go(35); r(); cross_stop;//C leftSENKAI; Wait(30); r(); cross_stop;//F go(35); r(); cross_stop;//2cb go(25); l(); cross_stop;//R rightSENKAI; Wait(30); l(); cross_stop;//P ch; go(25); l();//Q go(20); r(); cross_stop;//S go(30); r(); cross_stop;//S2 go(50); rightSENKAI; Wait(65); l(); cross_stop;//F ch; rightSENKAI; Wait(160); re; back(45); leftSENKAI; Wait(160); r(); cross_stop;//C leftSENKAI; Wait(90); go(90); }