Hi all
I have a project for my lathe that uses linear scales for measurement
Glass linear scale - 5um (0.005mm)
Both scales need to be able to operate independent, with "Zero" set function and "Increment" set function
I can get 1 to work perfectly, with high precision and speed using encoder.h library
But how can I get both to work as the loop/voids rely on buttons ( from screen or physical ) to set the zero point. A button press basically takes it to a new loop specific for that scale
The code so far only includes the X_scale, but the Y_scale will be exactly the same, but labelled Y_****
#include <Encoder.h> // Uses 5um (0.005mm) incremental glass scale linear encoder https://www.vevor.com.au/linear-scale-c_10122/250mm-linear-scale-for-milling-lathe-machine-drilling-3m-signal-cable-precision-p_010844850404
Encoder scaleX(2, 4); // Spread interupt pins 2 & 3 accross each scale,
Encoder scaleY(3, 5); // res future use
const int X_ZincPin = 6;
const int X_ZeroPin =7;
int X_ZeroPinState = 0; // used in loop() to switch to zero() to set zero point for zero measurment when read head set, regardless of intitial power-up position of read head
int X_ZincPinState = 0; // used to creat incremental value from zero when read head is set to an incremental point.
long X_ref1 = 0; // reference value
long X_ref2 = 0; // reference value
long X_zeropos = 0;
long X_Zinc = 0;
long X_Zero = 0;
long X_oldPosition1 = 0;
long X_oldPosition2 = 0;
long X_oldPosition3 = 0;
void setup() {
Serial.begin(9600);
Serial.println("Zero set button:");
pinMode(X_ZeroPin, INPUT_PULLUP);
pinMode(X_ZincPin, INPUT_PULLUP);
}
void loop() {
X_ZeroPinState = digitalRead(X_ZeroPin);
if (X_ZeroPinState == CHANGE) {
if (newPosition1 != X_oldPosition1)
X_oldPosition1 = newPosition1;
//long newPosition2 = scaleY.read();
// if (newPosition2 != X_oldPosition2)
// X_oldPosition2 = newPosition2;
X-ref1 = newPosition1;
X_ref2 = newPosition2;
Serial.print(ref1/200.00,3),Serial.print("mm X-Slide : "),
Serial.print(" ---ZeroPinstate = "),Serial.println(X_ZeroPinState);
}
else {
X_zero();
}
}
void X_zero() {
X_ZincPinState = digitalRead(X_ZincPin);
if (X_ZincPinState == CHANGE)
{
long newPosition3 = scaleX.read();
(newPosition3 != X_oldPosition3) ;
X_oldPosition3 = newPosition3;
X_Zinc = (newPosition3-X_ref1);
Serial.print(X_Zinc/200.00,3),Serial.print(" =Zinc= :");
Serial.print(X_ref1/200.00,3),Serial.print(" =ref1= : ");
Serial.print(newPosition3/200.00,3),Serial.print(" ==newpos3== ; ");
Serial.print(scaleX.read()/200.00,3), Serial.print(" ==scale1== ; ");
Serial.print("=ZincPinstate "),Serial.print(X_ZincPinState),Serial.println( " ~~ void zero() ");
}
else {
zinc();
}
}
void zinc()
{
long newPosition3 = scaleX.read();
(newPosition3 != X_oldPosition3);
X_oldPosition3 = newPosition3;
X_zeropos = newPosition3-ref1;
Zero = (X_Zinc+X_ref1)-newPosition3;
Serial.print(X_zeropos/200.00,3),Serial.print(" Zero Posn mm : ");
Serial.print(X_Zero/200.00,3),Serial.print(" Increment Posn mm : ");
Serial.print(" ZincPinstate = "),Serial.print(X_ZincPinState), Serial.println(" ~+~ void zero() ");
}
//delay(1000)