[[2005/B1]] *練習問題 [#hed12ed1] -書道ロボット #define MOVE_TIME 2 #define MATE #define taiya OUT_A+OUT_C #define a OUT_A #define c OUT_C #define b OUT_B task main() {OnFwd(OUT_B); Wait(150); //ペン上げ OnFwd(OUT_A); OnFwd(OUT_C); repeat(50){ Wait(MOVE_TIME); Off(OUT_A); Wait(MATE); OnFwd(OUT_A);} //1画目終わり Off(OUT_A+OUT_B+OUT_C); OnRev(OUT_B); Wait(100); Off(OUT_B); //ペン上げ OnFwd(OUT_A); Wait(MOVE_TIME*50-MATE*50); Off(OUT_A+OUT_C); OnFwd(taiya); Wait(20); Off(taiya); OnRev(OUT_C); Wait(240); Off(OUT_C); OnFwd(OUT_A+OUT_C); Off(taiya); OnRev(taiya); Wait(30); Off(taiya); //2画目の位置 OnFwd(OUT_B); Wait(150); OnFwd(OUT_A+OUT_B+OUT_C); Wait(130); Off(taiya); //2画目終わり OnRev(OUT_B); Wait(100); Off(OUT_B); OnFwd(OUT_C); OnRev(OUT_A); Wait(250); OnFwd(taiya); Wait(10); Off(taiya); OnFwd(OUT_A); OnRev(OUT_C); Wait(127); Off(OUT_C); OnRev(taiya); Wait(40); Off(taiya); OnFwd(OUT_B); //3画目の位置 Wait(150); OnFwd(taiya); Wait(60); Off(taiya); OnRev(OUT_B); Wait(100); Off(OUT_B); //3画目終わり OnFwd(taiya); Wait(25); OnFwd(OUT_A); OnRev(OUT_C); Wait(125); OnRev(taiya); Wait(87); Off(taiya); //4画目の位置 OnFwd(OUT_B); Wait(150); OnFwd(taiya); Wait(80); //4画目の角 repeat(15){ OnFwd(c); OnRev(a); Wait(1); Off(c); OnRev(a); Wait(1); Off(a+c); OnFwd(a+c); Wait(1); Off(OUT_A+OUT_C); } repeat(10){ OnFwd(c); OnRev(a); Wait(1); Off(a); OnFwd(c); Wait(1); Off(a+c); } OnRev(OUT_B); Wait(100); //4画目の終わり Off(OUT_B); repeat(10){ OnRev(c); OnFwd(a); Wait(1); Off(a); OnRev(c); Wait(1); Off(a+c); } repeat(15){ OnRev(c); OnFwd(a); Wait(1); Off(c); OnFwd(a); Wait(1); Off(a+c); OnRev(a+c); Wait(1); Off(OUT_A+OUT_C); } OnRev(taiya); Wait(80); Off(taiya); OnRev(a); Wait(243); OnFwd(taiya); Wait(59); Off(taiya); OnFwd(a); Wait(243); //5画目の位置 Off(taiya); OnFwd(taiya); Wait(10); Off(taiya); OnFwd(b); Wait(150); OnFwd(taiya); Wait(83); Off(a+b+c); OnRev(b); Wait(100); Off(b);} -長くてすみません。ロボットの構造がタイヤの中心よりもペンが前に出ていたのでいろいろ微調整が大変でした。 -自分ながら「4画目の角」からの直線をアレンジしてみました。結果は、うねうねの直線(?)になってしまいました。 -ロボットの工夫は、キャタピラだとキャタピラのでこぼこの位置によって微少にずれが生じてしまうと思ったのでタイヤにしました。また、4輪にすると回転しにくいとおもったので3輪車にしました。 -関数やサブルーチンを使ってもう少しプログラムを整理してみよう。 -- [[まいける(TA)]] &new{2005-12-02 (金) 17:00:30}; #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define Fa1 740 #define Sol 784 #define Ra 880 #define Si 988 #define Doo 1047 #define Ree 1175 #define oto PlayTone #define mate Wait task play_music() { while (true) { PlayTone(Ra,10);Wait(10); oto(Si,10);Wait(10); oto(Ra,10);mate(10); oto(Sol,7);mate(10); oto(Sol,60);mate(60); oto(Si,20);mate(20); oto(Ree,30);mate(30); oto(Fa1,7);mate(7); oto(Fa1,40);mate(40); oto(Sol,50);mate(47); oto(Sol,10);mate(10); oto(Fa1,10);mate(10); oto(Sol,10);mate(10); oto(Si,30);mate(30); oto(Re,7);mate(10); oto(Re,40);mate(40); }} task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); start play_music ; // 演奏を開始 OnFwd(OUT_A+OUT_B); // 前進 until (SENSOR_1 == 1); stop play_music ; // 演奏を停止 Off(OUT_A+OUT_B); // 動きも停止 } #comment