*課題1(書道ロボ) [#hed12ed1]
-黄金の右

 #define MOVE_TIME 18  //90度回るために必要な時間
 sub lift_up()         //リフトを上げるためのサブルーチン
 {
  Wait(40);           
   OnRev(OUT_B);
   Wait(50);
   Off(OUT_B);
 }
 
 sub lift_down()      //リフトを下げるためのサブルーチン
 {
  Wait(40);
   OnFwd(OUT_B);
   Wait(50);
   Off(OUT_B);
 }
 
 sub go_straight()   //直進するためのサブルーチン
 {
  Wait(50);
 repeat(3){
   OnFwd(OUT_A);
   OnFwd(OUT_C);
   Wait(10);
   Off(OUT_A+OUT_C);
   Wait(10);}
 }
 
 sub turn_right()   //右に曲がるためのサブルーチン
 {
  Wait(50);
   OnFwd(OUT_A);
   OnRev(OUT_C);
   Wait(MOVE_TIME);
   Off(OUT_A+OUT_C);
 }
 
 sub turn_left()   //左に曲がるためのサブルーチン
 {
  Wait(50);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(MOVE_TIME);
   Off(OUT_A+OUT_C);
 }
 
 task main()
 {
  Wait(50);       //連続して動かすと徐々に誤差がでるため
   OnFwd(OUT_A);  //全ての行動の前には基本的に0、5秒間を開ける
   OnFwd(OUT_C);  //
   Wait(10);      //最初の「ノ」の字の飛び出る部分です
   Off(OUT_A+OUT_C);
 
  Wait(50);       //タイヤを片方固定、もう一方を動かして、
   OnFwd(OUT_A);  //タイヤの間隔を利用し「ノ」の曲線部分を表現
   Wait(40);
   Off(OUT_A);
 
   turn_right();
 
   lift_up();     //筆を上げる
 
  Wait(50);      
   OnFwd(OUT_A);
   OnFwd(OUT_C);
   Wait(20);
   Off(OUT_A+OUT_C);
   OnFwd(OUT_C);
   Wait(5);
   Off(OUT_C);
 
   turn_right();
 
   lift_down();
 
  Wait(50);            //モーターの左右のパワーバランスが良くないの
 repeat(4){            //で、小刻み、且つ微調整を行う
   OnFwd(OUT_A);
   OnFwd(OUT_C);
   Wait(10);
   Off(OUT_A+OUT_C);
   Wait(10);}
 
  Wait(50);
   OnFwd(OUT_A);
   OnRev(OUT_C);
   Wait(30);
   Off(OUT_A+OUT_C);
 
   lift_up();
 
    Wait(50);
 repeat(4){         //モーターの左右のパワーバランスが良くないの
   OnFwd(OUT_A);    //で、小刻み、且つ微調整を行う。さっきも書いたね!
   OnFwd(OUT_C);
   Wait(10);
   Off(OUT_A+OUT_C);
   Wait(10);}
 
  Wait(50);         //「口」の字に到達
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(12);
   Off(OUT_A+OUT_C);
 
   lift_down();
 
   go_straight();
 
   lift_up();
 
  Wait(50);
 repeat(4){
   OnRev(OUT_A);
   OnRev(OUT_C);
   Wait(5);
   Off(OUT_A+OUT_C);
   Wait(10);}
 
  turn_left();    //サブルーチンのオンパレード
 
  lift_down();
 
  go_straight();
 
  turn_right();
 
  go_straight();
 
  turn_right();
 
  lift_up();
 
  go_straight();
 
  turn_right();
 
  turn_right();
 
  lift_down();
 
  go_straight();
 
  }                 //終了
自分で作って何だけど、長ったらしいなあ。マシンのバランスが悪いためか、直進が右にカーブしてしまう素敵な機能を持っていたため、改良に改良を重ねました。結果、「右」というより「メロ」になってしまった。
#comment

* 光センサ [#p2ce82f0]
-奇跡的な軌跡
 task main ()
 {
    SetSensor(SENSOR_2, SENSOR_LIGHT);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
   while (true) {  
     if ((SENSOR_2 < 40) && (SENSOR_3 < 40)){
      OnFwd(OUT_A+OUT_C);
     } 
     if ((SENSOR_2 < 40) && (SENSOR_3 > 40)) { 
     OnFwd(OUT_C); 
     Off(OUT_A);
     }
     if ((SENSOR_2 > 40) && (SENSOR_3 < 40)) { 
      OnFwd(OUT_A); 
      Off(OUT_C);
     }
    }
 }
-細かいところで工夫をからしていますね。良くできています。 -- [[かとりーぬ]] &new{2005-11-25 (金) 19:01:40};
-プログラムの表題がすばらしい! -- [[教員(松本)]] &new{2005-12-28 (水) 13:09:13};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS