[[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

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS