- 追加された行はこの色です。
- 削除された行はこの色です。
アーム
#define ARM_TIME 30
#define UP_TIME 60
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);
#define ARM_TIME 30 アームを開閉する時間を設定します。
#define UP_TIME 60 アームを上下させる時間を設定します。
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT); 光センサーを設定します。
SetSensor(SENSOR_3,SENSOR_TOUCH); タッチセンサーを設定します。
Off(OUT_A+OUT_C); Wait(300);
OnFwd(OUT_C); Wait(ARM_TIME);
OnRev(OUT_C); Wait(ARM_TIME);
Off(OUT_A+OUT_C); Wait(300); 3秒待ちます。
OnFwd(OUT_C); Wait(ARM_TIME); アームを開閉させ、缶と箱を崩します。
OnRev(OUT_C); Wait(ARM_TIME); アームをもとどうりに開いておきます。
Off(OUT_A+OUT_C);
while(true){
ClearMessage();
if(SENSOR_1<38){SendMessage(4); Wait(50); Off(OUT_A+OUT_C);
Wait(800);
OnFwd(OUT_C); Wait(ARM_TIME);
OnFwd(OUT_A); Wait(UP_TIME);
if(SENSOR_3==0){SendMessage(1); Wait(50);Off(OUT_A+OUT_C);
Wait(1500); OnFwd(OUT_A); Wait(UP_TIME);}
if(SENSOR_3==1){SendMessage(2); Wait(50);Off(OUT_A+OUT_C);
Wait(1500); OnFwd(OUT_A); Wait(UP_TIME);} }
while(true){
if(Message()==3){OnRev(OUT_C); Wait(ARM_TIME+30);
OnRev(OUT_A);Wait(UP_TIME);
}
}
}
ClearMessage();
if(SENSOR_1<33){SendMessage(4); 缶か箱を発見したらメッセージ4を送ります。
Wait(50);Off(OUT_A+OUT_C); Wait(800); 8秒待ちます。
OnFwd(OUT_C); Wait(ARM_TIME); アームを閉じます。
OnFwd(OUT_A); Wait(UP_TIME); アームを上げます。
if(SENSOR_3==0){SendMessage(1);Wait(50);Off(OUT_A+OUT_C); 箱のときには、タッチセンサーが反応しないので、1のメッセージを送ります。
Wait(1500); OnFwd(OUT_A); Wait(UP_TIME);}
if(SENSOR_3==1){SendMessage(2);Wait(50);Off(OUT_A+OUT_C); 缶のときは、タッチセンサーが反応するので、2のメッセージを送ります。
Wait(1500); OnFwd(OUT_A); Wait(UP_TIME);} } 15秒待ちます
if(Message()==3){OnRev(OUT_C); Wait(ARM_TIME+30);
OnRev(OUT_A);Wait(UP_TIME); 3のメッセージを受け取ったらアームを下ろして、アームを開きます。
}
}
}
足回り
#define line while (SENSOR_3==0) {if(SENSOR_2<43){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_1<43){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(5);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }}
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);
#define line while(SENSOR_3==0) 3のセンサーが反応するまで繰り返します。
{if(SENSOR_2<43){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);}
if(SENSOR_1<43){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);}
else{OnFwd(OUT_C+OUT_A); Wait(5);}
if((SENSOR_1<43)&&(SENSOR_2<43)){
OnFwd(OUT_A); OnRev(OUT_C); Wait(40);}} 黒い線をライントレースします。三叉路に差し掛かったときには、右に曲がります。
OnFwd(OUT_A+OUT_C); Wait(300);
OnFwd(OUT_A); OnRev(OUT_C); Wait(45);
while(true){
ClearMessage();
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH); 各センサーを設定します。
OnFwd(OUT_A+OUT_C); Wait(300); 3秒前進します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(45); 右に曲がります。
while(true){
ClearMessage();
while(Message()==0){if(SENSOR_2<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(15);} if(SENSOR_1<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(15);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<42)&&(SENSOR_2<42)){OnFwd(OUT_C); OnRev(OUT_A); Wait(120);}}
while(Message()==0){if(SENSOR_2<42){OnFwd(OUT_A);
OnRev(OUT_C); Wait(15);} if(SENSOR_1<42){OnFwd(OUT_C);
OnRev(OUT_A); Wait(15);} else{OnFwd(OUT_C+OUT_A);
Wait(10);}if((SENSOR_1<42)&&(SENSOR_2<42))
{OnFwd(OUT_C); OnRev(OUT_A); Wait(120);}} メッセージが送られてこないうちは、黒い線をラインとレースします。三叉路では、右に90度強曲がります。
if(Message()==1){
Off(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A+OUT_C); Wait(100); line; OnRev(OUT_A+OUT_C); Wait(20); OnFwd(OUT_C); OnRev(OUT_A); Wait(110);
OnFwd(OUT_A+OUT_C); Wait(30); OnFwd(OUT_A); OnRev(OUT_C); Wait(110); OnFwd(OUT_A+OUT_C); until(SENSOR_3==0); SendMessage(3);
Wait(50); Float(OUT_A+OUT_C); Wait(500);
OnRev(OUT_A+OUT_C); Wait(80); OnFwd(OUT_A);
OnRev(OUT_C); Wait(200); OnFwd(OUT_A+OUT_C); Wait(400);
Off(OUT_A+OUT_C);}
if(Message()==1){Off(OUT_A+OUT_C); Wait(50); 1のメッセージ(箱)が送られてきたら、一度とまります。
OnFwd(OUT_A+OUT_C); Wait(100); line; 前進して、タッチセンサーが反応するまで、ライントレースを開始します。
OnRev(OUT_A+OUT_C); Wait(20);
OnFwd(OUT_C); OnRev(OUT_A); Wait(110);
OnFwd(OUT_A+OUT_C); Wait(30);
OnFwd(OUT_A); OnRev(OUT_C); Wait(110);
OnFwd(OUT_A+OUT_C); until(SENSOR_3==0); このままでは缶のほうに入ってしまうので、後退して、箱を入れる位置まで動きます。
SendMessage(3); Wait(50); 3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(500); 5秒とまります。
OnRev(OUT_A+OUT_C); Wait(80);
OnFwd(OUT_A); OnRev(OUT_C); Wait(200);
OnFwd(OUT_A+OUT_C); Wait(400);
Off(OUT_A+OUT_C);} 後退して反転し、元の位置まで進みます。
if(Message()==2){
Off(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A+OUT_C); Wait(100); line; SendMessage(3);
Wait(50); Float(OUT_A+OUT_C); Wait(500);
OnRev(OUT_A+OUT_C); Wait(80); OnFwd(OUT_C);
OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(400);
Off(OUT_A+OUT_C);}
if(Message()==4){ClearTimer(0); while((SENSOR_1>42)||(SENSOR_2>42)){if(SENSOR_2<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(15);} if(SENSOR_1<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(15);} else{OnFwd(OUT_C+OUT_A); Wait(10);}} OnFwd(OUT_C); OnRev(OUT_A); Wait(120); OnFwd(OUT_A+OUT_C); Wait(80);
OnFwd(OUT_A); OnRev(OUT_C); Wait(100);
OnRev(OUT_A); OnFwd(OUT_C); Wait(80);
OnFwd(OUT_A+OUT_C);Wait(100); Off(OUT_A+OUT_C);}
}
}
if(Message()==2){Off(OUT_A+OUT_C); Wait(50); 2のメッセージ(缶)が送られてきたら、一度とまります。
OnFwd(OUT_A+OUT_C); Wait(100); line; 前進して、タッチセンサーが反応するまで、ライントレースを開始します。
SendMessage(3); Wait(50); 3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(500); 5秒とまります。
OnRev(OUT_A+OUT_C); Wait(80);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200);
OnFwd(OUT_A+OUT_C); Wait(400);
Off(OUT_A+OUT_C);} 後退して反転し、元の位置まで進みます。
if(Message()==4){while((SENSOR_1>42)&&(SENSOR_2>42)) { 4のメッセージが送られてきたら、三叉路まで繰り返します。
if(SENSOR_2<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(15);}
if(SENSOR_1<42){OnFwd(OUT_C);OnRev(OUT_A); Wait(15);}
else{OnFwd(OUT_C+OUT_A); Wait(10);}} ライントレースをします。
OnFwd(OUT_C); OnRev(OUT_A); Wait(120); 三叉路まできたら左に曲がります。
OnFwd(OUT_A+OUT_C); Wait(80);
OnFwd(OUT_A); OnRev(OUT_C); Wait(100);
OnRev(OUT_A); OnFwd(OUT_C); Wait(80);
OnFwd(OUT_A+OUT_C);Wait(100); Off(OUT_A+OUT_C);} 前進し、押している物体(缶か箱)をゆすってつかみやすくします。
}
}