目次 #contents *課題について [#odf54201] 今回課題は、空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる。 &br; 詳しい課題3については[[こちら>2017a/Mission3]] *ロボット本体について [#h2ccc9a9] *プログラムについて [#c15d8327] **defineについて [#p8722fcd] 基本的な右左旋回、右左折、直進を定義した。 #define senkai_left OnRev(OUT_C);OnFwd(OUT_A);//左旋回 #define senkai_right OnFwd(OUT_C);OnRev(OUT_A); //右旋回 #define turn_left Off(OUT_C);OnFwd(OUT_A);//左折 #define turn_right OnFwd(OUT_C);Off(OUT_A);//右折 #define fwd OnFwd(OUT_AC);//直進 **void、サブルーチンについて [#g2d41d36] 直進するプログラム void go_fwd(int time) { fwd; Wait(time); Off(OUT_AC); } 交差点を右折するプログラム。旋回をすることで小さく曲がれるようにした。 sub usetu() { turn_right; Wait(230); Off(OUT_C); senkai_right; Wait(50); Off(OUT_AC); OnRev(OUT_AC); Wait(30); Off(OUT_AC); } sub sasetu() { turn_left; Wait(190); Off(OUT_A); senkai_left; Wait(40); Off(OUT_AC); } PQRSの交差点では、90度に曲がるのではないため、時間を調整し斜めに車体を向けるようにした。 sub naname_usetu() { OnFwd(OUT_C); Off(OUT_A); Wait(200); Off(OUT_C); OnRev(OUT_AC); Wait(40); Off(OUT_AC); } 缶を置いて離れるためのプログラム sub owari() { turn_right; Wait(70); Off(OUT_AC); Wait(450); OnRev(OUT_AC); Wait(200); Off(OUT_AC); } sub line_trace() { SetSensor(SENSOR_1, SENSOR_LIGHT); //右 SetSensor(SENSOR_3, SENSOR_LIGHT); //左 ClearTimer(0); PlaySound(SOUND_CLICK); while(FastTimer(0)<11){ if(SENSOR_1>=49&&SENSOR_3>=55){ fwd; ClearTimer(0); }else if(SENSOR_3>=50){ turn_right; ClearTimer(0); }else if(SENSOR_1>=40){ turn_left; ClearTimer(0); }else if(SENSOR_3>=48){ senkai_right; ClearTimer(0); }else if(SENSOR_1>=38){ senkai_left; ClearTimer(0); }else if(SENSOR_1>=30){ Off(OUT_AC); PlaySound(SOUND_LOW_BEEP); }else if(SENSOR_3>=30){ Off(OUT_AC); PlaySound(SOUND_LOW_BEEP); }else{ fwd; Wait(30); Off(OUT_AC); } } Off(OUT_AC); PlaySound(SOUND_CLICK); } void line_trace_2(int time) { SetSensor(SENSOR_1, SENSOR_LIGHT); //右 SetSensor(SENSOR_3, SENSOR_LIGHT); //左 ClearTimer(0); ClearTimer(1); PlaySound(SOUND_CLICK); while(FastTimer(0)<11&&FastTimer(1)<time){ if(SENSOR_1>=49&&SENSOR_3>=55){ fwd; ClearTimer(0); }else if(SENSOR_3>=50){ turn_right; ClearTimer(0); }else if(SENSOR_1>=40){ turn_left; ClearTimer(0); }else if(SENSOR_3>=48){ senkai_right; ClearTimer(0); }else if(SENSOR_1>=38){ senkai_left; ClearTimer(0); }else if(SENSOR_1>=30){ Off(OUT_AC); PlaySound(SOUND_LOW_BEEP); }else if(SENSOR_3>=30){ Off(OUT_AC); PlaySound(SOUND_LOW_BEEP); }else{ fwd; Wait(30); Off(OUT_AC); } } Off(OUT_AC); } **タイヤ側のプログラム [#mdc70070] task main() { go_fwd(50); line_trace(); usetu(); repeat(2){ line_trace(); Wait(50); naname_usetu(); Wait(50); } line_trace_2(230); Wait(500); senkai_left; Wait(200); Off(OUT_AC); go_fwd(30); line_trace(); Wait(450); sasetu(); line_trace(); owari(); } **アーム側のプログラム [#rc2508b5] アームのプログラムについてはこちら[[miso>2017a/Member/miso/Mission3]]を見てください。 *結果 [#c1625a78] 空き缶を3段積み重ねることができたため、3+6+9=18点となった。 &br; 実際に積み上げている様子はこちらhttps://www.youtube.com/watch?v=I_fwqzWXyB0 *まとめ [#gf4a75fc] [[miso &br; ejj &br; sawa