Nori の学習ノート

製作途中のプログラムや改良前のプログラム等

  • 課題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);
  }
 }
}

  • 課題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 に戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-30 (金) 17:36:01 (4798d)