[[2008b/MemberOnly/進行状況A]] *課題2:黒い線に沿って動くロボット [#haf54440] **課題内容:各チームでコースに沿って動くロボットを以下の条件で作成せよ。 [#t47e2042] ・速さと正確さを追求すること。&br; ・交差点で優先側を走っていない場合には一時停止すること。&br; ・前方にいるもう1台のロボットと接触した場合には停止して相手のロボットが通過する、あるいは距離が離れるのを待つ。&br; ・コースを2周したら自動的に停止する。&br; ***とりあえずプログラム [#ded5e435] void turn_right(int t ) { OnFwd(OUT_A); OnRev(OUT_C); Off(OUT_A+OUT_C); } void turn_left(int t ) { OnFwd(OUT_C); OnRev(OUT_A); Off(OUT_A+OUT_C); } void go_straight(int t ) { OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } void go_back(int t ) { OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } #define THRESHOLD 40 #define RUN_TIME 11000 //110s task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearTimer(0); while(1) { while(FastTimer(0)<=RUN_TIME) { if(SENSOR_2==1) {Off(OUT_A+OUT_C); go_back(200); Wait(50); go_straight(200); } else { if(SENSOR_1<THRESHOLD) { OnFwd(OUT_C); OnRev(OUT_A); Wait(15); } else {OnFwd(OUT_A+OUT_C);} if(SENSOR_3<THRESHOLD) { OnFwd(OUT_A); OnRev(OUT_C); Wait(15); } else {OnFwd(OUT_A+OUT_C);} if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) { Off(OUT_A+OUT_C); Wait(200); OnFwd(OUT_A+OUT_C); Wait(80); } else {OnFwd(OUT_A+OUT_C);} } } Off(OUT_A+OUT_C); } }