***[[学習ノート Marbled Rockfish>2005/A5/学習ノート Marbled Rockfish]] [#k8b982c5]
***課題1:字を書くロボット[[『右』を書くグループ>2005/A5/『右』を書くグループ]] [#y9c2d987]

*『右』を書くプログラム [#nc79a922]
 作成者:Marbled Rockfish
**&color(orange){&size(25){マクロを使ったプログラム掲載しました!};}; [#nd5930aa]

**マクロを使って短くしたプログラム [#q3589905]
 #define go_streight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); 
 #define up_arm OnFwd(OUT_B);Wait(10);Off(OUT_B);
 #define down_arm OnRev(OUT_B);Wait(10);Off(OUT_B);
 #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C); 
 #define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);
 task main ( )
 {
 SetPower(OUT_C,0);  //モーターパワーC0
 down_arm;           //ペン下げ
 go_streight(113);   //17.5cm前進
 up_arm;             //ペン上げ
 go_streight(45);    //7cm前進
 SetPower(OUT_C,7);  //モーターパワーC7
 turn_right(180);    //132°右旋回
 go_streight(60);    //10.3cm前進
 turn_right(82);     //90°右旋回
 back(80);           //7cm後進
 down_arm;           //ペン下げ
 go_streight(127);   //19.6cm前進
 up_arm;             //ペン上げ
 go_streight(45);    //7cm前進
 turn_right(146);    //160°右旋回
 go_streight(120);   //21.7cm前進
 turn_left(55);      //70°左旋回
 back(115);          //7cm後進
 down_arm;           //ペン下げ
 go_streight(65);    //10cm前進
 up_arm;             //ペン上げ
 back(10);           //3cm後進
 turn_left(88);      //90°左旋回
 back(60);           //7cm後進
 down_arm;           //ペン下げ
 go_streight(88);    //12.5cm前進
 up_arm;             //ペン上げ
 go_streight(70);    //7cm前進
 turn_right(95);     //90°右旋回
 back(60);           //7cm後進
 down_arm;           //ペン下げ
 go_streight(65);    //10cm前進
 up_arm;             //ペン上げ
 go_streight(60);    //7cm前進
 turn_left(95);      //90°左旋回
 back(170);          //19.5cm後進
 down_arm;           //ペン下げ
 go_streight(81);    //12.5cm前進
 up_arm;             //ペン上げ
 }

 #comment

**マクロを使う前のプログラム [#n351153d]
 #define ARM_TIME 10
 
 sub up_arm( )
 {
     OnFwd(OUT_B);Wait(ARM_TIME);Off(OUT_B);
 }
 
 sub down_arm( )
 {
     OnRev(OUT_B);Wait(ARM_TIME);Off(OUT_B);
 }
 
 task main ( )
 {
 SetPower(OUT_C,0);                                     //モーターパワーC0
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(113);Off(OUT_A+OUT_C);         //17.5cm前進
 up_arm( );                                             //ペン上げ
 OnFwd(OUT_A+OUT_C);Wait(45);Off(OUT_A+OUT_C);          //7cm前進
 SetPower(OUT_C,7);                                     //モーターパワーC7
 OnFwd(OUT_A);OnRev(OUT_C);Wait(180);Off(OUT_A+OUT_C);  //132°右旋回
 OnFwd(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);          //10.3cm前進
 OnFwd(OUT_A);OnRev(OUT_C);Wait(82);Off(OUT_A+OUT_C);   //90°右旋回
 OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C);          //7cm後進
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(127);Off(OUT_A+OUT_C);         //19.6cm前進
 up_arm( );                                             //ペン上げ
 OnFwd(OUT_A+OUT_C);Wait(45);Off(OUT_A+OUT_C);          //7cm前進
 OnFwd(OUT_A);OnRev(OUT_C);Wait(146);Off(OUT_A+OUT_C);  //160°右旋回
 OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C);         //21.7cm前進
 OnRev(OUT_A);OnFwd(OUT_C);Wait(55);Off(OUT_A+OUT_C);   //70°左旋回
 OnRev(OUT_A+OUT_C);Wait(115);Off(OUT_A+OUT_C);         //7cm後進
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(65);Off(OUT_A+OUT_C);          //10cm前進
 up_arm( );                                             //ペン上げ
 OnRev(OUT_A+OUT_C);Wait(10);Off(OUT_A+OUT_C);          //3cm後進
 OnRev(OUT_A);OnFwd(OUT_C);Wait(88);Off(OUT_A+OUT_C);   //90°左旋回
 OnRev(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);          //7cm後進
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(88);Off(OUT_A+OUT_C);          //12.5cm前進
 up_arm( );                                             //ペン上げ
 OnFwd(OUT_A+OUT_C);Wait(70);Off(OUT_A+OUT_C);          //7cm前進
 OnFwd(OUT_A);OnRev(OUT_C);Wait(95);Off(OUT_A+OUT_C);   //90°右旋回
 OnRev(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);          //7cm後進
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(65);Off(OUT_A+OUT_C);          //10cm前進
 up_arm( );                                             //ペン上げ
 OnFwd(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);          //7cm前進
 OnRev(OUT_A);OnFwd(OUT_C);Wait(95);Off(OUT_A+OUT_C);   //90°左旋回
 OnRev(OUT_A+OUT_C);Wait(170);Off(OUT_A+OUT_C);         //19.5cm後進
 down_arm( );                                           //ペン下げ
 OnFwd(OUT_A+OUT_C);Wait(81);Off(OUT_A+OUT_C);          //12.5cm前進
 up_arm( );                                             //ペン上げ
 }

**反省 [#b6742396]
 集まる時間や、家のPCに繋ぐための端子がなかったので、書いたプログラムをSAS君にメールで送るという形で作成していきました。そのためロボット製作や調整などをSAS君に任せきりになってしまったところが大きな反省点です。ゴメンね!!
-前進や後進についてもサブルーチン(あるいは関数orマクロ)を定義すれば、もう少し見やすいプログラムになると思います。 -- [[松本(教員)]] &new{2005-11-14 (月) 13:50:34};
-時間のあるときに必ず直します。<m(_ _)m>
#comment

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