[[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; } }