[[2013b/MemberOnly/進行状況]]
[[缶の除去を行うロボット]]
*ソースコード [#g1c4cf30]

 #define THRESHOLD 60
 #define SPEED_A 10
 #define SPEED_B 20
 #define SPEED_C 30
 #define SPEED_D 40
 #define SPEED_E 50
 #define SPEED_F 60
 #define SPEED_G 70
 #define SPEED_H 80
 #define SPEED_I 90
 #define SPEED_J 100
 #define STEP 1
 #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
 #define go_forward OnRL(SPEED_C,SPEED_C);
 #define turn_first_curve OnRL(SPEED_H,-SPEED_H);
 #define turn_left0 OnRL(SPEED_C,0);
 #define turn_left0_2 OnRL(SPEED_B,0);
 #define turn_left1 OnRL(SPEED_B,-SPEED_B);
 #define turn_left2 OnRL(SPEED_H,-SPEED_H);
 #define turn_right0 OnRL(0,SPEED_B);
 #define turn_right00 OnRL(0,SPEED_F);
 #define turn_right000 OnRL(0,SPEED_H);
 #define turn_right1 OnRL(-SPEED_B,SPEED_B);
 #define turn_right2 OnRL(-SPEED_D,SPEED_D);
 #define nMAX_A 150
 #define nMAX_B 200
 #define nMAX_C 250
 #define nMAX_D 300
 #define short_break Off(OUT_BC);Wait(1000);
 #define CROSS_TIME 400
 #define cross_line OnRL(SPEED_C,SPEED_C);Wait(CROSS_TIME);short_break;
 #define udefuri OnFwd(OUT_A,SPEED_B);Wait(400); //アーム用
 task main() 
 {
  SetSensorLight(S1);
  SetSensorLowspeed(S2);
  long t0=CurrentTick();
  int nOnline=0;
  while(CurrentTick()-t0<17000){ //第一セクション
   if(SENSOR_1<THRESHOLD-15){
     turn_right000;
    }else{
      if(SENSOR_1<THRESHOLD-8){
        turn_right00;
          }else if(SENSOR_1<THRESHOLD+5){
           go_forward;
          }else if(SENSOR_1<THRESHOLD+10){
           turn_left1;
          }else{
           turn_left1;
          } 
           nOnline=0;
         }
        Wait(STEP);
  if(SensorUS(S2)<6){ //缶を移動させるプログラム
   Off(OUT_BC);Wait(1000);
   udefuri;
   Off(OUT_BC);Wait(1000);
   OnFwd(OUT_B,40);OnRev(OUT_C,40);Wait(1500);
   Off(OUT_BC);Wait(2000);
   OnRev(OUT_BC,SPEED_B);
   Wait(4000);
   Off(OUT_BC);Wait(2000);
   OnRev(OUT_A,SPEED_B);Wait(400);
   Off(OUT_BC);Wait(1000);
   OnRev(OUT_BC,SPEED_B);Wait(2500);
   Off(OUT_BC);Wait(1000);
   OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(1500);
   Off(OUT_BC);Wait(2000);
   }
 } 
  while(CurrentTick()-t0<30000){ //第二セクション
   PlaySound(SOUND_UP);
   while(nOnline<140){
    if(SENSOR_1<THRESHOLD-15){
     turn_right2;
     nOnline++;
     }else{
      if(SENSOR_1<THRESHOLD-8){
        turn_right2;
          }else if (SENSOR_1<THRESHOLD){
           go_forward;
          }else if(SENSOR_1<THRESHOLD+10){
           turn_left0_2;
          }else{
           turn_left0;
             }
           nOnline=0;
            }
          Wait(STEP);
        }
      short_break;
      turn_right1;
      Wait(100);
      cross_line;
      long t1=CurrentTick(); //ここから最初の円用のプログラム
      while(CurrentTick()-t1<7800){
       if(SENSOR_1<THRESHOLD-15){
       turn_right1;
       }else{
         if(SENSOR_1<THRESHOLD-8){
          turn_right0;
          }else if (SENSOR_1<THRESHOLD+5){
           go_forward;
          }else if(SENSOR_1<THRESHOLD+10){
           turn_left0;
          }else{
           turn_left1;                   
            }
           nOnline=0;
            }
          Wait(STEP);  
      }
      PlaySound(SOUND_DOWN);
      nOnline=0;    
 }
 while(CurrentTick()-t0<39000){ //第三セクション
  PlaySound(SOUND_UP);
  while(nOnline<160){
    if(SENSOR_1<THRESHOLD-15){
     turn_right1;
     nOnline++;
    }else{
      if(SENSOR_1<THRESHOLD-8){
        turn_right0;
          }else if (SENSOR_1<THRESHOLD+5){
           go_forward;
          }else if(SENSOR_1<THRESHOLD+10){
           turn_left0;
          }else{
           turn_left1;                   
            }
           nOnline=0;
            }
          Wait(STEP);
        }
      short_break;
      turn_left1;
      Wait(100);
      cross_line;
      PlaySound(SOUND_DOWN);
      nOnline=0;    
  }
 }


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