・四つの出口を作る。
・交差点を二つ作る。
・直角カーブを作る。
・ヘアピンカーブを作る。
この中で特に苦しんだのは直角カーブと交差点でしょうか。
出口のうちの一つから入り一周半して反対側の出口から出る。
では、それぞれの紹介を始めて行きたいと思います。
書くときに特に予定も立てず、勢いでやってしまったのがこの課題での最大のミスでしょうか。
このコースでの問題点をあげるなら、
・直角カーブが100度くらいある。
・交差点が直行していない。
・ヘアピンカーブが反り返りすぎている。
・入り口がT字ではなく横向きのY字などの歪な形
などなど高難易度のコースとなっています。
ロボットは何段階かに分けて進化していっています。
まずはver.1から
横からの写真 剥き出しのギアは全バージョンに共通する特徴です。
裏返した状態 中心の青いものがセンサーで、ロボットの中心についています
ver.1は試作品となっておりとりあえずどのように作るか、
を考えるために組んでおり、すこし脆くなっていたり、センサーが一つしかなかったりします。
#define THRESHOLD 45 //閾値 #define go_st OnFwd(OUT_A+OUT_C); #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,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); #define go_ri3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C); #define t_overa 1170 #define t_overb 1380 #define t_overc 1700 #define t_overd 2750 #define t_overe 3500 #define t_overf 3800 #define t_overg 4700 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だけ黒線の上にあるとき PlaySound(SOUND_UP) ; go_ri3; }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //3だけ黒線の上にある時 PlaySound(SOUND_UP) ; 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; PlaySound(SOUND_UP) ; }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき PlaySound(SOUND_UP) ; 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だけ黒線の上にある時 PlaySound(SOUND_UP) ; 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だけ黒線の上にあるとき PlaySound(SOUND_UP) ; 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だけ黒線の上にある時 PlaySound(SOUND_UP) ; 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; } } }