[[2016a/Member]] *ロボット紹介* [#qf1f6892] #ref(1467905824003.jpg) 本体の前方に光センサーを取り付けた。 *プログラムの説明* [#g3491b90] 定義 #define BLACK 34 #define WHITE 70 #define LEFT OnFwd(OUT_B,40);OnRev(OUT_C,20); //左に回転 #define RIGHT OnFwd(OUT_C,40);OnRev(OUT_B,20); //右に回転 #define nMAX 200 // #define short_break Off(OUT_BC);PlaySound(SOUND_CLICK);Wait(1000); //1秒間止まるまた、音を鳴らす #define STEP 1 // #define GO OnFwd(OUT_BC,40);Wait(350); //前進する #define GO2 OnFwd(OUT_BC,40);Wait(150); //前進する #define FWD2 OnFwd(OUT_BC,40);Wait(500); //前進する #define LEFT2 OnFwd(OUT_B,40);OnRev(OUT_C,20);Wait(500); //左に回転 #define LEFT3 OnFwd(OUT_B,40);OnRev(OUT_C,20);Wait(300); //左に回転 #define LEFT4 OnFwd(OUT_B,40);OnRev(OUT_C,20);Wait(170); //左に回転 #define RIGHT2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(480); //右に回転 #define TURN OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(650);Off(OUT_BC); //右に回転 #define TURN2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(200);Off(OUT_BC); //右に回転 サブルーチン(交差点を判断するプログラム、Cコース) sub normal () { SetSensorLight(S2); //光センサーを2に int nOnline=0; int k=0; while(k==0){ while(nOnline < nMAX){ if (SENSOR_2<BLACK) { //もしセンサーが定義した(BLACK 34)値よりも小さければ次の行動 RIGHT; //右に回転 nOnline++; //カウントを増やす } else if (SENSOR_2<WHITE) { //もしセンサーが定義した(WHITE 70)値よりも大きければ次の行動 LEFT; //左に回転 nOnline=0; //カウントをリセット } Wait(STEP); } short_break; //止まるまた、音を鳴らす k++; //カウントを増やす nOnline=0; //カウントをリセット } } プログラム task main () { normal (); //交差点を判断する LEFT2; //左へ回転 normal (); //交差点を判断する LEFT2; //左へ回転 normal (); //交差点を判断する GO; //直進 LEFT3; //左へ回転 normal (); //交差点を判断する GO2; //直進 LEFT4; //左へ回転 normal (); //交差点を判断する TURN; //左へ回転 TURN2; //TURNよりも小さく左へ回転 GO; //直進 normal (); //交差点を判断する RIGHT2; //右へ回転 normal (); //交差点を判断する LEFT2; //左へ回転 normal (); //交差点を判断する FWD2; //ゴールへ直進 Off(OUT_BC);//止まる } *交差点の判断方法 [#p07cf209] nOnlineは黒と判断する関数またkはnOnlineがnMAXの値を超えたときに増加する関数。 これらを用いて黒いラインをカウントしてnOnlineが200回連続でカウントした場合、kの値が増加して交差点と判断して次の行動に移る。 *反省点* [#q61fc98e] 交差点を認識してから次のラインに行くのに微調整が必要だったのが難しかった。