*Nori の学習ノート [#j0e44e7b]
製作途中のプログラムや改良前のプログラム等

&aname(kadai2-1-1);
-課題2-1のプログラム初期バージョン

 作成日: 2006/06/06
 ====================
 
 #define THRESHOLD 40     //閾値を定義
 
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1が光センサであることを宣言
  SetSensor(SENSOR_2,SENSOR_TOUCH);     //センサ2がタッチセンサであることを宣言
  SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3が光センサであることを宣言
 
  Wait(100);     //すぐに動き出さないように待機
  while(true)     //以下無限ループ
  {
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))     //センサ1,3共に黒線を認識した場合
   {                                                  //直進する
    OnFwd(OUT_A+OUT_C);
   }
   if((SENSOR_1>=THRESHOLD)&&(SENSOR_3<THRESHOLD))     //センサ3のみが黒線を認識した場合
   {                                                   //右モータのみを正回転
    Off(OUT_C);
    OnFwd(OUT_A);
   }
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>=THRESHOLD))     //センサ1のみが黒線を認識した場合
   {                                                   //左モータのみを正回転
    Off(OUT_A);
    OnFwd(OUT_C);
   }
   if(SENSOR_2==1)     //センサ2が押されたら、0.5秒後退し、その後1.8秒回転して方向転換
   {
    OnRev(OUT_A+OUT_C);
    Wait(50);
    OnFwd(OUT_C);
    Wait(180);
   }
  }
 }


&aname(kadai2-1-1);
-課題2-2のプログラム初期バージョン

 作成日:2006/06/07
 ====================
 
 #define THRESHOLD 40
 
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1が光センサであることを宣言
  SetSensor(SENSOR_2,SENSOR_TOUCH);     //センサ2がタッチセンサであることを宣言
  SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3が光センサであることを宣言
 
  Wait(100);     //すぐに動き出さないように待機
  while(true)     //以下無限ループ
  {
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))     //センサ1,3共に黒線を認識した場合
   {                                                  //直進する
    OnFwd(OUT_A+OUT_C);
   }
   if((SENSOR_1>=THRESHOLD)&&(SENSOR_3<THRESHOLD))     //センサ3のみが黒線を認識した場合
   {                                                   //右モータのみを正回転
    Off(OUT_C);
    OnFwd(OUT_A);
   }
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>=THRESHOLD))     //センサ1のみが黒線を認識した場合
   {                                                   //左モータのみを正回転
    Off(OUT_A);
    OnFwd(OUT_C);
   }
   if(SENSOR_2==1)     //センサ2が押されたら、右に移動し前方のロボットを避ける
   {
    Off(OUT_A+OUT_C);
    OnRev(OUT_A);
    Wait(150);
    OnFwd(OUT_A+OUT_C);
    Wait(150);
    Off(OUT_C);
    Wait(150);
    OnFwd(OUT_C);
    Wait(150);
    Off(OUT_C);
    Wait(150);
    OnFwd(OUT_C);
   }
  }
 }

-課題3の初期のプログラム(光を追いかけるだけ)

 作成日 2006/06/30
 ==================
 #define TURN 300     //1回転にかかる時間を定義
 
 task main()
 {
  int lmax=0,tmax=0;     //整数型変数lmax,tmaxを宣言し0を代入
 
  SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサ1が光センサであることを宣言
  SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサ3が光センサであることを宣言
 
  Wait(100);     //すぐに動き出さないように待機
  while(true)     //以下無限ループ
  {
   lmax=SENSOR_1;     //lmaxにセンサ1の値を代入
   OnFwd(OUT_A);OnRev(OUT_C);     //回転開始
   ClearTimer(0);     //タイマ0をクリア
   while(FastTimer(0)<=TURN)     //1回転する
   {
    if(lmax<SENSOR_1)
    {                       //センサ1の値がlmaxより大きいなら
     lmax=SENSOR_1;         //lmaxにセンサ1の値を代入し,
     tmax=FastTimer(0);     //tmaxにタイマ0の値を代入
    }
   }
   Off(OUT_A+OUT_C);     //回転停止
   OnFwd(OUT_C);OnRev(OUT_A);
   Wait(TURN-tmax);     //(TURN-tmax)*10^-2 秒間逆回転
   Off(OUT_A+OUT_C);
   Wait(20);
 
   while((SENSOR_1>=(lmax-20))||(SENSOR_3>=(lmax-20)))     //センサ1,センサ3の値がlmax-20以上の間光を追いかける
   {
    if(SENSOR_1==SENSOR_3)     //センサ1とセンサ3の値が等しければ直進
    {OnFwd(OUT_A+OUT_C);}
    if(SENSOR_1<SENSOR_3)     //センサ1の値がセンサ3より小さければ左へ
    {Off(OUT_C);OnFwd(OUT_A);}
    if(SENSOR_1>SENSOR_3)     //センサ1の値がセンサ3より大きければ右へ
    {Off(OUT_A);OnFwd(OUT_C);}
   }
   Off(OUT_A+OUT_C);
  }
 }

[[2006a/C4 に戻る>2006a/C4]]


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