[[2005/C1/宇佐美]] #contents **ロボット製作者 [#jc5a65ca] 中川、山口、宇佐美 **ロボットの写真 [#pacc959a] &ref(2005/C1/書道ロボット/110_1018.JPG,書道ロボット・前); &ref(2005/C1/書道ロボット/110_1019.JPG,書道ロボット・後ろ); **課題:「左」を書く書道ロボット [#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); //ペンを上げる } **感想 [#v9565fe9] 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(); //ペンを上げる } **感想 [#fe9fe6ed] 定義と関数を使って改良してみた。 プログラムを見るだけで、動きがなんとなくわかるプログラムに なったと思う。 -たしかにずいぶんと分かりやすいプログラムになりましたね。 -- [[松本(教員)]] &new{2005-12-12 (月) 12:54:12}; #comment