void runTo(long x,long y,long z,int speed){ //xyz为脉冲数,speed单位是mm/s
if(x > 0)
digitalWrite(X_DIR_PIN,HIGH);
if(x <= 0)
digitalWrite(X_DIR_PIN,LOW);
if(y > 0)
digitalWrite(Y_DIR_PIN,HIGH);
if(y <= 0)
digitalWrite(Y_DIR_PIN,LOW);
if(z > 0)
digitalWrite(Z_DIR_PIN,HIGH);
if(z <= 0)
digitalWrite(Z_DIR_PIN,LOW);
long a = abs(x);
long b = abs(y);
long c = abs(z);
long MAX = max(max(a,b),c);//MAX为轴的最大脉冲数,既最远距离的脉冲数。
unsigned long time_t = (1000000/(speed*100))*MAX;//微妙,如果写成1000000*MAX/(speed*100)就数据越界了
unsigned long X_interval = time_t/a;
unsigned long X_inter = X_interval;
unsigned long Y_interval = time_t/b;
unsigned long Y_inter = Y_interval;
unsigned long Z_interval = time_t/c;
unsigned long Z_inter = Z_interval;
unsigned long time_last = micros();
while(a >0 || b>0 || c>0){
unsigned long time_now = micros();
if ( ((time_now - time_last) > X_interval) && (a > 0))
{
digitalWrite(X_STEP_PIN,HIGH);
digitalWrite(X_STEP_PIN,LOW);
X_interval += X_inter;
a--;
}
if (((time_now - time_last) > Y_interval) && (b > 0))
{
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_STEP_PIN,LOW);
Y_interval += Y_inter;
b--;
}
if ( ((time_now - time_last) > Z_interval) && (c > 0))
{
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_STEP_PIN,LOW);
Z_interval += Z_inter;
c--;
}
}