アーム
 #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);}        前進し、押している物体(缶か箱)をゆすってつかみやすくします。
   } 
 }


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS