#contents
*はじめに [#f9c16381]
紙コップをC地点、D地点にそれぞれ3個(合計6個)置き、C地点に置いた紙コップにはCを、~
D地点に置いた紙コップにはDを紙コップの底面にマークします。~
最終的に黒線で囲まれた輪の中にC地点からの紙コップとD地点からの紙コップを交互に重ねます。~ (下側から数えて奇数番目はC地点からのコップ、偶数番目はD地点からのコップになるようにします)~

*ロボットについて [#q7bdba58]
#ref(IMG_1.jpg)
#ref(IMG_2.jpg)
*プログラム [#g9684b70]
-定義
 #define roll_left OnRev(OUT_A); OnFwd(OUT_C); //左回転
 #define turn_left OnFwd(OUT_C); Off(OUT_A); //左旋回
 #define go OnFwd(OUT_A); OnFwd(OUT_C); //前進
 #define turn_right OnFwd(OUT_A); Off(OUT_C); //右旋回
 #define roll_right OnFwd(OUT_A); OnRev(OUT_C); //右回転
 #define back OnRev(OUT_A); OnRev(OUT_C); Wait(200); Off(OUT_AC); //後進
 #define top OnRev(OUT_C); OnFwd(OUT_A); Wait(CROSS_TIME); OnFwd(OUT_AC); Wait(10);
 #define left OnRev(OUT_A); OnFwd(OUT_C); Wait(20);
 #define right OnRev(OUT_C); OnFwd(OUT_A); Wait(80); OnFwd(OUT_AC); Wait(20);

-サブルーチン~
  sub line_l(){
    int ch=0; //ループ脱出用変数
    ClearTimer(0); //交差点判別用のタイマー初期化
    ClearTimer(1); //交差点誤判別防止用のタイマー初期化
    while(ch==0) //chが0の時はループを続ける
    {
        if(SENSOR_2 > 53) //白部分 右回転
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              roll_right;
      }
      else if(SENSOR_2 > 52) //弱白部分 右旋回
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              turn_right;
      }
      else if(SENSOR_2 > 44) //境界部分 直進
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              go;
      }
      else if(SENSOR_2 > 41) //弱黒部分 左旋回
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              turn_left;
      }
      else{ //黒部分 左回転
              roll_left;
      }

        if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time){  //交差点判別
         Off(OUT_AC); //車輪を止める
         PlaySound(SOUND_UP);  //音を鳴らす
         Wait(100);  //1秒待つ
         ch=1; //ループ脱出の為にchを1にする
       }
       Wait(1); //0.01秒待つ 
    }
  }


  sub line_r(){
    int ch=0; //ループ脱出用変数
    ClearTimer(0); //交差点判別用のタイマー初期化
    ClearTimer(1); //交差点誤判別防止用のタイマー初期化
    while(ch==0) //chが0の時はループを続ける
    {
      if(SENSOR_2 > 53) //白部分 左回転
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              roll_left;
      }
      else if(SENSOR_2 > 52) //弱白部分 左旋回
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              turn_left;
      }
      else if(SENSOR_2 > 44) //境界部分 直進
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              go;
      }
      else if(SENSOR_2 > 41) //弱黒部分 右旋回
      {
        ClearTimer(0); //黒部分ではないので交差点判別用のタイマーを初期化
              turn_right;
      }
      else{ //黒部分 右回転
              roll_right;
      }

        if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time){  //交差点判別
         Off(OUT_AC); //車輪を止める
         PlaySound(SOUND_UP);  //音を鳴らす
         Wait(100);  //1秒待つ
         ch=1; //ループ脱出の為にchを1にする
       }
       Wait(1); //0.01秒待つ 
    }
  }
-交差点判別~
 if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time){  //交差点判別
       Off(OUT_AC); //車輪を止める
       PlaySound(SOUND_UP);  //音を鳴らす
       Wait(100);  //1秒待つ
       ch=1; //ループ脱出の為にchを1にする
     }
  ClearTimer(0);
  if(FastTimer(0)>CROSS_TIME)
  if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time)
-コップの回収~
    sub cup(){
    OnRev(OUT_B); //アームを下す
       Wait(50);
    Off(OUT_B);
       OnFwd(OUT_AC); //前進
       while(SENSOR_1<42); //光センサーがコップを認識するまで前進する
       Off(OUT_AC);  //停止
       OnFwd(OUT_B); //アームを上げる
       Wait(50);
       Off(OUT_B);
   }
-最後の処理~
  sub last(){
      OnRev(OUT_C); //姿勢をまっすぐにする
      OnFwd(OUT_A);
      Wait(40);
      OnFwd(OUT_AC); //前進
      Wait(200); //2秒間待つ
      Off(OUT_AC); //停止 
      ClearTimer(0); //交差点判別用のタイマー初期化(初期化しなくてもよいが最後なので一応初期化)
      ClearTimer(1); //交差点誤判別防止用のタイマー初期化(初期化しなくてもよいが最後なので一応初期化
    }
-本文~
  task main ()
   {
      SetSensor(SENSOR_1, SENSOR_LIGHT);
      SetSensor(SENSOR_2, SENSOR_LIGHT);
      OnFwd(OUT_AC);
      Wait(60); 
      line_l(); 
      left;
      l_time=400;
      line_l(); 
      right; 
      l_time=100;
      balance_l();
      cup();
      bottom;
      turn();
      balance_r();
      cup();
      bottom;
      turn();
      OnFwd(OUT_A);
      OnFwd(OUT_C);
      Wait(20);
      balance_r();
      cup();
      bottom;
      turn();
      OnFwd(OUT_A);
      OnFwd(OUT_C);
      Wait(20);
      balance_r();
      cup();
      bottom;
      bottom;
      bottom;
      bottom;
      l_time=200;
      OnFwd(OUT_C);
      OnRev(OUT_A);
      Wait(50);
      OnFwd(OUT_A);
      OnFwd(OUT_C);
      Wait(30);
      line_l();
      left;
      line_l();
      left;
      line_l();
      OnFwd(OUT_AC);
      Wait(50);
      Off(OUT_AC);
      OnRev(OUT_B);
      Wait(50);
      Off(OUT_B);
      OnFwd(OUT_A);
      OnRev(OUT_C);
      Wait(100);
      OnRev(OUT_AC);
      Wait(200);
      Off(OUT_AC);
  }
*プログラムの説明 [#j8118502]
*感想 [#wfec7bfc]

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