[[2005/C1/宇佐美]] **課題:「左」を書く書道ロボット [#j7ad21aa] task main() { OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_C); OnFwd(OUT_A); Wait(75); Off(OUT_C+OUT_A); //1画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(120); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnRev(OUT_C); Wait(115); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(30); Off(OUT_C+OUT_A); //2画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(90); Off(OUT_A+OUT_C); //2画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(95); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnRev(OUT_A); Wait(108); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnFwd(OUT_A); Wait(75); Off(OUT_C+OUT_A); //3画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_C); OnFwd(OUT_A); Wait(40); Off(OUT_C+OUT_A); //3画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(85); Off(OUT_C+OUT_A); OnRev(OUT_C); OnFwd(OUT_A); Wait(107); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(61); Off(OUT_C+OUT_A); //4画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(35); Off(OUT_C+OUT_A); //4画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる OnRev(OUT_C); OnRev(OUT_A); Wait(65); Off(OUT_C+OUT_A); OnFwd(OUT_C); OnRev(OUT_A); Wait(102); Off(OUT_C+OUT_A); OnFwd(OUT_A); OnFwd(OUT_C); Wait(40); Off(OUT_C+OUT_A); //5画目へ移動 OnRev(OUT_B); Wait(50); //ペンを下げる OnFwd(OUT_A); OnFwd(OUT_C); Wait(60); Off(OUT_C+OUT_A); //5画目 OnFwd(OUT_B); Wait(50); Off(OUT_B); //ペンを上げる } 感想:1度はFloatを使おうとしたけど妥協。 サブルーチンや変数、定数を使わなかったので、かなり長いプログラムに なってしまった。 紙に書いてみても、バランスの悪いものとなってしまった。 **課題:「左」を書く書道ロボット(改) [#wb02f990] #define b 50 sub pen_down() { OnRev(OUT_B); Wait(b); } //ペンを下げるサブルーチン sub pen_up() { OnFwd(OUT_B); Wait(b); Off(OUT_B); } //ペンを上げるサブルーチン void go_straight(int t) { Onfwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } //直進して止まる関数 void turn_right(int t) { OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); } //右へ曲がって止まる関数 void turn_left(int t) { OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); } //左へ曲がって止まる関数 task main() { pen_down(); //ペンを下げる go_straight(); //1画目 pen_up(); //ペンを上げる go_back(120); turn_right(115); [回転] go_straight(30); //2画目へ移動完了 pen_down(); //ペンを下げる go_straight(90); //2画目 pen_up(); //ペンを上げる go_back(95); turn_left(108); [回転] go_straight(75); //3画目へ移動完了 pen_down(); //ペンを下げる go_straight(40); Off(); //3画目 pen_up(); //ペンを上げる go_back(85); Off(); turn_right(107) Off(); [回転] go_straight(61); Off(); //4画目へ移動完了 pen_down(); //ペンを下げる go_straight(35); Off(); //4画目 pen_up(); //ペンを上げる go_back(65); Off(); turn_left(102) off() go_straight(40); Off(); //5画目へ移動完了 pen_down(); //ペンを下げる go_straight(60); Off(); //5画目 pen_up(); //ペンを上げる } 感想:定義と関数を使って改良してみた。 プログラムを見るだけで、動きがなんとなくわかるプログラムに なったと思う。