2006a/B5

初めてのプログラム

ロボットを四角に走らせるプログラム

task main()
{
OnFwd(OUT_A+OUT_C);             //前進
Wait200;
Off(OUT_A+OUT_C);               //停止
OnFwd(OUT_A);OnRev(OUT_C);      //旋回
Wait45;
OnFwd(OUT_A+OUT_C);             //前進
Wait200;
Off(OUT_A+OUT_C);               //停止
OnFwd(OUT_A);OnRev(OUT_C);      //旋回
Wait45;
OnFwd(OUT_A+OUT_C);             //前進
Wait200;
Off(OUT_A+OUT_C);               //停止
OnFwd(OUT_A);OnRev(OUT_C);      //旋回
Wait45;
OnFwd(OUT_A+OUT_C);             //前進
Wait200;
Off(OUT_A+OUT_C);               //停止

マクロを使って簡単に

 #define TURN_TIME 45
 #define go_straight(int t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);     
 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C);     
 
 task main()
 {
  repeat(3)                //3回繰り返す
   {
    go_straight(200);   //2秒間前進
    turn;                  //旋回
    }
   go_straight(200);    //2秒間前進
  }

タッチセンサを使ったロボット

壁の間を行き帰り

 作成:坂本達也 

 task main()
 { 
  SetSensor(SENSOR_1,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_TOUCH);
  
  While(true)                              //この後の動作を延々繰り返す
  {OnFwd(0UT_A+OUT_C);
  until((SENSOR_1==1)||(SENSOR_3==1));     //両方のセンサーが壁に当たったら
  Off(OUT_A+OUT_C);                        //停止
  Rev(OUT_A+OUT_C);                        //後退
  Wait(100);
  Fwd(OUT_A)+Rev(OUT_C);                   //反転した後、前進(最初のプログラムに戻る)
  Wait(360);}
   }

光センサーを使ったロボット

黒い線に沿って動くロボット

#define THRESHOLD 40                                    //センサーの閾値を設定

task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);

 while(true)
 {
   If((SENSOR_1> THRESHOLD)&&(SENSOR_3> THRESHOLD))   //両方のセンサーが白紙の上にある状態ならば前進 
  {
        OnFwd(OUT_A+OUT_C);
   } 
   If(SENSOR_1< THRESHOLD)                         //センサー1が黒線上にある状態
  { 
    OnFwd(OUT_C);                    //センサー1が白紙の上に戻るまで左旋回
    until(SENSOR_1> THRESHOLD);
   }
  If(SENSOR_3< THRESHOLD)                     //センサー3が黒線上にある状態
  {
    OnFwd(OUT_A);                      //センサー3が白紙の上に戻るまで右旋回
    until(SENSOR_3> THRESHOLD);
   }
  }
}

光を追いかけるロボット

int light_max=0,time_max=0;             //light_max,time_maxという変数を定義し、その値に0を代入
#define TURN_TIME 360                              //一周回転する時間を定義
#define TURN_RIGHT OnFwd(OUT_A);OnRev(OUT_C);      //右回転動作を定義
#define TURN_LEFT OnRev(OUT_A);OnFwd(OUT_C);       //左回転を定義
#define STOP Off(OUT_A+OUT_C);                     //停止動作を定義
 
task main()
{ 
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  ClearTimer(0);                          //タイマーリセット
   
   while(FastTimer(0)<TURN_TIME)                 //タイマーの値がTURN-TIMEより大きくなるまで動作を繰り返す
   {
      TURN_RIGHT;
      if(SENSOR_1>light_max)                       //光を見つけた(=センサー1の値が最大となった)
      {
        light_max=SENSOR_1;            //光を受けたセンサー1の値をlight_maxの値に代入
        time_max=FastTimer(0);             //光を見つけるまでの時間をtime_maxの値に代入
       }
   }  
   STOP;  Wait(50);                //0.5秒停止
 TURN_LEFT;                                 //左に回転
 Wait(TURN_TIME-time_max);             //光を見つけるまでの時間だけ回転
 STOP;                                             //停止
 while(true)                    
{
  if(SENSOR_1!=light_max)             //センサー1の値がlight_maxの値と異なる
  {
    TURN_RIGHT;                  //センサー1がlight_maxの値になるまで右に回転
    until(SENSOR_1==light_max);
   }
 }
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-27 (木) 18:27:12