目次 #contents * メンバー [#ibb85475] suiden : 主に機体を担当~ kiyomizu : 主にアームを担当~ kowhich: 主にプログラムを担当~ ryu-abe: 主に数値計測を担当~ * 課題の内容 [#w222b816] * ロボットの紹介 [#qd0e48a4] ** ロボットの外観 [#e9cd888b] &ref(robo1.jpg); ** 光センサー ・ アーム ・ バンパー [#l1d78243] &ref(robo5.jpg); ** 紙コップの取り方 ・ 重ね方[#t5345db0] &ref(robo2.jpg); &ref(robo3.jpg); &ref(robo4.jpg); * プログラムの内容 [#t4cb2c52] プログラムの内容を上図で示されたPartごとに分けて説明する。 ** 定義 [#g2e707e7] #define THRESHOLD 50 #define turn_left0 OnFwd(OUT_B,30); #define turn_left1 OnFwd(OUT_B,30);OnFwd(OUT_C,-30); #define turn_right0 OnFwd(OUT_C,30); #define turn_right1 OnFwd(OUT_C,30);OnFwd(OUT_B,-30); #define STEP 1 #define nMAX 250 #define short_break Off(OUT_BC);Wait(1000); #define cross_line;OnFwd(OUT_BC,40);Wait(300);short_break;PlaySound(SOUND_UP); ** サブルーチン [#r87f74a8] sub catch() { OnFwd(OUT_A,-20);Wait(1000); OnFwd(OUT_A,-50);Wait(400); Off(OUT_A); } sub release() { OnFwd(OUT_A,20);Wait(1000); OnFwd(OUT_A,50);Wait(100); Off(OUT_A); } ** Part1 [#o91ad579] task main() { SetSensorLight(S2); SetSensorLight(S3); int nOnline = 0; int nPoint = 0; OnFwdSync(OUT_BC,60,0);Wait(2000);Off(OUT_BC); OnFwdSync(OUT_BC,75,-100);Wait(450);Off(OUT_BC);Wait(1000); OnFwdSync(OUT_BC,60,0);Wait(1200);Off(OUT_BC); catch(); OnFwdSync(OUT_BC,60,0);Wait(700); OnFwdSync(OUT_BC,60,-100);Wait(500);Off(OUT_BC);Wait(1000); ** Part2 [#b4ae5e03] long t0 = CurrentTick(); while (CurrentTick() - t0 < 3000) { if (SENSOR_3 > THRESHOLD +2) { OnFwd(OUT_B,40); } else { Off(OUT_BC); } Wait(STEP); } while (nPoint <= 1) { while (nOnline < nMAX){ if (SENSOR_3 < THRESHOLD -10) { turn_right1; nOnline++; } else { if (SENSOR_3 < THRESHOLD -5) { turn_right0; } else if (SENSOR_3 < THRESHOLD +2) { OnFwdSync(OUT_BC,30,0); } else if (SENSOR_3 < THRESHOLD +8) { turn_left0; } else { turn_left1; } nOnline=0; } Wait(STEP); } short_break; turn_left1; Wait(nMAX*STEP); cross_line; nPoint++; nOnline=0; } while (nPoint == 2) { OnFwdSync(OUT_BC,30,0);Wait(1500);Off(OUT_BC);Wait(1000);Wait(1000); OnFwdSync(OUT_BC,-30,0);Wait(500);Off(OUT_BC); release(); OnFwd(OUT_C,-30);Wait(200); OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC); catch(); OnFwdSync(OUT_BC,75,-100);Wait(900);Off(OUT_BC); nPoint++; } long t1 = CurrentTick(); while (CurrentTick() - t1 < 3000) { if (SENSOR_3 > THRESHOLD +2) { OnFwd(OUT_C,40); } else { Off(OUT_BC); } Wait(STEP); } while (nPoint <= 6) { while (nOnline < nMAX + 50){ if (SENSOR_3 < THRESHOLD -10) { turn_left1; nOnline++; } else { if (SENSOR_3 < THRESHOLD -5) { turn_left0; } else if (SENSOR_3 < THRESHOLD +2) { OnFwdSync(OUT_BC,30,0); } else if (SENSOR_3 < THRESHOLD +8) { turn_right0; } else { turn_right1; } nOnline=0; } Wait(STEP); } short_break; turn_right1; Wait(nMAX*STEP); cross_line; nPoint++; nOnline=0; } while (nPoint == 7) { OnFwdSync(OUT_BC,75,100);Wait(300);Off(OUT_BC);Wait(1000); OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC); OnFwdSync(OUT_BC,75,100);Wait(200);Off(OUT_BC);Wait(1000); release(); OnFwdSync(OUT_BC,60,0);Wait(1000);Off(OUT_BC);Wait(1000); catch(); nPoint++; OnFwdSync(OUT_BC,60,0);Wait(500);Off(OUT_BC);Wait(1000); } long t2 = CurrentTick(); while (CurrentTick() - t2 < 5000) { if (SENSOR_3 > THRESHOLD +2) { OnFwd(OUT_B,-20);OnFwd(OUT_C,50); } else { Off(OUT_BC); } Wait(STEP); } while (nPoint == 8) { while (nOnline < nMAX){ if (SENSOR_3 < THRESHOLD -10) { turn_left1; nOnline++; } else { if (SENSOR_3 < THRESHOLD -5) { turn_left0; } else if (SENSOR_3 < THRESHOLD +2) { OnFwdSync(OUT_BC,30,0); } else if (SENSOR_3 < THRESHOLD +8) { turn_right0; } else { turn_right1; } nOnline=0; } Wait(STEP); } short_break; turn_right1; Wait(nMAX*STEP + 600); cross_line; OnFwd(OUT_BC,30);Wait(200); nPoint++; nOnline=0; } long t3 = CurrentTick(); while (CurrentTick() - t3 < 18000) { if (SENSOR_3 < THRESHOLD -10) { turn_right1; } else { if (SENSOR_3 < THRESHOLD -5) { turn_right0; } else if (SENSOR_3 < THRESHOLD +2) { OnFwd(OUT_BC,30); } else if (SENSOR_3 < THRESHOLD +8) { turn_left0; } else { turn_left1; } Wait(STEP); } } OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait(1000); while (nPoint == 9) { while (nOnline < nMAX){ if (SENSOR_3 < THRESHOLD -10) { turn_left1; nOnline++; } else { if (SENSOR_3 < THRESHOLD -5) { turn_left0; } else if (SENSOR_3 < THRESHOLD +2) { OnFwdSync(OUT_BC,30,0); } else if (SENSOR_3 < THRESHOLD +8) { turn_right0; } else { turn_right1; } nOnline=0; } Wait(STEP); } short_break; turn_right1; Wait(nMAX*STEP); cross_line; nPoint++; nOnline=0; } while (nPoint == 10) { OnFwdSync(OUT_BC,30,0);Wait(800);Off(OUT_BC);Wait(1000); OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(1000); release(); nPoint++; } while (nPoint == 11) { OnFwdSync(OUT_BC,-60,0);Wait(1200);Off(OUT_BC); OnFwdSync(OUT_BC,75,-100);Wait(500);Off(OUT_BC);Wait(1000); OnFwdSync(OUT_BC,60,0);Wait(1800);Off(OUT_BC); catch(); nPoint++; } while (nPoint == 12) { OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait(1000); OnFwdSync(OUT_BC,60,0);Wait(2500);Off(OUT_BC); OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(1000); release(); nPoint++; } } * 感想・反省 [#yb026e37]