[[2019a/Member]]
*課題2について [#dacdc656]










*プログラムについて [#g414466b]
まずはプログラム中で何度も行う動きのプログラムを定義する。
 int black_time=30;     \\交差点の判断のときに使う、黒色と判断している時間の上限を設定するもの。
 #define migisenkai   OnFwd(OUT_A);  OnFwd(OUT_C);  /機体を右旋回させる動作。
 #define usetsu       OnFwd(OUT_A);  Off(OUT_C);   /機体を右折させる動作。
 #define chokushin    OnFwd(OUT_A);  OnRev(OUT_C);  /機体を直進させる動作。
 #define sasetsu      Off(OUT_A);    OnRev(OUT_C);  /機体を左折させる動作。
 #define hidarisenkai OnRev(OUT_A);  OnRev(OUT_C);  /機体を左旋回させる動作。
 #define koutai       OnRev(OUT_A);  OnFwd(OUT_C);  /機体を後退させる動作。


次に主にライントレースのときに使うサブルーチンを設定する。

 sub follow_line()                   /左側の線のふちをライントレースするサブルーチンである.
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);          /センサーを設定する。
     while(FastTimer(0)<black_time){          /while関数を使い、連続して黒と判定した時間がblacktime以下の場合カッコの中の動作を繰り返す。
         if(SENSOR_2>=47){               /センサーが読み取る値が47以上の時右旋回をする.
            migisenkai ClearTimer(0);
         }else if((SENSOR_2>=43)&&(SENSOR_2<47)){    /センサーが読み取る値が43以上,47未満の時右折をする.
            usetsu ClearTimer(0);
         }else if((SENSOR_2>=39)&&(SENSOR_2<43)){    /センサーが読み取る値が39以上43未満の時,直進をする.
            chokushin ClearTimer(0);
         }else if((SENSOR_2>=36)&&(SENSOR_2<39)){    /センサーが読み取る値が36以上39未満の時,左折をする.
            sasetsu ClearTimer(0);
         }else if(SENSOR_2<36){             /センサーが読み取る値が36未満の時,左旋回をする.
            hidarisenkai
          }
     }
 Off(OUT_AC);
 Wait(100);                       /動作をスムーズにするために入れた.
 ClearTimer(0);
 }

 sub follow_line2()                  /右側の線のふちをライントレースするサブルーチンである.sub follow lineの黒と白,黒灰と白灰の動作を逆にしただけなのでせつめいは省略する.
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);
       while(FastTimer(0)<black_time){
         if(SENSOR_2<36){
            migisenkai
         }else if((SENSOR_2>=36)&&(SENSOR_2<39)){
            usetsu ClearTimer(0);
         }else if((SENSOR_2>=39)&&(SENSOR_2<43)){
            chokushin ClearTimer(0);
         }else if((SENSOR_2>=43)&&(SENSOR_2<47)){
            sasetsu ClearTimer(0);
         }else if(SENSOR_2>=47){
            hidarisenkai ClearTimer(0);
          }
     }
 Off(OUT_AC);
 Wait(100);
 ClearTimer(0);
 }

 sub cross_line()             /交差点をまっすぐ進むためのサブルーチンである.
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);
     while(SENSOR_2<47){          /センサーが読み取る値が47未満の場合直進する.
          chokushin }
     while(SENSOR_2>36){          /センサーが読み取る値が36より大きい場合右折をする.
          usetsu  }
 Off(OUT_AC);
 Wait(100);
 ClearTimer(0);
 }



 task main(){
 SetPower(OUT_B,1);
      cross_line();
      follow_line();
      cross_line();
      OnRev(OUT_C); Wait(60); Off(OUT_C); Wait(100);
      OnFwd(OUT_B); Wait(20);Off(OUT_B); Wait(100);
      koutai Wait(150); Off(OUT_AC); Wait(100);
      cross_line();
      follow_line();
      follow_line();
      black_time=20;follow_line();
      cross_line();
      black_time=20;follow_line();
      cross_line();
      follow_line();
      chokushin Wait(40); Off(OUT_AC); Wait(100);
      follow_line2();
      follow_line2();
      OnRev(OUT_B) Wait(20) Off(OUT_B);
      hidarisenkai Wait(30) Off(OUT_AC);
          }

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