[[2015a/MemberOnly]]
**プログラムの説明 [#m117015b]
#define SPEED 50
#define SPEED_SLOW 30
#define shoot OnRev(OUT_A,10);Wait(500);OnFwd(OUT_BC,SPEED);Wait(1000);

const float diameter=5.45;
const float track=10.35;
const float pi=3.1415;

void fwdDist(float d)
{
    long angle;
    angle=d/(diameter*pi)*360.0;
    RotateMotorEx(OUT_BC,SPEED_SLOW,angle,100,true,true);
  }
 void turnAng(long ang)
 {
  long angle;
  angle=track/diameter*ang;
  RotateMotorEx(OUT_BC,SPEED_SLOW,angle,100,true,true);
}
  int searchDirection(long ang)
{
  long angle,tacho_min=0, tacho_corr;
  int d_min;
  d_min=300;

  angle = (track/diameter)*ang;
  turnAng(ang/2);
  ResetTachoCount(OUT_BC);
  OnFwdSync(OUT_BC,SPEED_SLOW,-100);
  while(MotorTachoCount(OUT_B)<=angle){
     if(SensorUS(S1)<d_min){
         d_min=SensorUS(S1);
         tacho_min=MotorTachoCount(OUT_B);
     }
  }
  OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
  until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d_min);
 
 Wait(14);
 Off(OUT_BC);Wait(500);
 return d_min;
}

task main()
{
  SetSensorLowspeed(S1);

  int d = searchDirection(120);
  if (d > 25){
      fwdDist(d-25.0);
   shoot;
   }
}


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