*課題1(書道ロボ) [#hed12ed1] -黄金の右 #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(); } //終了 自分で作って何だけど、長ったらしいなあ。マシンのバランスが悪いためか、直進が右にカーブしてしまう素敵な機能を持っていたため、改良に改良を重ねました。結果、「右」というより「メロ」になってしまった。 #comment * 光センサ [#p2ce82f0] -奇跡的な軌跡 task main () { SetSensor(SENSOR_2, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); while (true) { if ((SENSOR_2 < 40) && (SENSOR_3 < 40)){ OnFwd(OUT_A+OUT_C); } if ((SENSOR_2 < 40) && (SENSOR_3 > 40)) { OnFwd(OUT_C); Off(OUT_A); } if ((SENSOR_2 > 40) && (SENSOR_3 < 40)) { OnFwd(OUT_A); Off(OUT_C); } } } -細かいところで工夫をからしていますね。良くできています。 -- [[かとりーぬ]] &new{2005-11-25 (金) 19:01:40}; #comment