アーム

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

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-16 (金) 13:31:03