[[2010a]] #contents *課題 [#z2fc69ef] 各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する) 1.空き缶をコース上に戻して再びコースに戻って進む 2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む 3.奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む ただし、 •速さと正確さを追求すること •コースを1周したら自動的に止まること •交差点では一時停止すること **目標 [#r204181d] **ロボットの外観 [#pf434381] **YUのプログラム [#gd295df8] **UMEのプログラム [#ka967300] int a; #define BORDER 40 int flag = 0; task main () { a=0; SetSensor ( SENSOR_1, SENSOR_LIGHT ); SetSensor ( SENSOR_2, SENSOR_TOUCH ); SetSensor ( SENSOR_3, SENSOR_LIGHT ); //1と3→光センサ、2→タッチセンサ Wait ( 100 ); //起動してから1秒待機 while ( flag < 3){ if ( SENSOR_2 == 1 ){ if (a == 0){ //タッチセンサが反応したら OnFwd(OUT_A+OUT_C); Wait(50); //いったん緊急回避して Off(OUT_A+OUT_C); Wait(300); //3秒待機して OnRev(OUT_A+OUT_C); Wait(30); //もとの場所に戻る ClearTimer(0); until ((SENSOR_2==1) || (Timer(0)>2 ))OnRev(OUT_A+OUT_C);} if(SENSOR_2==1){a=1; //タッチセンサが再び反応したら OnRev(OUT_B); Wait(50); //ハサミ起動 } else if(SENSOR_2==0){ if(SENSOR_1 > BORDER ){ if( SENSOR_3 > BORDER ){ OnRev(OUT_A+OUT_C); } else{ OnRev(OUT_A); Wait(5); OnFwd(OUT_C); Wait(5); } } else{ if(SENSOR_3 > BORDER){ OnFwd(OUT_A); Wait(5); OnRev(OUT_C); Wait(5); } else{ Off(OUT_A+OUT_C); Wait(150); OnFwd(OUT_B); Wait(50); Off(OUT_B); OnFwd(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); OnRev(OUT_A); Wait(50); Off(OUT_A); OnRev(OUT_C); Wait(150); Off(OUT_C); OnRev(OUT_A); Wait(50); Off(OUT_A);a=0; } } } } else{ if ( SENSOR_1 > BORDER ){ //右センサが白で if ( SENSOR_3> BORDER ){ //左センサも白なら(L1 R1) OnRev(OUT_A+OUT_C); //直進する } else { //左センサが黒なら(L0 R1) OnRev(OUT_A); Wait(5); OnFwd(OUT_C); Wait(5); //左に曲がる } } else { //右センサが黒でで if ( SENSOR_3> BORDER ){ //左センサが白なら(L1 R0) OnFwd (OUT_A); Wait(5); OnRev(OUT_C); Wait(5); //右に曲がる } else { //両センサが黒なら(L1 R1) Off(OUT_A+OUT_C);//交差点と思われるので止まって Wait(50); //0.5秒待機して OnRev(OUT_A+OUT_C); //直進し始めて Wait(20); //0.2秒直進して flag++; //交差点カウンタに1足す } } } } Off(OUT_A+OUT_C);} **問題点、工夫した所 [#o890a03f] ***感想 [#ee38cb6d] ***コメントをどうぞ [#o5783f2f]