目次
#contents
* メンバー [#ibb85475]
suiden : 主に機体を担当~
kiyomizu : 主にアームを担当~
kowhich: 主にプログラムを担当~
ryu-abe: 主に数値計測を担当~

* 課題の内容 [#w222b816]

* ロボットの紹介 [#qd0e48a4]
** ロボットの外観 [#e9cd888b]
&ref(robo1.jpg);

** 光センサー ・ アーム ・ バンパー [#l1d78243]
&ref(robo5.jpg);

** 紙コップの取り方 ・ 重ね方[#t5345db0]
&ref(robo2.jpg);
&ref(robo3.jpg);
&ref(robo4.jpg);

* プログラムの内容 [#t4cb2c52]


プログラムの内容を上図で示されたPartごとに分けて説明する。

** 定義 [#g2e707e7]
 #define THRESHOLD 50
 #define turn_left0 OnFwd(OUT_B,30);
 #define turn_left1 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);
 #define turn_right0 OnFwd(OUT_C,30);
 #define turn_right1 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);
 #define STEP 1
 #define nMAX 250
 #define short_break Off(OUT_BC);Wait(1000);
 #define cross_line;OnFwd(OUT_BC,40);Wait(300);short_break;PlaySound(SOUND_UP);

** サブルーチン [#r87f74a8]
 sub catch()
 {
     OnFwd(OUT_A,-20);Wait(1000);
     OnFwd(OUT_A,-50);Wait(400);
     Off(OUT_A);
 }
 
 
 sub release()
 { 
     OnFwd(OUT_A,20);Wait(1000);
     OnFwd(OUT_A,50);Wait(100);
     Off(OUT_A);
 }


** Part1 [#o91ad579]
 task main()
 {
     SetSensorLight(S2);
     SetSensorLight(S3);
     int nOnline = 0;
     int nPoint = 0;
 
 
     OnFwdSync(OUT_BC,60,0);Wait(2000);Off(OUT_BC);
     OnFwdSync(OUT_BC,75,-100);Wait(450);Off(OUT_BC);Wait(1000);
     OnFwdSync(OUT_BC,60,0);Wait(1200);Off(OUT_BC);
     catch();
     OnFwdSync(OUT_BC,60,0);Wait(700);
     OnFwdSync(OUT_BC,60,-100);Wait(500);Off(OUT_BC);Wait(1000);

** Part2 [#b4ae5e03]
     long t0 = CurrentTick();
 
 
     while (CurrentTick() - t0 < 3000) {
       if (SENSOR_3 > THRESHOLD +2) {
           OnFwd(OUT_B,40);
         } else {
           Off(OUT_BC);
        }      
        Wait(STEP);
        }
 
 
     while (nPoint <= 1) {
       while (nOnline < nMAX){
         if (SENSOR_3 < THRESHOLD -10) {
           turn_right1;
           nOnline++;
         } else { 
           if (SENSOR_3 < THRESHOLD -5) {
           turn_right0;
         } else if (SENSOR_3 < THRESHOLD +2) {
           OnFwdSync(OUT_BC,30,0);
         } else if (SENSOR_3 < THRESHOLD +8) {
           turn_left0;
         } else {
           turn_left1;
           }
         nOnline=0;
       }
       Wait(STEP);
       }
       short_break;
       turn_left1; Wait(nMAX*STEP);
       cross_line;
       nPoint++;
       nOnline=0;
       }


    while (nPoint == 2) {
      OnFwdSync(OUT_BC,30,0);Wait(1500);Off(OUT_BC);Wait(1000);Wait(1000);
      OnFwdSync(OUT_BC,-30,0);Wait(500);Off(OUT_BC);
      release();
      OnFwd(OUT_C,-30);Wait(200);
      OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
      catch();
      OnFwdSync(OUT_BC,75,-100);Wait(900);Off(OUT_BC);
      nPoint++;
    }


    long t1 = CurrentTick();


    while (CurrentTick() - t1 < 3000) {
      if (SENSOR_3 > THRESHOLD +2) {
          OnFwd(OUT_C,40);
        } else {
          Off(OUT_BC);
          }      
      Wait(STEP);
       }


    while (nPoint <= 6) {
      while (nOnline < nMAX + 50){
        if (SENSOR_3 < THRESHOLD -10) {
          turn_left1;
          nOnline++;
        } else { 
          if (SENSOR_3 < THRESHOLD -5) {
          turn_left0;
        } else if (SENSOR_3 < THRESHOLD +2) {
          OnFwdSync(OUT_BC,30,0);
        } else if (SENSOR_3 < THRESHOLD +8) {
          turn_right0;
        } else {
          turn_right1;
          }
        nOnline=0;
       }
      Wait(STEP);
       }
      short_break;
      turn_right1; Wait(nMAX*STEP);
      cross_line;
      nPoint++;
      nOnline=0;
       }


    while (nPoint == 7) {
      OnFwdSync(OUT_BC,75,100);Wait(300);Off(OUT_BC);Wait(1000);
      OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
      OnFwdSync(OUT_BC,75,100);Wait(200);Off(OUT_BC);Wait(1000);
      release();
      OnFwdSync(OUT_BC,60,0);Wait(1000);Off(OUT_BC);Wait(1000);
      catch();
      nPoint++;
      OnFwdSync(OUT_BC,60,0);Wait(500);Off(OUT_BC);Wait(1000);
    }


    long t2 = CurrentTick();


    while (CurrentTick() - t2 < 5000) {
      if (SENSOR_3 > THRESHOLD +2) {
          OnFwd(OUT_B,-20);OnFwd(OUT_C,50);
        } else {
          Off(OUT_BC);
          }      
      Wait(STEP);
       }


    while (nPoint == 8) {
      while (nOnline < nMAX){
        if (SENSOR_3 < THRESHOLD -10) {
          turn_left1;
          nOnline++;
        } else { 
          if (SENSOR_3 < THRESHOLD -5) {
          turn_left0;
        } else if (SENSOR_3 < THRESHOLD +2) {
          OnFwdSync(OUT_BC,30,0);
        } else if (SENSOR_3 < THRESHOLD +8) {
          turn_right0;
        } else {
          turn_right1;
          }
        nOnline=0;
       }
      Wait(STEP);
       }
      short_break;
      turn_right1; Wait(nMAX*STEP + 600);
      cross_line;
      OnFwd(OUT_BC,30);Wait(200);
      nPoint++;
      nOnline=0;
       }


    long t3 = CurrentTick();


    while (CurrentTick() - t3 < 18000) {
      if (SENSOR_3 < THRESHOLD -10) {
          turn_right1;
        } else { 
          if (SENSOR_3 < THRESHOLD -5) {
          turn_right0;
        } else if (SENSOR_3 < THRESHOLD +2) {
          OnFwd(OUT_BC,30);
        } else if (SENSOR_3 < THRESHOLD +8) {
          turn_left0;
        } else {
          turn_left1;
       }
      Wait(STEP);
       }
     }


    OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait(1000);


    while (nPoint == 9) {
      while (nOnline < nMAX){
        if (SENSOR_3 < THRESHOLD -10) {
          turn_left1;
          nOnline++;
        } else { 
          if (SENSOR_3 < THRESHOLD -5) {
          turn_left0;
        } else if (SENSOR_3 < THRESHOLD +2) {
          OnFwdSync(OUT_BC,30,0);
        } else if (SENSOR_3 < THRESHOLD +8) {
          turn_right0;
        } else {
          turn_right1;
          }
        nOnline=0;
       }
      Wait(STEP);
       }
      short_break;
      turn_right1; Wait(nMAX*STEP);
      cross_line;
      nPoint++;
      nOnline=0;
       }


    while (nPoint == 10) {
      OnFwdSync(OUT_BC,30,0);Wait(800);Off(OUT_BC);Wait(1000);
      OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(1000);
      release();
      nPoint++;
      }


    while (nPoint == 11) {
      OnFwdSync(OUT_BC,-60,0);Wait(1200);Off(OUT_BC);
      OnFwdSync(OUT_BC,75,-100);Wait(500);Off(OUT_BC);Wait(1000);
      OnFwdSync(OUT_BC,60,0);Wait(1800);Off(OUT_BC);
      catch();
      nPoint++;
      }


    while (nPoint == 12) {
      OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait(1000);
      OnFwdSync(OUT_BC,60,0);Wait(2500);Off(OUT_BC);
      OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(1000);
      release();
      nPoint++;
      }

}




* 感想・反省 [#yb026e37]

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