#define zone1 37 #define zone2 45 #define zone3 60 #define zone4 65 #define zensin OnFwd(OUT_BC,40); #define sasetu OnFwd(OUT_B,40);Off(OUT_C); #define kyuusasetu OnFwd(OUT_B,40);OnRev(OUT_C,35); #define usetu OnFwd(OUT_C,40);Off(OUT_B); #define kyuuusetu OnFwd(OUT_C,40);OnRev(OUT_B,35); #define STEP 1 #define nMAX 220 #define short_break Off(OUT_BC);Wait(1000);
task main () { SetSensorLight(S3); int nOnline=0; long t0 = CurrentTick(); int n=0;
while (CurrentTick()-t0 <= 7000) { //7秒後缶をつかむ
if (SENSOR_3 < zone1) { kyuusasetu; } else if (SENSOR_3 < zone2) { sasetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { usetu; } else { kyuuusetu; } Wait(STEP); } OnRev(OUT_A,50);Wait(500);Off(OUT_A);
while (CurrentTick()-t0 <=14000) { //14秒後にライントレースの変更
while(nOnline < nMAX && CurrentTick()-t0 <= 14000) { if (SENSOR_3 < zone1) { kyuusasetu; nOnline++; } else { if (SENSOR_3 < zone2) { sasetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { usetu; } else { kyuuusetu; } nOnline=0; } Wait(STEP); } kyuuusetu;Wait(nMAX*STEP); OnFwd(OUT_BC,30);Wait(200); nOnline=0; }usetu;Wait(100);
while (CurrentTick()-t0 <= 28000) { //28秒後にもう一度ライントレースの変更
while(nOnline < nMAX && CurrentTick()-t0 <= 28000) { if (SENSOR_3 < zone1) { kyuuusetu; nOnline++; } else { if (SENSOR_3 < zone2) { usetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { sasetu; } else { kyuusasetu; } nOnline=0; } Wait(STEP); } kyuusasetu;Wait(nMAX*STEP); OnFwd(OUT_BC,30);Wait(200); nOnline=0; }sasetu;Wait(200);
while (CurrentTick()-t0 <= 54000) { //54秒後以降に1度でも交差点があれば缶を置く
while(nOnline < nMAX && CurrentTick()-t0 <= 54000) { if (SENSOR_3 < zone1) { kyuusasetu; nOnline++; } else { if (SENSOR_3 < zone2) { sasetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { usetu; } else { kyuuusetu; } nOnline=0; } Wait(STEP); } kyuuusetu;Wait(nMAX*STEP); OnFwd(OUT_BC,30);Wait(200); nOnline=0; }
while (n<2) {
while(nOnline < nMAX && n<2) { if (SENSOR_3 < zone1) { kyuusasetu; nOnline++; } else { if (SENSOR_3 < zone2) { sasetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { usetu; } else { kyuuusetu; } nOnline=0; } Wait(STEP); } kyuuusetu;Wait(nMAX*STEP); OnFwd(OUT_BC,30);Wait(200); nOnline=0;n++; } OnRev(OUT_BC,50);Wait(500);OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(300); OnFwd(OUT_B,50);OnRev(OUT_C,50);until(SENSOR_3 < 50); long t1 = CurrentTick();
while (CurrentTick()-t1 <= 1600) {
if (SENSOR_3 < zone1) { kyuuusetu; } else if (SENSOR_3 < zone2) { usetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { sasetu; } else { kyuusasetu; } Wait(STEP); } sasetu;Wait(270);Off(OUT_BC);OnFwd(OUT_A,50);Wait(300);Off(OUT_A); OnRev(OUT_BC,50);Wait(600);OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(300); OnFwd(OUT_C,50);OnRev(OUT_B,50);until(SENSOR_3 < 50); long t2 = CurrentTick();
while (CurrentTick()-t2 <= 3900) {
if (SENSOR_3 < zone1) { kyuusasetu; } else if (SENSOR_3 < zone2) { sasetu; } else if (SENSOR_3 < zone3) { zensin; } else if (SENSOR_3 < zone4) { usetu; } else { kyuuusetu; } Wait(STEP); } Off(OUT_BC);
}
毎回の時間の誤差の解決が大変でした。 特にある程度アバウトですがある程度どんなときでもクリアできる時間を探し出すのは苦労しました。 また電池の残量により速度が変わり1度プログラムの数値を見直したりしたのは大変だったのでこれからは電池の残量にもしっかりと気配りしたいと思います。
プログラミングの力をもっとつけなければいけないと思いました。 また100%成功するわけではないのでロボを改良したり何かほかの方法を見つけ出せるようになりたいと思います。 電池の残量もよく確認していきたいです。