目次
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1. 空き缶をコース上に戻して再びコースに戻って進む
2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む
ただし、
速さと正確さを追求すること
コースを1周したら自動的に止まること
交差点では一時停止すること
みさいづ、しんたに
#define black 35//黒い線の値 #define arm_time 40//腕を上げ下げさせる時間 int turn_time;//旋回する時間 #define arm_down OnFwd(OUT_B);Wait(arm_time);Off(OUT_B);//腕を下げる(缶を離す) #define arm_up OnRev(OUT_B);Wait(arm_time);Off(OUT_B);//腕を上げる(缶を掴む) #define turn OnFwd(OUT_C);OnRev(OUT_A);Wait(turn_time);Off(OUT_C+OUT_A);//旋回する #define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右回転 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);//左回転 #define GOAL 6//交差点を6回越えたら終了 int cross;//変数(交差点を通った回数) task main () { cross=0;//変数crossの初期値 turn_time=165;//変数turn_timeの初期値 SetSensor(SENSOR_1, SENSOR_LIGHT);//センサー1を光センサーとする SetSensor(SENSOR_2, SENSOR_TOUCH);//センサー2をタッチセンサーとする SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー3を光センサーとする while (cross<GOAL) { if ((SENSOR_3 < black)&&(SENSOR_1 < black))//センサー1&3が黒い線に反応したとき { PlaySound(SOUND_DOWN);//音を鳴らす Off(OUT_C+OUT_A); Wait(50); OnFwd(OUT_C+OUT_A);//前進 Wait(50); cross++;//変数crossを1増やす } else if (SENSOR_3 < black)//センサー3が黒い線に反応したとき { turn_right; } else if (SENSOR_1 < black) //センサー1が黒い線に反応したとき { turn_left; } else if (SENSOR_2==1) //タッチセンサーが反応したとき { PlaySound(SOUND_UP) ; //音を鳴らす Off(OUT_C+OUT_A); Wait(50); arm_down;//缶の移動開始 turn; OnFwd(OUT_C+OUT_A);//前進 Wait(80); Off(OUT_C+OUT_A); Wait(50); arm_up;//缶の移動終了 OnRev(OUT_C+OUT_A); Wait(100); Off(OUT_C+OUT_A); turn; OnRev(OUT_C+OUT_A); Wait(50); turn_time=turn_time+15;//二回目に缶をどかすとき、旋回の時間を1.9秒にする } else //どのセンサーも反応無しの時 { OnFwd(OUT_C+OUT_A);//前進 } } Off(OUT_C+OUT_A);//終了 }
int kg; int stop_time; #define kan_catch OnFwd(OUT_B);Wait(40);Off(OUT_B);//缶掴む #define kan_put OnRev(OUT_B);Wait(40);Off(OUT_B);//缶離す task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); kg=0;//kgに0を代入 stop_time=0;//stop_timeに0を代入 while (stop_time<8) { if (SENSOR_1 < 35)//光センサー1が黒を認識 { OnRev(OUT_A);//白の部分まで戻る OnFwd(OUT_C); }else if (SENSOR_3 < 35)//光センサー3が黒を認識 { OnRev(OUT_C);//白の部分まで戻る OnFwd(OUT_A); }else{ OnFwd(OUT_A+OUT_C);//光センサーがどちらとも白を認識しているとき前進 } if (SENSOR_1 < 35 && SENSOR_3 < 35)//光センサーがどちらとも黒を認識したら交差点と認識 { stop_time=stop_time+1;//変数stop_timeに+1する PlaySound(SOUND_CLICK) ; // stop+1の確認 Off(OUT_A+OUT_C);//一時停止 Wait(50); if (kg==1){ OnFwd(OUT_A+OUT_C);//少し前へ Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_C);//回転する OnRev(OUT_A); Wait(170); Off(OUT_A+OUT_C); kan_put;//缶を置く OnRev(OUT_A+OUT_C);//缶に当たらないように後ろに移動 Wait(50); Off(OUT_A+OUT_C); OnFwd(OUT_A);//回転する OnRev(OUT_C); Wait(170); Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C);//元の位置へ Wait(50); Off(OUT_A+OUT_C); kg=0;//kgに0代入 }else if (kg==0){ OnFwd(OUT_A+OUT_C); Wait(50);//交差点をとおり過ぎるまで前進 } } if (SENSOR_2==1)//タッチセンサーが反応 { if (kg==0){ kg=1;//kgに1代入 kan_catch;//缶を掴む } } if (stop_time==7)//stop_timeが7になった時 { Float(OUT_A+OUT_C);//停止 stop_time=stop_time+3;//whileを抜ける } } }