* [#r33b7dc4] * [#s6f5338c] * [#s38745de] *プログラミングの説明 [#h1f17bf8] **定義の解説 [#j0e0c35c] #define KURO 44//ライトセンサーの値が44 #define SHIRO 50//ライトセンサーの値が50 #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//まっすぐ進む #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);//まっすぐ下がる #define senkai_left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC);//左旋回 #define senkai_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);//右旋回 #define turn_left(t) OnFwd(OUT_C);Off(OUT_A);Wait(t);Off(OUT_AC);//左へ曲がる #define turn_right(t) OnFwd(OUT_A);Off(OUT_C);Wait(t);Off(OUT_AC);//右へ曲がる #define SIGNALPITCHER 111//111のメッセージ #define SIGNALBATTER 222//222のメッセージ **サブルーチンの解説 [#x54d7e17] ライントレースを行うためのプログラム(T字路を感知すると停止する) sub line() { int n=0; while(n==0){ if((SENSOR_1>SHIRO)&&(SENSOR_3>SHIRO)){//センサー1と3の値が両方とも50より大きい OnFwd(OUT_AC);//直進 }if((SENSOR_1>SHIRO)&&(SENSOR_3<KURO)){//センサー1の値が50より大きくて、センサー3の値が44より小さい OnFwd(OUT_A);//左に旋回 OnRev(OUT_C);//左に旋回 }if((SENSOR_1<KURO)&&(SENSOR_3>SHIRO)){//センサー1の値が44より小さくて、センサー3の値が50より大きい OnFwd(OUT_C);//右に旋回 OnRev(OUT_A);//右に旋回 }if((SENSOR_1<KURO)&&(SENSOR_3<KURO)){//センサー1と3の値が両方共44よりも小さい Off(OUT_AC);//停止 Wait(50);//待機 n++;//関数に足す1 } } } ライトセンサーを使って機体を黒線に対して垂直にするプログラム sub suichoku() { int m=0; while(m==0){ OnFwd(OUT_AC);//直進 if((SENSOR_1<47)&&(SENSOR_3<42)){//センサー1の値が47より小さくて、せんさー3の値が42より小さい Off(OUT_AC);//停止 Wait(50);//待機 m++;//関数に足す1 } if(SENSOR_1<45){//センサー1の値が45よりも小さい Off(OUT_AC);//停止 Wait(30);//待機 turn_left(8);//左へ曲がる back(10);//後退 Wait(50);//待機 } if(SENSOR_3<40){//センサー3の値が40よりも小さい Off(OUT_AC);//停止 Wait(30);//待機 turn_right(10);//右へ曲がる back(10);//後退 Wait(50);//待機 } } } 右側にある6点のゴールを狙うプログラム sub shoot6r() { senkai_right(018);//右に旋回 go_forward(020);//直進 OnRev(OUT_B);//ボールを打ち出す Wait(15);//待機 Off(OUT_B);//停止 OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す Wait(15);//待機 Off(OUT_B);//停止 back(025);//後退 senkai_left(023);//左に旋回 Wait(50);//待機 } 左側にある6点のゴールを狙うプログラム sub shoot6l() { senkai_left(018);//左に旋回 go_forward(030);//直進 OnRev(OUT_B);//ボールを打ち出す Wait(15);//待機 Off(OUT_B);//停止 OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す Wait(15);//待機 Off(OUT_B);//停止 back(045);//後退 senkai_right(026);//右に旋回 Wait(50);//待機 } 右側にある4点のゴールを狙うプログラム sub shoot4r() { senkai_right(035);//右に旋回 go_forward(020);//直進 OnRev(OUT_B);//ボールを打ち出す Wait(15);//待機 Off(OUT_B);//停止 OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す Wait(15);//待機 Off(OUT_B);//停止 back(025);//後退 senkai_left(035);//左に旋回 Wait(50);//待機 } 10点のゴールを狙うプログラム sub shoot10() { senkai_left(006);//左に旋回 go_forward(050);//直進 OnRev(OUT_B);//ボールを打ち出す Wait(15);//待機 Off(OUT_B);//停止 OnFwd(OUT_B);//ボールを打ち出す部分を元に戻す Wait(15);//待機 Off(OUT_B);//停止 back(055);//後退 senkai_right(008);//右に旋回 Wait(50);//待機 } **タスクメインの解説 [#r5fb7345] task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); senkai_left(35);//左に旋回 Wait(30);//待機 go_forward(200);//直進 Wait(30);//待機 senkai_left(34);//左に旋回 Wait(30);//待機 go_forward(210);//直進 Wait(30);//待機 line();//ライントレイス go_forward(50);//直進 senkai_left(85);//左に旋回 back(80);//後退 suichoku();//機体を黒線に対して垂直にする go_forward(99);//直進 senkai_left(105);//左に旋回 go_forward(125);//直進 ClearMessage(); //メッセージを0にする Off(OUT_AC);//停止 until(Message() == SIGNALPITCHER);//メッセージが111になるまで SendMessage(SIGNALBATTER);//222を送る PlaySound(SOUND_CLICK);//音を鳴らす back(165);//後退 Wait(200);//待機 shoot4r();//右の4を狙う Wait(100);//待機 shoot6l();//左の6を狙う Wait(185);//待機 shoot6r();//右の6を狙う Wait(130);//待機 shoot6l();//左の6を狙う Wait(160);//待機 shoot10();//10を狙う } * [#vc55c6f9] * [#bfc72408] [[2016b/Member]]