[[2013b/Member]]

[[2013b/Member]]

a

*プログラム [#i433269e]
定義
 #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 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(50);
 #define U_turn1 set_power_HE; OnRev(OUT_A);OnFwd(OUT_C);\
   Wait(180);
 #define U_turn2 set_power_HE; OnRev(OUT_C);OnFwd(OUT_A);\
   Wait(150);
 #define go_back OnRev(OUT_AC); Wait(50);
 
 
 #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