アーム
 #define ARM_TIME 30        アームを開閉する時間を設定します。
 #define UP_TIME 70        アームを上下させる時間を設定します。
 
 
 task main(){
 
 SetSensor(SENSOR_1,SENSOR_LIGHT);       光センサーを設定します。
 SetSensor(SENSOR_3,SENSOR_TOUCH);       タッチセンサーを設定します。
 while(true){
   ClearMessage();
   
 if(SENSOR_1<40){OnFwd(OUT_C); Wait(ARM_TIME);       アームを閉じます。
 
    OnFwd(OUT_A); Wait(UP_TIME);       アームを上げます。
 Off(OUT_A+OUT_C);Wait(10);
   if(SENSOR_3==1){SendMessage(2); Wait(50);}       缶のときは、タッチセンサーが反応するので、2のメッセージを送ります。
 
   else{SendMessage(1); Wait(50);} }        缶でない時(箱)は、1のメッセージを送ります。
 if(Message()==3){OnRev(OUT_A); Wait(75); 
                 OnRev(OUT_C); Wait(35);Off(OUT_A+OUT_C);}       3のメッセージを受け取ったらアームを下ろして、アームを開きます。
 
  }
 }

足回り
 #define line_h_l   while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else {OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }}        ライントレースを2.6秒します。三叉路では、左 に曲がります。
 #define line_k_r   while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }}         ライントレースを2.6秒します。三叉路では、右に曲がります。
 #define line_h_r_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }}         ライントレースを2秒します。三叉路では、右に曲がります。
 #define line_h_r_2 while (Timer(1) <= 70)   {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }}        ライントレースを0.7秒します。三叉路では、左に曲がります。
 #define line_k_l_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }}         ライントレースを2秒します。三叉路では、右に曲がります。
 #define line_k_l_2 while (Timer(1) <= 70)   {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }}         ライントレースを0.7秒します。三叉路では、左に曲がります。 
 
 int i;  
 int turn_time;       変数iと変数turn_timeを設定します。
 
 task hako_l() {       左側で箱を取ったとき
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(0);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_C); OnRev(OUT_A); Wait(200);       反転します。 
    OnFwd(OUT_A+OUT_C); Wait(10);
    line_h_l; SendMessage(3); Wait(50);        ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);       
    OnFwd(OUT_A); OnRev(OUT_C); Wait(190);  OnFwd(OUT_A+OUT_C); Wait(300);
    Off(OUT_A+OUT_C);} }       停止後に後退し、元の位置に戻ります。
 
 task hako_r() {       右側で箱を取ったとき
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(0);
   ClearTimer(1);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_C); OnRev(OUT_A); Wait(200);       反転します。 
    OnFwd(OUT_A+OUT_C); Wait(10);
    line_h_r_1; line_h_r_2;SendMessage(3); Wait(50);      ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
    OnFwd(OUT_A); OnRev(OUT_C); Wait(190);  OnFwd(OUT_A+OUT_C); Wait(300);
    Off(OUT_A+OUT_C);} }       停止後に後退し、元の位置に戻ります。
 
task hako_m(){       中央で箱を取ったとき
 task hako_m(){       中央で箱を取ったとき
   SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);         光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(1);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_C); OnRev(OUT_A); Wait(210);       反転します。
        OnFwd(OUT_A+OUT_C); Wait(150);
    line_h_r_2;SendMessage(3); Wait(50);       ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
    OnFwd(OUT_A); OnRev(OUT_C); Wait(190);  OnFwd(OUT_A+OUT_C); Wait(300);
    Off(OUT_A+OUT_C);} }       停止後に後退し、元の位置に戻ります。
 
 task kann_r() {       右側で缶を取ったとき
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(0);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_A); OnRev(OUT_C); Wait(200);       反転します。 
    OnFwd(OUT_A+OUT_C); Wait(10);
    line_k_r; SendMessage(3); Wait(50);       ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
    OnFwd(OUT_C); OnRev(OUT_A); Wait(200);  OnFwd(OUT_A+OUT_C); Wait(450);
    Off(OUT_A+OUT_C);} }       停止後に後退し、元の位置に戻ります。
    
 task kann_l() {       左側で缶を取ったとき
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(0);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_A); OnRev(OUT_C); Wait(200);       反転します。 
    OnFwd(OUT_A+OUT_C); Wait(10);
    line_k_l_1; line_k_l_2; SendMessage(3); Wait(50);       ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
    OnFwd(OUT_C); OnRev(OUT_A); Wait(200);  OnFwd(OUT_A+OUT_C); Wait(450);
    Off(OUT_A+OUT_C);} }       停止後に後退し、元の位置に戻ります。
    
 task kann_m() {       中央で缶を取ったとき
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  while(true){
   ClearMessage();
   ClearTimer(1);
  
    Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50);       停止した後後退します。
    OnFwd(OUT_A); OnRev(OUT_C); Wait(210);       反転します。 
    OnFwd(OUT_A+OUT_C); Wait(150);
     line_k_l_2; SendMessage(3); Wait(50);       ライントレースをして、3のメッセージを送ります。
    Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
    OnFwd(OUT_C); OnRev(OUT_A); Wait(200);  OnFwd(OUT_A+OUT_C); Wait(450);
    Off(OUT_A+OUT_C);} }        停止後に後退し、元の位置に戻ります。   
    
 task main() {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_LIGHT);       光センサーを設定します。
 
  turn_time=10;
  i=0;      turn_timeを10・iを0とおきます。 
  
 while(true){
   ClearMessage();
   ClearTimer(0);
  
  OnFwd(OUT_A+OUT_C); Wait(50);        前進します。
  if(Message()==1){       メッセージが1で且つ
    if((i==1)||(i==3)||(i==5))       iが1・3・5のときhako_lをはじめます。
    {start hako_l;}
  
    if((i==2)||(i==4)||(i==6))       iが2・4・6のときhako_rをはじめます。     
    {start hako_r;}
 
  
      else       その他のときは、hako_mをはじめます。
      {start hako_m;}}
      
    if(Message()==2){       メッセージが2で且つ
    if((i==1)||(i==3)||(i==5))       iが1・3・5のときkann_rをはじめます。
    {start kann_r;}
  
    if((i==2)||(i==4)||(i==6))       iが2・4・6のときkann_lをはじめます。
    {start kann_l;}
  
      else       その他のときは、kann_mをはじめます。
      {start kann_m;}}
   
  else{while(Message()!=0){       その他のときはメッセージが送られてくるまで繰り返します。
   OnFwd(OUT_A+OUT_C); Wait(55); 
    OnRev(OUT_A+OUT_C); Wait(50);       前進し、後退します。
    OnFwd(OUT_A); OnRev(OUT_C); Wait(turn_time);        右にturn_timeだけ曲がりturn_timeに10、iに1加算します。
    turn_time =turn_time+10; i=i+1;
    OnFwd(OUT_A+OUT_C); Wait(55); 
  OnRev(OUT_A+OUT_C); Wait(50);       前進し、後退します。
    OnFwd(OUT_C); OnRev(OUT_A); Wait(turn_time);       左にturn_timeだけ曲がりturn_timeに10、iに1加算します。
 
    turn_time =turn_time+10; i=i+1;}
     }
   } 
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS