[[2017a/Member]]
#contents
* 課題について [#sb2532c9]
詳しくは[[課題2>2017a/Mission2]]を参照。
* ロボットの説明 [#z1957ffa]
今回は出来るだけコンパクトにするために、タイヤを2つだけにした。このおかげで、細かい動きが出来るようになった。また、旋回もしやすくなったので、きついペアピンも問題なく曲がる事が出来た。
* プログラムの説明 [#ocaf9c58]
** マクロ [#vb3162a2]
マクロは以下のように定義した。
 #define THRESHOLD 42
 //直角用
 #define HIPOWER 7  
 #define LOWPOWER 1   
 #define set_power_H SetPower(OUT_AC,HIPOWER);
 #define set_power_L SetPower(OUT_AC,LOWPOWER);
 #define go set_power_H; OnFwd(OUT_AC);
 #define l1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A);//左旋回
 #define l0 set_power_L;OnFwd(OUT_C); Off(OUT_A);//左折
 #define r0 set_power_L;OnFwd(OUT_A); Off(OUT_C);//右折
 #define r1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C);//右旋回
 //その他用
 #define r3 Off(OUT_AC);Wait(1);OnFwd(OUT_A);OnRev(OUT_C);//右旋回
 #define r2 Off(OUT_AC);Wait(1);OnFwd(OUT_A);//右折
 #define l3 Off(OUT_AC);Wait(1);OnFwd(OUT_C);OnRev(OUT_A);//左旋回
 #define l2 Off(OUT_AC);Wait(1);OnFwd(OUT_C);//左折
 #define teisi Off(OUT_AC);PlaySound(SOUND_DOWN);Wait(100);
直角用のマクロは、曲がりやすくするために速度を落とした。ほかの部分のマクロは、一回ごとに動きを止めることにより、無駄な動きを出来るだけ減らした。
** サブルーチン [#q57cb944]
サブルーチンは以下のように定義した。
 sub AEF_FQ_QR_SG_TH_RS_PE_EA(){int a=0;
   while(a < 20){
    if (SENSOR_2 > THRESHOLD +7) {
      r3;   
    } else if (SENSOR_2 > THRESHOLD +3) {
      r2;      
    } else if (SENSOR_2 > THRESHOLD -3) {
      go;  
    } else if(SENSOR_2 > THRESHOLD -7)  {
      l2;  
    } else{
      l3; a++;
    }
      Off(OUT_AC);
    }}

 sub F_Q_S_G_H_R_E(){
    while(SENSOR_2 < THRESHOLD ){
    l1;
    }}


 
 sub R_T_S(){
    while(SENSOR_2 < THRESHOLD ){
     go;
    }
    int c=0;
   while(c < 20){
    if (SENSOR_2 > THRESHOLD +7) {
      r3;   
    } else if (SENSOR_2 > THRESHOLD +3) {
      r2;      
    } else if (SENSOR_2 > THRESHOLD -3) {
      go;  
    } else if(SENSOR_2 > THRESHOLD -7)  {
      l2;  
    } else{
      l3; c++;
    }
      Off(OUT_AC);
    }
   while(SENSOR_2 < THRESHOLD ){
    l1;
    }}

 sub RS_SP_TT_TR(){int d=0;
   while(d < 4){
    if (SENSOR_2 > THRESHOLD +7) {
      r3;   
    } else if (SENSOR_2 > THRESHOLD +3) {
      r2;      
    } else   {
      go;  d++;
    } 
      Off(OUT_AC);
    }}

 

 sub GH(){int f=0;
   while(f < 270){
    if (SENSOR_2 > THRESHOLD +7) {
      r1;   
    } else if (SENSOR_2 > THRESHOLD +3) {
      r0;      
    } else if (SENSOR_2 > THRESHOLD -3) {
      go;  
    } else if(SENSOR_2 > THRESHOLD -7)  {
      l0;  
    } else{
      l1; f++;
    }
      Off(OUT_AC);
    }}

 sub A(){
    while(SENSOR_2 < THRESHOLD ){
    go;
    }
    Off(OUT_AC);
    }

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