メンバー

ロボットの紹介

IMG_1004_e.JPG

コースの攻略

IMG_1001_e.JPG

プログラムの説明

#define zone1 37
#define zone2 45
#define zone3 60
#define zone4 65
#define zensin OnFwd(OUT_BC,40);
#define sasetu OnFwd(OUT_B,40);Off(OUT_C);
#define kyuusasetu OnFwd(OUT_B,40);OnRev(OUT_C,35);
#define usetu OnFwd(OUT_C,40);Off(OUT_B);
#define kyuuusetu OnFwd(OUT_C,40);OnRev(OUT_B,35);
#define STEP 1
#define nMAX 220
#define short_break Off(OUT_BC);Wait(1000);
task main ()
{
   SetSensorLight(S3);
   int nOnline=0;
   long t0 = CurrentTick();
   int n=0;
   while (CurrentTick()-t0 <= 7000) { //7秒後缶をつかむ
       if (SENSOR_3 < zone1) {
           kyuusasetu;
       } else if (SENSOR_3 < zone2) {
           sasetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           usetu;
       } else {
           kyuuusetu;
       }
      Wait(STEP);
   }
      OnRev(OUT_A,50);Wait(500);Off(OUT_A);
   while (CurrentTick()-t0 <=14000) { //14秒後にライントレースの変更
       while(nOnline < nMAX && CurrentTick()-t0 <= 14000) {
           if (SENSOR_3 < zone1) {
           kyuusasetu;
           nOnline++;
     } else {
         if (SENSOR_3 < zone2) {
           sasetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           usetu;
       } else {
           kyuuusetu;
         }
       nOnline=0;
       }
      Wait(STEP);
   }
   kyuuusetu;Wait(nMAX*STEP);
   OnFwd(OUT_BC,30);Wait(200);
   nOnline=0;
 }usetu;Wait(100);
   while (CurrentTick()-t0 <= 28000) { //28秒後にもう一度ライントレースの変更
       while(nOnline < nMAX && CurrentTick()-t0 <= 28000) {
           if (SENSOR_3 < zone1) {
           kyuuusetu;
           nOnline++;
     } else {
         if (SENSOR_3 < zone2) {
           usetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           sasetu;
       } else {
           kyuusasetu;
         }
       nOnline=0;
       }
      Wait(STEP);
   }
   kyuusasetu;Wait(nMAX*STEP);
   OnFwd(OUT_BC,30);Wait(200);
   nOnline=0;
 }sasetu;Wait(200);
   while (CurrentTick()-t0 <= 54000) { //54秒後以降に1度でも交差点があれば缶を置く
       while(nOnline < nMAX && CurrentTick()-t0 <= 54000) {
           if (SENSOR_3 < zone1) {
           kyuusasetu;
           nOnline++;
     } else {
         if (SENSOR_3 < zone2) {
           sasetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           usetu;
       } else {
           kyuuusetu;
         }
       nOnline=0;
       }
      Wait(STEP);
   }
   kyuuusetu;Wait(nMAX*STEP);
   OnFwd(OUT_BC,30);Wait(200);
   nOnline=0;
 }
   while (n<2) {
       while(nOnline < nMAX && n<2) {
           if (SENSOR_3 < zone1) {
           kyuusasetu;
           nOnline++;
     } else {
         if (SENSOR_3 < zone2) {
           sasetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           usetu;
       } else {
           kyuuusetu;
         }
       nOnline=0;
       }
      Wait(STEP);
   }
   kyuuusetu;Wait(nMAX*STEP);
   OnFwd(OUT_BC,30);Wait(200);
   nOnline=0;n++;
 }
   OnRev(OUT_BC,50);Wait(500);OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(300);
   OnFwd(OUT_B,50);OnRev(OUT_C,50);until(SENSOR_3 < 50);
   long t1 = CurrentTick();
     while (CurrentTick()-t1 <= 1600) {
       if (SENSOR_3 < zone1) {
           kyuuusetu;
       } else if (SENSOR_3 < zone2) {
           usetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           sasetu;
       } else {
           kyuusasetu;
       }
      Wait(STEP);
   }
   sasetu;Wait(270);Off(OUT_BC);OnFwd(OUT_A,50);Wait(300);Off(OUT_A);
   OnRev(OUT_BC,50);Wait(600);OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(300);
   OnFwd(OUT_C,50);OnRev(OUT_B,50);until(SENSOR_3 < 50);
   long t2 = CurrentTick();
       while (CurrentTick()-t2 <= 3900) {
       if (SENSOR_3 < zone1) {
           kyuusasetu;
       } else if (SENSOR_3 < zone2) {
           sasetu;
       } else if (SENSOR_3 < zone3) {
           zensin;
       } else if (SENSOR_3 < zone4) {
           usetu;
       } else {
           kyuuusetu;
       }
      Wait(STEP);
   }
   Off(OUT_BC);

}

まとめ

毎回の時間の誤差の解決が大変でした。 特にある程度アバウトですがある程度どんなときでもクリアできる時間を探し出すのは苦労しました。 また電池の残量により速度が変わり1度プログラムの数値を見直したりしたのは大変だったのでこれからは電池の残量にもしっかりと気配りしたいと思います。

反省点

プログラミングの力をもっとつけなければいけないと思いました。 また100%成功するわけではないのでロボを改良したり何かほかの方法を見つけ出せるようになりたいと思います。 電池の残量もよく確認していきたいです。


添付ファイル: fileIMG_1004_e.JPG 249件 [詳細] fileIMG_1003_e.JPG 151件 [詳細] fileIMG_1002_e0.JPG 124件 [詳細] fileIMG_1001_e.JPG 253件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-13 (火) 23:15:05