アーム
#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); 3秒待ちます。 OnFwd(OUT_C); Wait(ARM_TIME); アームを開閉させ、缶と箱を崩します。 OnRev(OUT_C); Wait(ARM_TIME); アームをもとどうりに開いておきます。 Off(OUT_A+OUT_C); while(true){ 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) 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);}} 黒い線をライントレースします。三叉路に差し掛かったときには、右に曲がります。 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);}} メッセージが送られてこないうちは、黒い線をラインとレースします。三叉路では、右に90度強曲がります。 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); 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);} 前進し、押している物体(缶か箱)をゆすってつかみやすくします。 } }