2016b/Member 目次
前回のライントレースの延長で、さらに今回は二つのロボットを通信させることが目的だ。
バッターとピッチャーのロボットをそれぞれ通信させ、放たれた玉を打ち的に当てる。
5球打ち合計の得点を競う。
今回自分は投球ロボットを担当した。
投げる機構は、玉を高いところから転がし放つようにした。
しかし、高さが足りなかったので球速が落ちてしまい、玉がまっすぐ進まず打つことが困難になってしまった。
投球場所までの移動はライントレースを用いた。
#define TURNR(A) RotateMotorEx(OUT_BC,40,A,100,true,true);Wait(1000);//右に曲がる #define TURNL(L) RotateMotorEx(OUT_BC,40,L,-100,true,true);Wait(1000);//左に曲がる #define TYOKUSIN OnFwdSync(OUT_BC,40,0); //直進する #define CM(K) RotateMotorEx(OUT_BC,40,20.47315*K,0,true,true);Wait(1000);//K(cm)直進 #define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);RotateMotor(OUT_A,-90,-90);//ボールを発射、装填
sub BASYO() { SetSensorLight(S1); TYOKUSIN; until(SENSOR_1<35); Off(OUT_BC); Wait(500); CM(5); Wait(500); }
まずゴールにぶつからないように向きを変え直進、そこで向きを変え、ラインを3回超えるまで進む、位置調整のあと方向転換してバッターの方を向き通信を開始する。
task main() { int SIREI; TURNR(110); CM(36); TURNR(150); repeat(3){ //ライン3回越える BASYO(); } CM(-13);//位置調整 TURNR(130); until(BluetoothStatus(1)==NO_ERR); RemotePlayTone(1,440,1000); Wait(1000); RemoteStartProgram(1,"DAGEKI.rxe"); while(SIREI<12){ ReceiveRemoteNumber(MAILBOX1,true,SIREI); if(SIREI==11){ PlaySound(SOUND_CLICK); Wait(200); HASSYA; SIREI=0; } } }
#define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);RotateMotor(OUT_A,-90,-90);//ボールを発射、装填(ピッチャー) #define CATCH Wait(500);RotateMotor(OUT_A,70,45);Wait(1000);ボールのキャッチ(バッター) #define UTU RotateMotor(OUT_A,-90,45);Wait(1000);ボールの発射(バッター) #define TURN(s,t) RotateMotorEx(OUT_BC,40,s,t,true,true);Wait(1000);向き調整(バッター) until(BluetoothStatus(1)==NO_ERR);//子機と通信ができるまで待機 RemotePlayTone(1,440,1000);//子機の音を出させる Wait(1000); RemoteStartProgram(1,"DAGEKI.rxe");//子機のプログラムを開始させる int x=1;//回数を計るために定義 task main() { UTU;//アームを上げる while(x<6){ BATTING();//バッティングのサブルーチン } SendRemoteNumber(0,MAILBOX1,12);//親機のプログラムを終了させる }
子機から親機へ指令 while(SIREI<12){ ReceiveRemoteNumber(MAILBOX1,true,SIREI); if(SIREI==11){ PlaySound(SOUND_CLICK); Wait(200); HASSYA; SIREI=0; } else if(x==2){ TURN(95,-100); UTU; TURN(95,100); x = x+1; } else if(x==3){ TURN(40,100); UTU; TURN(40,-100); x = x+1; } else if(x==4){ TURN(45,-100); UTU; TURN(45,100); x = x+1; } else { TURN(45,-100); UTU; TURN(45,100); x = x+1; } }
位置通りに動いたが、プログラムをもう少し簡略したかった。 今回機体の作成に時間がかかり、相方とプログラムの確認があまりできなかった。