- 追加された行はこの色です。
- 削除された行はこの色です。
[[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;
}
}