目次 #contents *課題2:黒い線上を動くロボット [#s2a9e895] 次のような周回コース(黒い線)を動くロボットを作成せよ。 -通常の交差点が2箇所以上ある -ロータリー型の交差点が1箇所以上ある (ロータリーでは反時計まわりに進む) -直角に曲がるコーナーおよびそのコーナーをショートカットするコース(点線)が存在する -急なヘアピンカーブが1箇所以上ある -スタート地点に目印がある -黒い線の幅は15〜20mm程度 センサー、モーターはいくつ使ってもよい。プログラムは次の2つを作成すること。 1. 直角のコーナーを通る 2. 直角のコーナーを通らない(近道する) ただし互いに逆方向に周回すること。 *メンバー紹介 [#qf933802] -イシイ(近道担当) -ゆきち(直角コーナー担当) *課題 [#q735ffe3] **コースについて [#e3f78d38] **ロボットについて [#ic2a75be] **問題点について [#t0bab1b1] *プログラム [#o770212f] **イシイ [#d645274a] **ゆきち [#i0f9386d] #define GO(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前にt秒進む #define THRESHOLD 45 //閾値 sub RIGHT_CURVE() { if (SENSOR_3>THRESHOLD) { OnFwd(OUT_A+OUT_C); } if (SENSOR_3<THRESHOLD) { Off(OUT_C); OnFwd(OUT_A); } } sub LEFT_CURVE() { if (SENSOR_1>THRESHOLD) { OnFwd(OUT_A+OUT_C); } if (SENSOR_1<THRESHOLD) { Off(OUT_A); OnFwd(OUT_C); } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<=330) { RIGHT_CURVE(); } while(FastTimer(0)<=850) { if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) { OnFwd(OUT_A+OUT_C); } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD)) { OnRev(OUT_A); OnFwd(OUT_C); } } while(FastTimer(0)<=1100) { LEFT_CURVE(); } while(SENSOR_3>THRESHOLD) { LEFT_CURVE(); } Off(OUT_A+OUT_C);Wait(50);GO(35); OnFwd(OUT_A);OnRev(OUT_C);Wait(20); while(SENSOR_1>THRESHOLD) { OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); while(SENSOR_3>THRESHOLD) { LEFT_CURVE(); } Off(OUT_A);OnFwd(OUT_C);Wait(15); while(SENSOR_3>THRESHOLD) { LEFT_CURVE(); } Off(OUT_A+OUT_C);Wait(50);GO(35); OnFwd(OUT_A);OnRev(OUT_C);Wait(20); while(SENSOR_1>THRESHOLD) { OnFwd(OUT_A);OnRev(OUT_C); } ClearTimer(0); while(FastTimer(0)<300) { LEFT_CURVE(); } GO(50); while(FastTimer(0)<700||SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD) { if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) { OnFwd(OUT_A+OUT_C); } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD)) { OnRev(OUT_A); OnFwd(OUT_C); } } Off(OUT_A+OUT_C);Wait(50);GO(35); OnFwd(OUT_A);OnRev(OUT_C);Wait(20); while(SENSOR_1>THRESHOLD) { OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); while(SENSOR_3>THRESHOLD) { LEFT_CURVE(); } Off(OUT_A);OnFwd(OUT_C);Wait(15); while(SENSOR_3>THRESHOLD) { LEFT_CURVE(); } Off(OUT_A+OUT_C);Wait(50);GO(35); OnFwd(OUT_A);OnRev(OUT_C);Wait(20); while(SENSOR_1>THRESHOLD) { OnFwd(OUT_A);OnRev(OUT_C); } OnFwd(OUT_A+OUT_C); ClearTimer(0); while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD) { LEFT_CURVE(); } GO(15); while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD) { LEFT_CURVE(); } GO(10); while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD) { if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) Off(OUT_A);OnFwd(OUT_C); { OnFwd(OUT_A+OUT_C); } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD)) { OnRev(OUT_A);OnFwd(OUT_C); } if ((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD)) { OnRev(OUT_C);OnFwd(OUT_A); } } Off(OUT_A+OUT_C); } *感想 [#m39f9cd2] -イシイ~ -ゆきち~ *コメントをどうぞ [#d155cfe7] #comment