[[2018b/Member]] #contents *課題2 [#g0917994] *課題2 [#o5399089] 課題2のコース &ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=2018b-mission2.png&refer=2018b%2FMember%2Fyuto%2FMission2); このコースで、次のルートを通る ロボットを正方形X内におき、Lをスタート Eを一時停止して直進 Iを一時停止して左折 Hを直進 Kを直進 Jを左折 Cを一時停止して右折 Eを一時停止して直進 Gを一時停止して直進 長方形X内に入って停止 *ロボットの概要 [#w0a4fd15] **光センサー [#s3815857] **超音波センサー [#x0c1b05e] *プログラミング [#t9db7ee0] #define migi0 OnFwd(OUT_A,15);OnRev(OUT_C,10); #define migi1 OnFwd(OUT_A,15);Off(OUT_C); #define hidari0 OnFwd(OUT_C,15);OnRev(OUT_A,10); #define hidari1 OnFwd(OUT_C,15);Off(OUT_A); #define middle 48 #define go(time) OnFwd(OUT_AC,15);Wait(time);Off(OUT_AC); #define back(time) OnRev(OUT_AC,15);Wait(time);Off(OUT_AC); #define LEFT(angle) OnFwd(OUT_C,15);OnRev(OUT_A,10);Wait(angle);Off(OUT_AC); #define RIGHT(angle) OnFwd(OUT_A,15);OnRev(OUT_C,10);Wait(angle);Off(OUT_AC); sub Line() { SetSensorLight(S1); long t0=CurrentTick(); while(CurrentTick()-t0<=28) { if(SENSOR_1>middle+8) { migi0; t0=CurrentTick(); } else if(SENSOR_1>middle+6) { migi1; t0=CurrentTick(); } else if(SENSOR_1>middle) { OnFwd(OUT_AC,30); t0=CurrentTick(); } else if(SENSOR_1>middle-6) { hidari0; t0=CurrentTick(); } else { hidari1; t0=CurrentTick(); } } Off(OUT_AC); } sub Line2() { SetSensorLight(S1); long t0=CurrentTick(); while(CurrentTick()-t0<=28) { if(SENSOR_1>middle+8) { migi0; t0=CurrentTick(); } else if(SENSOR_1>middle+6) { migi1; t0=CurrentTick(); } else if(SENSOR_1>middle) { OnFwd(OUT_AC,30); t0=CurrentTick(); } else if(SENSOR_1>middle-6) { hidari0; t0=CurrentTick(); } else { hidari1; t0=CurrentTick(); } } Off(OUT_AC); } void mitsukeru() { ResetTachoCount(OUT_ABC); OnFwd(OUT_A,50); OnRev(OUT_C,50); SetSensorLowspeed(S4); int d1; d1=1000; long t0=CurrentTick(); long t1=CurrentTick(); long t2=CurrentTick(); while(t2-t0<=3570){ t2=CurrentTick(); if(SensorUS(S4)<d1){ d1=SensorUS(S4); t1=CurrentTick(); } t2=CurrentTick(); } t0=CurrentTick(); Off(OUT_AC); OnFwd(OUT_C,50); OnRev(OUT_A,50); Wait(t0-t1); } task main() { Line(); RIGHT(15); Line(); Wait(1000); LEFT(15); Line(); go(50); mitsukeru(); OnFwd(OUT_B,30); Wait(2000); Off(OUT_B); Line(); go(50); Line(); LEFT(15); Line(); Wait(1000); LEFT(15); Line2(); Line(); Wait(1000); RIGHT(15); Line(); go(100); Off(OUT_BC); }