[[2017a/Member]] 目次 #contents *課題について [#c3a9ed2f] 詳しくは課題([[2017a/Mission2]])を参照。 *ロボット本体 [#p69d1362] ロボット本体よりもセンサーを前方に取り付けることによりロボット本体の影によるセンサーで読み取る値のブレを軽減した。 *プログラム [#q9a9ed6a] #define THRESHOLD 53 #define SPEED_F 30 #define SPEED_S 20 #define turn_left OnFwd(OUT_B,SPEED_S);OnRev(OUT_C,SPEED_S); #define turn_right OnFwd(OUT_C,SPEED_S);OnRev(OUT_B,SPEED_S); #define go_forward OnFwd(OUT_BC,SPEED_S) #define STEP 1 #define cross_line go_forward;Wait(450); sub line_trace1() { SetSensorLight(S1); long t0 = CurrentTick(); while (CurrentTick()-t0 < 200) { if (SENSOR_1 < THRESHOLD -12) { turn_right; } else if (SENSOR_1 > THRESHOLD +5) { turn_left; t0 = CurrentTick() } else { go_forward; t0 = CurrentTick() } Wait(STEP); } } sub line_trace2() { SetSensorLight(S1); long t0 = CurrentTick(); while (CurrentTick()-t0 < 150) { if (SENSOR_1 < THRESHOLD -12) { turn_left; } else if (SENSOR_1 > THRESHOLD +5) { turn_right; t0 = CurrentTick() } else { go_forward; t0 = CurrentTick() } Wait(STEP); } } sub line_trace3() { SetSensorLight(S1); long t0 = CurrentTick(); while (CurrentTick()-t0 < 100) { if (SENSOR_1 < THRESHOLD -12) { turn_right; } else if (SENSOR_1 > THRESHOLD +5) { turn_left; t0 = CurrentTick() } else { go_forward; t0 = CurrentTick() } Wait(STEP); } } sub line_trace4() { SetSensorLight(S1); long t0 = CurrentTick(); while (CurrentTick()-t0 < 100) { if (SENSOR_1 < THRESHOLD -12) { turn_left; } else if (SENSOR_1 > THRESHOLD +5) { turn_right; t0 = CurrentTick() } else { go_forward; t0 = CurrentTick() } Wait(STEP); } } sub AE() { line_trace1(); PlaySound(SOUND_UP); turn_right; Wait(300); Off(OUT_BC); } sub EP() { line_trace1(); Off(OUT_BC); PlaySound(SOUND_DOWN); Wait(200); go_forward; Wait(100); turn_left; Wait(900); Off(OUT_BC); } sub PQ() { line_trace2(); cross_line; Off(OUT_BC); } sub QR() { PlaySound(SOUND_UP); line_trace4(); PlaySound(SOUND_UP); } sub RT() { turn_left; Wait(200); line_trace2(); Off(OUT_BC); PlaySound(SOUND_DOWN); Wait(200); Off(OUT_BC); turn_right; Wait(500); cross_line; Off(OUT_BC); } sub TT() { line_trace1(); Off(OUT_BC); PlaySound(SOUND_DOWN); Wait(200); Off(OUT_BC); cross_line; Off(OUT_BC); } sub TH() { line_trace1(); PlaySound(SOUND_UP); } sub HG() { line_trace1(); turn_right; Wait(1500); line_trace1(); PlaySound(SOUND_UP); turn_right; Wait(300); } sub GS() { line_trace1(); PlaySound(SOUND_DOWN); Wait(200); turn_left; Wait(1500); cross_line; Off(OUT_BC); } sub SP() { line_trace2(); cross_line; Off(OUT_BC); } sub PQ2() { PlaySound(SOUND_UP); line_trace4(); cross_line; Off(OUT_BC); } sub QF() { PlaySound(SOUND_UP); line_trace3(); PlaySound(SOUND_UP); } sub FA() { line_trace1(); PlaySound(SOUND_DOWN); } task main() { AE(); EP(); PQ(); QR(); RT(); TT(); TH(); HG(); GS(); SP(); PQ2(); QF(); FA(); }