- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
* メンバー [#ibb85475]
kiyomizu : スタート→ゴールを担当
suiden : 主に機体を担当~
kiyomizu : 主にアームを担当~
kowhich: 主にプログラムを担当~
ryu-abe: 主に数値計測を担当~
suiden : ゴール→スタートを担当
* 課題の内容 [#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]