#define MOVE_TIME 18 //90度回るために必要な時間 sub lift_up() //リフトを上げるためのサブルーチン { Wait(40); OnRev(OUT_B); Wait(50); Off(OUT_B); } sub lift_down() //リフトを下げるためのサブルーチン { Wait(40); OnFwd(OUT_B); Wait(50); Off(OUT_B); } sub go_straight() //直進するためのサブルーチン { Wait(50); repeat(3){ OnFwd(OUT_A); OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} } sub turn_right() //右に曲がるためのサブルーチン { Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(MOVE_TIME); Off(OUT_A+OUT_C); } sub turn_left() //左に曲がるためのサブルーチン { Wait(50); OnRev(OUT_A); OnFwd(OUT_C); Wait(MOVE_TIME); Off(OUT_A+OUT_C); } task main() { Wait(50); //連続して動かすと徐々に誤差がでるため OnFwd(OUT_A); //全ての行動の前には基本的に0、5秒間を開ける OnFwd(OUT_C); // Wait(10); //最初の「ノ」の字の飛び出る部分です Off(OUT_A+OUT_C); Wait(50); //タイヤを片方固定、もう一方を動かして、 OnFwd(OUT_A); //タイヤの間隔を利用し「ノ」の曲線部分を表現 Wait(40); Off(OUT_A); turn_right(); lift_up(); //筆を上げる Wait(50); OnFwd(OUT_A); OnFwd(OUT_C); Wait(20); Off(OUT_A+OUT_C); OnFwd(OUT_C); Wait(5); Off(OUT_C); turn_right(); lift_down(); Wait(50); //モーターの左右のパワーバランスが良くないの repeat(4){ //で、小刻み、且つ微調整を行う OnFwd(OUT_A); OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(30); Off(OUT_A+OUT_C); lift_up(); Wait(50); repeat(4){ //モーターの左右のパワーバランスが良くないの OnFwd(OUT_A); //で、小刻み、且つ微調整を行う。さっきも書いたね! OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} Wait(50); //「口」の字に到達 OnRev(OUT_A); OnFwd(OUT_C); Wait(12); Off(OUT_A+OUT_C); lift_down(); go_straight(); lift_up(); Wait(50); repeat(4){ OnRev(OUT_A); OnRev(OUT_C); Wait(5); Off(OUT_A+OUT_C); Wait(10);} turn_left(); //サブルーチンのオンパレード lift_down(); go_straight(); turn_right(); go_straight(); turn_right(); lift_up(); go_straight(); turn_right(); turn_right(); lift_down(); go_straight(); }
マシンのバランスが悪いためか、直進が右にカーブしてしまう機能を持っていたため、改良に改良を重ねた。それと、ペンを上下させるためのリフトを作るのが苦労した。