2013b/Member

2013b/Member

プログラム

定義

#define THERESHOLD 47 // しきい値の設定
#define HIGHESTPOWER 7 // モーターを一番強く回す時のパワーの大きさ
#define HIPOWER 2 // モーターを強く回す時のパワーの大きさ(上一つも含め直進用)
#define LOWPOWER 0 // モーターを弱く回す時のパワー(カーブの時に使用)
#define set_power_HE SetPower(OUT_AC,HIGHESTPOWER);
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); // 直進
#define turn_left1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A); // 左折1(旋回)
#define turn_left0 set_power_L;OnFwd(OUT_C); Off(OUT_A); // 左折0(左の車輪を軸に回転)
#define turn_right0 set_power_L;OnFwd(OUT_A); Off(OUT_C); // 右折0(右の車輪を軸に回転)
#define turn_right1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C); 右折1(旋回)
#define STEP 1
#define nMAX 35
#define short_break Off(OUT_AC); Wait(100);
#define cross_line go_forward set_power_H;OnFwd(OUT_AC); Wait(20); short_break; // 交差点を通過
#define go_forward1 OnFwd(OUT_AC); Wait(120);
#define go_forward2 OnFwd(OUT_AC);Wait(160);
#define U_turn1 set_power_HE; OnRev(OUT_A);OnFwd(OUT_C);Wait(80);
#define U_turn2 set_power_HE; OnRev(OUT_C);OnFwd(OUT_A);Wait(160);
#define U_turn3 set_power_HE; OnFwd(OUT_A);OnRev(OUT_C);Wait(80);
#define go_back OnRev(OUT_AC); Wait(160);

ライントレース用(通常時)

sub line_trace()
{
      if (SENSOR_1 < THERESHOLD -2) {
        turn_left1;
      } else {
        if (SENSOR_1 < THERESHOLD +2) {
          turn_left0;
      } else if (SENSOR_1 < THERESHOLD +4) {
        turn_right0;
      } else {
        turn_right1;
       }
   }
}
task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
    
    ClearTimer(1);


  while (FastTimer(1) <= 1000) {
      if (SENSOR_1 < THERESHOLD -4) {
        turn_left1;
      } else {
        if (SENSOR_1 < THERESHOLD -2) {
          turn_left0;
        } else if (SENSOR_1 < THERESHOLD +2) {
          go_forward; 
        } else if (SENSOR_1 < THERESHOLD +4) {
          turn_right0;
        } else {
          turn_right1;
         }
      Wait(STEP);  
  }  
    if (SENSOR_2==1) {
    go_forward1;
    U_turn1;
    go_back;
    U_turn2;
   }
 }

  ClearTimer(0);
  ClearTimer(1);





  while (FastTimer(1) <= 5000) {
    while (FastTimer(0) < nMAX) { 
      if (SENSOR_1 < THERESHOLD -4) {
      turn_left1;
      } else {
        if (SENSOR_1 < THERESHOLD -2) {
          turn_left0;
      } else if (SENSOR_1 < THERESHOLD +2) {
          go_forward;
      } else if (SENSOR_1 < THERESHOLD +4) {
          turn_right0;
      } else {
          turn_right1;
       }
      ClearTimer(0);
     }
    Wait(STEP);
    }
    turn_right1; Wait(nMAX*STEP);
    cross_line;
    ClearTimer(0);
}
    ClearTimer(0);
    ClearTimer(1);

  while (true) {
    if (SENSOR_1 < THERESHOLD -4) {
      turn_left1;
      } else {
        if (SENSOR_1 < THERESHOLD -2) {
          turn_left0;
      } else if (SENSOR_1 < THERESHOLD +2) {
          go_forward;
      } else if (SENSOR_1 < THERESHOLD +4) {
          turn_right0;
      } else {
          turn_right1;
       }
    Wait(STEP);
    }
  }
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-12-13 (金) 17:54:40 (2073d)