[[2016b/Member]]

目次
#contents

*プログラム(バッター側) [#abed7c98]
**内容 [#y6070f49]
 #define BLANK Off(OUT_ABC);Wait(30); //動作の安定のために一時停止するマクロ
 
 #define WHITE 47 //白の光センサーの下限値
 
 #define BLACK 40 //黒の光センサーの上限値
 
 #define FIRST_COUNT 21 //スタートの黒枠を出てから45度回転するまでの回転センサーの値
 
 #define B_COUNT 17 //バッターボックスに入ったあとに進む距離の回転センサーの値
 
 #define TURN_COUNT 10 //90度回転するときの回転センサーの値
 
 #define TURN_L45 ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3 == -6);Off(OUT_AC); //左に45度回転するときのマクロ
 
 #define TURN_R45 ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3 == 6);Off(OUT_AC); //右に45度回転するときのマクロ
 
 #define TURN_L ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3 == -TURN_COUNT);Off(OUT_AC); //左に45度回転するときのマクロ
 
 #define TURN_R ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3 == TURN_COUNT);Off(OUT_AC); //右に45度回転するときのマクロ
 
 #define FORWARD_W_B OnFwd(OUT_AC);until(SENSOR_2 < BLACK);Off(OUT_AC); //白いところから黒いところに入るまで直進するマクロ
 
 #define FORWARD_B_W OnFwd(OUT_AC);until(SENSOR_2 > WHITE);Off(OUT_AC); //黒いところから白いところに入るまで直進するマクロ
 
 #define FORWARD1(X) ClearSensor(SENSOR_3);OnFwd(OUT_AC);until(SENSOR_3 == X);Off(OUT_AC); //回転センサーがxの値になるまで直進するマクロ
 
 #define getset 100 //投げる合図(こっちが受け取る)
 
 #define confirm 200 //投げる合図の確認(こっちが送る)
 
 #define hit OnRev(OUT_B);Wait(15);Off(OUT_B); //バットで打つ
 
 #define set OnFwd(OUT_B);Wait(15);Off(OUT_B); //バットを構える(振ったアームを戻す)
 
 //通信確認用の変数↓
 #define test 101
 
 #define confirm2 201
 
 #define t1 220
 
 #define turnl(a) ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3<=-a);Off(OUT_AC);ClearSensor(SENSOR_3); //左旋回
 
 #define turnr(b) ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3>=b);Off(OUT_AC);ClearSensor(SENSOR_3); //右旋回
 
 #define go(c) ClearSensor(SENSOR_3);OnFwd(OUT_AC);until(SENSOR_3>=c);Off(OUT_AC);ClearSensor(SENSOR_3); //前進
 
 #define back(d) ClearSensor(SENSOR_3);OnRev(OUT_AC);until(SENSOR_3<=-d);Off(OUT_AC);ClearSensor(SENSOR_3); //後退
 //↑回転センサーで進む距離や曲がる角度を決めている
 
 sub P1()
 {
   TURN_R45;
   BLANK;
   FORWARD_W_B;
   FORWARD1(FIRST_COUNT);
   BLANK;
   TURN_L45;
   BLANK;
 }
 
 sub P2()
 {
   repeat(3)
   {
     FORWARD_W_B;
     FORWARD_B_W;
   }
 }
 
 sub P3()
 {
   OnFwd(OUT_AC);
   Wait(30);
   BLANK;
   TURN_L;
   BLANK;
   FORWARD_W_B; //バッターボックスに入るまでは光センサーを使用
   FORWARD1(B_COUNT);
   BLANK;
   turnr(5);
 }
 
 task main()
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_ROTATION);
   ClearSensor(SENSOR_3);
   ClearSensor(SENSOR_2);
   ClearMessage();
   P1(); //スタートしてからピッチャーマウンドの前まで行くサブルーチン
   P2(); //3本の黒線を横断するサブルーチン
   P3(); //バッターボックスに入り、ピッチャーの方向に向くまでのサブルーチン
 
  // 以降はバット振る
 //バッティングの前に通信確認テスト。通信が安定する距離まで前進。
   while(Message()!=confirm2)
   {
     Wait(80);
     back(1);
   }
   PlaySound(SOUND_UP);
   back(4);
   repeat(10)
   {
     SendMessage(test);
   }
 
   //バッティング開始
   
   int c=0;
   repeat(5)
   {
     ClearMessage();
     until(Message()==getset);
     repeat(10)
     {
       SendMessage(confirm);
     }//投げる合図を受け取ったら確認のメッセージを送る
 
     Wait(t1);
     PlaySound(SOUND_DOUBLE_BEEP);
     
     set;
     BLANK;
     hit;
   }
 }

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