[[2012a/Member]] 目次 #contents *課題2 ライトレースロボット[#rc2a2179] **ページ作成者 [#ec9ba8bd] Hato *ロボット本体 [#waa0b872] 今回はただ走るだけのロボットなので、あまり工夫はしなかった。~ 強いて言うなら、タイヤ間を狭くして小回りができるようにした。 *プログラム [#m4fd895e] 今回のポイントは 1 出口~ 2 直角カーブ~ である~ #define THRESHOLD 45 //閾値~ #define go_st OnFwd(OUT_AC);~ #define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~ #define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~ #define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);~ #define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~ #define go_le3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~ #define go_ri3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~ #define t_overa 1400~ #define t_overb 3000~ #define t_overc 4000~ #define t_overd 5000~ #define t_overe 5500~ #define t_overf 7000~ #define t_overg 7890~ task main() { ClearTimer(0); //タイマーリセット SetPower(OUT_A,0); SetPower(OUT_C,0); SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); int cross = 0; //両方黒になった回数をカウント while(true){ //百回きたら止める。 if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){ //両方黒線の上にいるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_st; cross++; //カウントする }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //直角を曲がるさい1だけ黒線の上にあるとき go_ri3; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //直角を曲がるさい3だけ黒線の上にある時 SetPower(OUT_A,0); SetPower(OUT_C,0); go_le3; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_ri2; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //3だけ黒線の上にある時 SetPower(OUT_A,0); SetPower(OUT_C,0); go_le2; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //1だけ黒線の上にあるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_ri2; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //3だけ黒線の上にある時 SetPower(OUT_A,0); SetPower(OUT_C,0); go_le2; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overf){ //3だけ黒線の上にあるとき PlaySound(SOUND_CLICK); go_st; Wait(5); SetPower(OUT_A,0); SetPower(OUT_C,4); go_ri1; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){ //1だけ黒線の上にある時 PlaySound(SOUND_CLICK); go_st Wait(5); SetPower(OUT_A,4); SetPower(OUT_C,0); go_le1; }else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){ //両方黒の外にあるとき SetPower(OUT_A,0); SetPower(OUT_C,0); go_st; } } }