[[2010a]] *目次 [#f8b8a456] #contents *課題2 [#da324a89] 課題2:黒い線に沿って動くロボット † 各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する) 1. 空き缶をコース上に戻して再びコースに戻って進む 2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む 3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む ただし、 * 速さと正確さを追求すること * コースを1周したら自動的に止まること * 交差点では一時停止すること *メンバー紹介 [#v48511d0] しょうご、カズ、マコト *コース紹介 [#nef8554c] A2左のコースと同じ *ロボット紹介 [#a690a204] *それぞれのプログラムの紹介 [#k258a730] **しょうごのプログラム [#o8eca2c2] **カズのプログラム [#bb6424f1] **マコトのプログラム [#y99d2434] #define go_front OnFwd(OUT_A+OUT_C); //前進 #define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); //左折 #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);//右折 #define stay Off(OUT_A+OUT_C);//止まる #define THRESHOLD 40//閾値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサー SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサー while(true) {start follow_line;//ライントレースを開始 int n=0;//nの値を定義 while(n=1){//奇数回目には if(SENSOR_2==1)//缶に触れたら反転 turn_left(200); n++; } while(n=2){//偶数回目には if(SENSOR_2==1)//そのまま直進 go_front; n--;} task follow_line{ int k=0;//kの値を定義 while(k<10){10回繰り返したら止まる go_front; until((SENSOR_1<THRESHOLD)||(SENSOR_3<THRESHOLD))センサーのどちらかが線に乗るまで直進 stay; if(SENSOR_1<THRESHOLD){//左のセンサーが線に乗った場合 OnFwd(OUT_C);OnRev(OUT_A);//左折 until(SENSOR_1>THRESHOLD) stay; } if(SENSOR_3<THRESHOLD){//右のセンサーが線に乗った場合 OnFwd(OUT_A);OnRev(OUT_C);//右折 until(SENSOR_3>THRESHOLD) stay; if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){//両方のった場合 Wait(100);//一旦停止して進む k++; go_front; until((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) stay; } } stay; } *全体の反省点 [#a3ea6c86] ・偶数回目、奇数回目というのがどうやればいいのか分からずに苦戦した。 マコト *コメント [#lf62dd8b] #comment