I am making a G-code interpreter and have run into an issue in the positioning system.
This code works, but the stepper I am using isn't acreate down to 0.01 mm:
void xSmall(){
if(abs( xCurrent - xDouble ) <= 0.005){
//do nothing!!!
}else{
if(xCurrent < xDouble){ //Do we move up?
//Move tward xDouble by 0.01 units
digitalWrite(x1, HIGH);
delay(d);
digitalWrite(x1, LOW);
digitalWrite(x2, HIGH);
delay(d);
digitalWrite(x2, LOW);
digitalWrite(x3, HIGH);
delay(d);
digitalWrite(x3, LOW);
digitalWrite(x4, HIGH);
delay(d);
digitalWrite(x4, LOW);
xCurrent = xCurrent + 0.01; //write in current location
}else{
//Move tward xDouble by 0.01 units
digitalWrite(x4, HIGH);
delay(d);
digitalWrite(x4, LOW);
digitalWrite(x3, HIGH);
delay(d);
digitalWrite(x3, LOW);
digitalWrite(x2, HIGH);
delay(d);
digitalWrite(x2, LOW);
digitalWrite(x1, HIGH);
delay(d);
digitalWrite(x1, LOW);
xCurrent = xCurrent - 0.01; //write in current location
}
}
}
This code compensates for the inacreasy but is Doesn't work:
void xSmall(){
if(abs( xCurrent - xDouble ) <= 0.25){
//do nothing!!!
}else{
if(xCurrent < xDouble){ //Do we move up?
// Move tward zDouble by 0.25 mm
digitalWrite(x1, HIGH);
delay(d);
digitalWrite(x1, LOW);
digitalWrite(x2, HIGH);
delay(d);
digitalWrite(x2, LOW);
digitalWrite(x3, HIGH);
delay(d);
digitalWrite(x3, LOW);
digitalWrite(x4, HIGH);
delay(d);
digitalWrite(x4, LOW);
xCurrent = xCurrent + 0.25; //write in current location
}else{
// Move tward zDouble by 0.25 mm
digitalWrite(x4, HIGH);
delay(d);
digitalWrite(x4, LOW);
digitalWrite(x3, HIGH);
delay(d);
digitalWrite(x3, LOW);
digitalWrite(x2, HIGH);
delay(d);
digitalWrite(x2, LOW);
digitalWrite(x1, HIGH);
delay(d);
digitalWrite(x1, LOW);
xCurrent = xCurrent - 0.25; //write in current location
}
}
}
I don't see any logical reason why it wouldn't work? :-?