So here is the program code
[code]
#include <Adafruit_MCP23017.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SoftwareSerial.h>
//#include <Adafruit_MCP23X17.h>
#include <Adafruit_PCF8574.h>
#include <SPI.h>
#include <Wire.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 15, 220);
unsigned int localPort = 51000; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
EthernetUDP udp;
Adafruit_MCP23017 mcp1; // I2C
Adafruit_MCP23017 mcp2; // I2C
Adafruit_PCF8574 safex;// I2C
Adafruit_PCF8574 safey;// I2C
Adafruit_PCF8574 safez;// I2C
SoftwareSerial SoftSer(2, 3);
//mcp1
const int takeastepx = 0;
const int directionx = 1;
const int axisXenable = 2;
const int step_ms1x = 3;
const int step_ms2x = 4;
const int step_ms3x = 5;
const int takeastepy = 6;
const int directiony = 7;
const int axisYenable = 8;
const int step_ms1y = 9;
const int step_ms2y = 10;
const int step_ms3y = 11;
const int takeastepz = 12;
const int directionz = 13;
const int axisZenable = 14;
//mcp2
const int step_ms1z = 0;
const int step_ms2z = 1;
const int step_ms3z = 2;
const int Spin = 3;
const int SpinRun = 4;
String disc = "";
String diss = "";
String Qx = "";
String Qy = "";
String Qz = "";
String replX = "";
String replY = "";
String replZ = "";
int SpindleStop = 0;
int Startx = 0;
int Starty = 0;
int Startz = 0;
int Refx = 0;
int Refy = 0;
int Refz = 0;
unsigned long cm = 0;
unsigned long pm = 0;
long iv = 15;
long cvx = 0; //X-axis Encoder Counts
long cvy = 0; //Y-axis Encoder Counts
long cvz = 0; //Z-axis Encoder Counts
long pvx = 0; //X-axis process variable Counts to position
long pvy = 0; //Y-axis process variable Counts to position
long pvz = 0; //Z-axis process variable Counts to position
long cpx = 0; //Recieved command for X-axis position
long cpy = 0; //Recieved command for Y-axis position
long cpz = 0; //Recieved command for Z-axis position
int xspare = 0;
int yspare = 0;
int zspare = 0;
int gohomex = 0;
int JogFwdx = 0;
int JogRevx = 0;
int Stopx = 0;
int exteotx = 0;
int reteotx = 0;
int xhome = 0;
int gohomey = 0;
int JogFwdy = 0;
int JogRevy = 0;
int Stopy = 0;
int exteoty = 0;
int reteoty = 0;
int yhome = 0;
int gohomez = 0;
int JogDwnz = 0;
int JogUpz = 0;
int Stopz = 0;
int exteotz = 0;
int reteotz = 0;
int zhome = 2;
int Tmrx = 0;
int Tmry = 0;
int Tmrz = 0;
int Nopz = 0;
int R1x = 100;
int R2x = 50;
int R3x = 10;
int R4x = 3;
int D1x = 1000;
int D2x = 750;
int W1x = 2;
int W2x = 4;
int R1y = 100;
int R2y = 50;
int R3y = 10;
int R4y = 3;
int D1y = 1000;
int D2y = 750;
int W1y = 2;
int W2y = 4;
int R1z = 100;
int R2z = 50;
int R3z = 10;
int R4z = 3;
int D1z = 1000;
int D2z = 750;
int D3z = 500;
int D4z = 250;
int D5z = 75;
int D6z = 35;
int D7z = 20;
int D8z = 10;
int W1z = 2;
int W2z = 4;
int R = 0;
int LL = 0;
int timeWinSlo1 = 125;
int timeWinSlo2 = 126;
int timeWinFst1 = 10;
int timeWinFst2 = 11;
int readAll = 0;
int getEncData = 0;
int SerNot = 0;
int RampTimez = 0;
int Q = 0;
void setup() {
// Remember Serial has the Encoder position data
SPI.begin();
Ethernet.init(10);
Ethernet.begin(mac, ip);
Wire.begin();
mcp1.begin(0x03);
mcp2.begin(0x04);
safex.begin(0x20, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safex.pinMode(p, INPUT_PULLUP);
}
safey.begin(0x21, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safey.pinMode(p, INPUT_PULLUP);
}
safez.begin(0x22, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safez.pinMode(p, INPUT_PULLUP);
}
mcp1.pinMode(takeastepx, OUTPUT);// step pin X
mcp1.pinMode(takeastepy, OUTPUT);// step pin Y
mcp1.pinMode(takeastepz, OUTPUT);// step pin Z
mcp1.pinMode(directionx, OUTPUT);// stepperX direction
mcp1.pinMode(directiony, OUTPUT);// stepperY direction
mcp1.pinMode(directionz, OUTPUT);// stepperZ direction
mcp1.pinMode(axisXenable, OUTPUT);// Enable stepper X movement
mcp1.pinMode(axisYenable, OUTPUT);// Enable stepper Y movement
mcp1.pinMode(axisZenable, OUTPUT);// Enable stepper Z movement
mcp1.pinMode(step_ms1x, OUTPUT);// stepper step select ms1x
mcp1.pinMode(step_ms2x, OUTPUT);// stepper step select ms2x
mcp1.pinMode(step_ms3x, OUTPUT);// stepper step select ms3x
mcp1.pinMode(step_ms1y, OUTPUT);// stepper step select ms1y
mcp1.pinMode(step_ms2y, OUTPUT);// stepper step select ms2y
mcp1.pinMode(step_ms3y, OUTPUT);// stepper step select ms3y
mcp2.pinMode(step_ms1z, OUTPUT);// stepper step select ms1z
mcp2.pinMode(step_ms2z, OUTPUT);// stepper step select ms2z
mcp2.pinMode(step_ms3z, OUTPUT);// stepper step select ms3z
mcp2.pinMode(Spin, OUTPUT);// command to run Spindle Motor
mcp2.pinMode(SpinRun, INPUT);//Indication of spindle motor Powered
mcp2.pullUp(SpinRun, HIGH);
//mcp2.pinMode(SpinRun, INPUT);
mcp1.digitalWrite(step_ms1x, LOW); //was 8
mcp1.digitalWrite(step_ms1y, LOW); //was 2
mcp2.digitalWrite(step_ms1z, LOW); //was 12
mcp1.digitalWrite(step_ms2x, LOW); //was 7
mcp1.digitalWrite(step_ms2y, LOW); //was 1
mcp2.digitalWrite(step_ms2z, LOW); //was 11
mcp1.digitalWrite(step_ms3x, LOW); //was 5
mcp1.digitalWrite(step_ms3y, LOW); //was 0
mcp2.digitalWrite(step_ms3z, LOW); //was 10
mcp1.digitalWrite(takeastepx, LOW);// takeastepx
mcp1.digitalWrite(takeastepy, LOW);// takeastepy
mcp1.digitalWrite(takeastepz, LOW);// takeastepz
Serial.begin(9600);
SoftSer.begin(9600);//was 57600
udp.begin(localPort);
}
void loop() {
Timer();
timeWinSlo1 = 126;
if (Startx == 2 && R == 2 || Starty == 2 && R == 2) {
R = 0;
}
if (Startx == 0 && getEncData == timeWinSlo1 && getEncData < timeWinSlo2) {
SoftSer.println("000RD!");
getEncData = 0;
}
if (Startx > 0 && getEncData == timeWinFst1 && getEncData < timeWinFst2) {
SoftSer.println("000RD!");
getEncData = 0;
}
UdpRec();
RealSer1();
getio();
if (cvx > cpx) {
pvx = (cvx - cpx);
}
if (cpx > cvx) {
pvx = (cpx - cvx);
}
//start of X axis
if (Tmrx < 20 && Stopx == 1) {
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
//pvx = process variable, cpx = Command Position
if (pvx > W2x && Startx == 1 && Refx == 0) {
Startx = 2;
}
if (Refx == 1) {
Reffx(); //remote Ref == 5 comes from remote
}
if (gohomex == 0 && Refx == 0 || Refx == 5) {
mcp1.digitalWrite(directionx, LOW); //manual or remote
Refx = 1;
Startx = 20;
cpx = -1;
}
if (Stopx == 0 && exteotx == 1 && reteotx == 1) {
Startx = 2;
mcp1.digitalWrite(takeastepx, HIGH);
}
if (Stopx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (exteotx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (reteotx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogFwdx == 0) {
Startx = 30;
}
if (JogRevx == 0) {
Startx = 40;
}
if (exteotx == 1 && reteotx == 1) {
if (Startx == 2 && Refx == 0) {
positionX();
}
if (Startx == 35 || Startx == 45 || Startx == 30 || Startx == 40) {
jogX();
}
}
//start of Y axis
// determine position movement for Y axis
if (cvy > cpy) {
pvy = (cvy - cpy);
}
if (cpy > cvy) {
pvy = (cpy - cvy);
}
if (Tmry < 20 && Stopy == 1) {
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
//pvy = process variable, cpy = Command Position
if (pvy > W2y && Starty == 1 && Refy == 0) {
Starty = 2;
}
if (Refy == 1) {
Reffy(); //remote Ref == 5 comes from remote
}
//manual or remote
if (gohomey == 0 && Refy == 0 || Refy == 5) {
mcp1.digitalWrite(directiony, LOW);
Refy = 1;
Starty = 20;
cpy = -1;
}
if (Stopy == 0 && exteoty == 1 && reteoty == 1) {
Starty = 2;
mcp1.digitalWrite(takeastepy, HIGH);
}
if (Stopy == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (exteoty == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (reteoty == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogFwdy == 0) {
Starty = 30;
}
if (JogRevy == 0) {
Starty = 40;
}
if (exteoty == 1 && reteoty == 1) {
if (Starty == 2 && Refy == 0) {
positionY();
}
if (Starty == 35 || Starty == 45 || Starty == 30 || Starty == 40) {
jogY();
}
}
//start of Z axis
// determine position movement for Z axis
if (cvz > cpz) {
pvz = (cvz - cpz);
}
if (cpz > cvz) {
pvz = (cpz - cvz);
}
if (mcp2.digitalRead(Spin) == 0 && SpindleStop == 0) {
SpindleStop = 1;
diss = "25Z";
UdpTrans();
}
if (mcp2.digitalRead(Spin) == 1 && SpindleStop == 1) {
diss = "27Z";
SpindleStop = 0;
UdpTrans();
}
if (Tmrz < 20 && Stopz == 1) {
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
//pvz = process variable, cpz = Command Position
if (pvz > W2z && Startz == 1 && Refz == 0) {
Startz = 2;
}
if (Refz == 1) {
Reffz(); //remote Refz == 5 comes from remote
}
//manual or remote
if (gohomez == 0 && Refz == 0 || Refz == 5) {
mcp1.digitalWrite(directionz, LOW);
Refz = 1;
Startz = 20;
cpz = -1;
}
if (Stopz == 0 && exteotz == 1 && reteotz == 1) {
Startz = 2;
mcp1.digitalWrite(takeastepz, HIGH);
}
if (Stopz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (exteotz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (reteotz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogDwnz == 0) {
Startz = 30;
}
if (JogUpz == 0) {
Startz = 40;
}
if (exteotz == 1 && reteotz == 1) {
if (Startz == 2 && Refz == 0) {
positionZ();
}
if (Startz == 35 || Startz == 45 || Startz == 30 || Startz == 40) {
jogZ();
}
}
if (readAll == 5) {
if (pvx <= W1x && Startx == 2 || pvx <= W1x && Startx == 1 && replX.length() < 8) {
replX = String(cvx) + "IX";
for (int k = replX.length(); k < 8; k++) {
replX = "0" + replX;
}
}
if (pvy <= W1y && Starty == 2 || pvy <= W1y && Starty == 1 && replY.length() < 8) {
replY = String(cvy) + "IY";
for (int k = replY.length(); k < 8; k++) {
replY = "0" + replY;
}
}
if (pvz <= W1z && Startz == 2 || pvz <= W1z && Startz == 1 && replZ.length() < 8) {
replZ = String(cvz) + "IZ";
for (int k = replZ.length(); k < 8; k++) {
replZ = "0" + replZ;
}
}
if (replX.length() == 8 && replY.length() == 8 && replZ.length() == 8) {
diss = replX + replY + replZ;
replX = "";
replY = "";
replZ = "";
UdpTrans();
}
}
if (Startx == 1 && Starty == 1 && Startz == 1 && R == 0) {
diss = "REQpos"; //request next position
R = 2;
UdpTrans();
}
if (Qx.length() == 8 && Qy.length() == 8 && Qz.length() == 8) {
diss = Qx + Qy + Qz;
Qx = "";
Qy = "";
Qz = "";
UdpTrans();
}
}
void UdpRec() {
int packetSize = udp.parsePacket();
if (packetSize) {
udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
disc = packetBuffer;
if (disc.length() > 20) {
Q = 24;
//Serial.println(disc);
Qx = disc.substring(0, 8);
Qy = disc.substring(8, 16);
Qz = disc.substring(16, 24);
disc = "";
if (Qx.length() > 0) {
decodex();
}
if (Qy.length() > 0) {
decodey();
}
if (Qz.length() > 0) {
decodez();
}
}
}
}
void UdpTrans() {
udp.beginPacket(udp.remoteIP(), udp.remotePort());
udp.println(diss);
udp.endPacket();
diss = "";
}
void Timer() {
cm = millis(); // cm = current Millis, pm = previous Millis, iv = intervalTime
if ((cm - pm) > iv) {
pm = cm;
if (RampTimez < 5000) {
++RampTimez;
}
if (Tmrx < 10000) {
++Tmrx;
}
if (Tmry < 10000) {
++Tmry;
}
if (Tmrz < 10000) {
++Tmrz;
}
if (getEncData < 5000) {
++getEncData;
}
//error handling for unexpected serial function interupt, below
if (Startx == 0 && getEncData > (timeWinSlo2) + 20) {
getEncData = 0;
}
if (Startx > 0 && getEncData > (timeWinFst2) + 20) {
getEncData = 0;
}
}
}
void positionX () {
if (cpx < cvx && Startx < 20) {
mcp1.digitalWrite(directionx, LOW); // Reverse was High, changed encoder wiring
}
if (cpx > cvx && Startx < 20) {
mcp1.digitalWrite(directionx, HIGH); // Forward was Low
}
// One Inch = 1024 pulses
if (Startx == 2) {
mcp1.digitalWrite(axisXenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepx, HIGH);
}
//start stepping
if (pvx >= R1x) {
mcp1.digitalWrite(step_ms1x, LOW); // full step
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
}
if (pvx < R1x && pvx >= R2x) {
mcp1.digitalWrite(step_ms1x, HIGH); // half Step
}
if (pvx < R2x && pvx >= R3x) {
mcp1.digitalWrite(step_ms2x, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms1x, LOW);
}
if (pvx < R3x && pvx >= R4x) {
mcp1.digitalWrite(step_ms2x, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms1x, HIGH);
}
if (pvx <= W1x && Startx == 2) {
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
// don't transmit until all axis are in position
//replX = String(cvx) + "IX"; // transmitt X position to computer
//for(int k = replX.length();k < 8;k++){replX = "0" + replX;}
Startx = 1; // standby - was running but now enabled and standing by for next command
}
Tmrx = 0;
}
void positionY () {
if (cpy < cvy && Starty < 20) {
mcp1.digitalWrite(directiony, LOW); // Reverse was High, changed encoder wiring
}
if (cpy > cvy && Starty < 20) {
mcp1.digitalWrite(directiony, HIGH); // Forward was Low
}
// One Inch = 1046 pulses
if (Starty == 2) {
mcp1.digitalWrite(axisYenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepy, HIGH);
}
if (pvy >= R1y) {
mcp1.digitalWrite(step_ms1y, LOW); // full step
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
}
if (pvy < R1y && pvy >= R2y) {
mcp1.digitalWrite(step_ms1y, HIGH); // half Step
}
if (pvy < R2y && pvy >= R3y) {
mcp1.digitalWrite(step_ms2y, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms3y, LOW);
}
if (pvy < R3y && pvy >= R4y) {
mcp1.digitalWrite(step_ms2y, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms3y, HIGH);
}
if (pvy <= W1y && Starty == 2) {
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
//replY = String(cvy) + "IY";
//for(int k = replY.length();k < 8;k++){replY = "0" + replY;}
Starty = 1; // standby - was running but now enabled and standing by for next command
}
Tmry = 0;
}
void positionZ () {
if (cpz < cvz && Startz < 20) {
mcp1.digitalWrite(directionz, LOW); // Reverse was High, changed encoder wiring
}
if (cpz > cvz && Startz < 20) {
mcp1.digitalWrite(directionz, HIGH); // Forward was Low
}
// One Inch = 2512 pulses
if (Startz == 2) {
mcp1.digitalWrite(axisZenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepz, HIGH);
}
if (pvz >= R1z) {
mcp1.digitalWrite(step_ms1z, LOW); // full step
mcp1.digitalWrite(step_ms2z, LOW);
mcp1.digitalWrite(step_ms3z, LOW);
}
if (pvz < R1z && pvz >= R2z) {
mcp1.digitalWrite(step_ms1z, HIGH); // half Step
}
if (pvz < R2z && pvz >= R3z) {
mcp1.digitalWrite(step_ms2z, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms1z, LOW);
}
if (pvz < R3z && pvz >= R4z) {
mcp1.digitalWrite(step_ms2z, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms1z, HIGH);
}
if (pvz <= W1z && Startz == 2) {
mcp1.digitalWrite(takeastepz, LOW);
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
//replZ = String(cvz) + "IZ"; // transmitt Z position to computer
//for(int k = replZ.length();k < 8;k++){replZ = "0" + replZ;}
Startz = 1; // standby - was running but now enabled and standing by for next command
}
Tmrz = 0;;
}
void Reffx() {
if (Startx == 20) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(axisXenable, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
} // full step
if (Startx == 20 && xhome == 0) {
Startx = 21;
Tmrx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (Startx == 21 && xhome == 0 && Tmrx > 20) {
mcp1.digitalWrite(axisXenable, LOW);
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(step_ms2x, HIGH);
mcp1.digitalWrite(step_ms1x, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepx, HIGH);
}
if (Startx == 21 && xhome == 1) {
mcp1.digitalWrite(takeastepx, LOW);
}
if (Startx == 21 && xhome == 1 && Tmrx > 20) {
Startx = 0;
SoftSer.println("CLX!");
replX = "000000RX";
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
mcp1.digitalWrite(directionx, HIGH);
}
}
void Reffy() {
if (Starty == 20) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(axisYenable, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
} // full step
if (Starty == 20 && yhome == 0) {
Starty = 21;
Tmry = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (Starty == 21 && yhome == 0 && Tmry > 20) {
mcp1.digitalWrite(axisYenable, LOW);
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(step_ms2y, HIGH);
mcp1.digitalWrite(step_ms1y, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepy, HIGH);
}
if (Starty == 21 && yhome == 1) {
mcp1.digitalWrite(takeastepy, LOW);
}
if (Starty == 21 && yhome == 1 && Tmry > 20) {
Starty = 0;
SoftSer.println("CLY!");
replY = "000000RY";
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
mcp1.digitalWrite(directiony, HIGH);
}
}
void Reffz() {
if (Startz == 20) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(axisZenable, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
} // full step
if (Startz == 20 && zhome == 0) {
Startz = 21;
Tmrz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (Startz == 21 && zhome == 0 && Tmrz > 20) {
mcp1.digitalWrite(axisZenable, LOW);
mcp1.digitalWrite(directionz, HIGH);
mcp2.digitalWrite(step_ms2z, HIGH);
mcp2.digitalWrite(step_ms1z, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepz, HIGH);
}
if (Startz == 21 && zhome == 1) {
mcp1.digitalWrite(takeastepz, LOW);
}
if (Startz == 21 && zhome == 1 && Tmrz > 20) {
Startz = 0;
SoftSer.println("CLZ!");
replZ = "000000RZ";
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
mcp1.digitalWrite(directionz, HIGH);
}
}
void jogX() {
// remote computer
if (Startx > 29) {
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
} // full step
if (Startx == 35 && JogFwdx == 1) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (Startx == 45 && JogRevx == 1) {
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
//Local
if (JogFwdx == 0 && Startx == 30) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (JogFwdx == 1 && Startx == 30) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogRevx == 0 && Startx == 40) {
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (JogRevx == 1 && Startx == 40) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogRevx == 1 && Startx == 40 || JogFwdx == 1 && Startx == 30) {
replX = "0000011X";
}
}
void jogY() {
// remote computer
if (Starty > 29) {
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
} // full step
if (Starty == 35 && JogFwdy == 1) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (Starty == 45 && JogRevy == 1) {
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
//Local
if (JogFwdy == 0 && Starty == 30) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (JogFwdy == 1 && Starty == 30) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogRevy == 0 && Starty == 40) {
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (JogRevy == 1 && Starty == 40) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogRevy == 1 && Starty == 40 || JogFwdy == 1 && Starty == 30) {
replY = "0000011Y";
}
}
void jogZ() {
// remote computer
if (Startz > 29) {
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
} // full step
if (Startz == 35 && JogDwnz == 1) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (Startz == 45 && JogUpz == 1) {
mcp1.digitalWrite(directionz, HIGH);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
//Local
if (JogDwnz == 0 && Startz == 30) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (JogDwnz == 1 && Startz == 30) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogUpz == 0 && Startz == 40) {
mcp1.digitalWrite(directionz, HIGH);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (JogUpz == 1 && Startz == 40) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogUpz == 1 && Startz == 40 || JogDwnz == 1 && Startz == 30) {
diss = "0000011Z";
}
}
void getio() {
exteotx = safex.digitalRead(0);//End of Travel Extend
reteotx = safex.digitalRead(1);//End of Travel Retract
xhome = safex.digitalRead(2);//Optical home switch
xspare = safex.digitalRead(3);//spare
Stopx = safex.digitalRead(4);//Stop PB
JogFwdx = safex.digitalRead(5);//Jog FWD PB
gohomex = safex.digitalRead(6);//reference PB
JogRevx = safex.digitalRead(7);//Jog REV PB
exteoty = safey.digitalRead(0);//End of Travel Extend
reteoty = safey.digitalRead(1);//End of Travel Retract
yhome = safey.digitalRead(2);//Optical home switch
yspare = safey.digitalRead(3);//spare
Stopy = safey.digitalRead(4);//Stop PB
JogFwdy = safey.digitalRead(5);//Jog FWD PB
gohomey = safey.digitalRead(6);//reference PB
JogRevy = safey.digitalRead(7);//Jog REV PB
exteotz = safez.digitalRead(0);//End of Travel Extend
reteotz = safez.digitalRead(1);//End of Travel Retract
zhome = safez.digitalRead(2);//Optical home switch
zspare = safez.digitalRead(3);//spare
Stopz = safez.digitalRead(4);//Stop PB
JogDwnz = safez.digitalRead(5);//Jog DWN PB
gohomez = safez.digitalRead(6);//reference PB
JogUpz = safez.digitalRead(7);//Jog UP PB
}
void RealSer1() {
String xx;
String yy;
String zz;
if (SoftSer.available() > 0) {
disc = SoftSer.readStringUntil('!');
disc.trim();
if (disc.length() >= 21) {
if (readAll == 5) {
diss = disc;
UdpTrans();
readAll = 0;
}
xx = disc.substring(0, 8);
yy = disc.substring(8, 16);
zz = disc.substring(16, 24);
disc = "";
if (xx.length() > 0) {
cvx = xx.toInt();
xx = "";
}
if (yy.length() > 0) {
cvy = yy.toInt();
yy = "";
}
if (zz.length() > 0) {
cvz = zz.toInt();
zz = "";
}
}
}
}
void decodex() {
if (Qx.endsWith("RGX")) {
readAll = 5;
Qx = "";
}
if (Qx.endsWith("ITX")) {
SoftSer.println("ITX!");
Qx = "Inital-X";
}
if (Qx.endsWith("CLX")) {
SoftSer.println("CLX!");
Qx = "Clr-EncX";
}
if (Qx.endsWith("R1X")) {
R1x = Qx.toInt();
}
if (Qx.endsWith("R2X")) {
R2x = Qx.toInt();
}
if (Qx.endsWith("R3X")) {
R3x = Qx.toInt();
}
if (Qx.endsWith("R4X")) {
R4x = Qx.toInt();
}
if (Qx.endsWith("D1X")) {
D1x = Qx.toInt();
}
if (Qx.endsWith("D2X")) {
D2x = Qx.toInt();
}
if (Qx.endsWith("W1X")) {
W1x = Qx.toInt();
}
if (Qx.endsWith("W2X")) {
W2x = Qx.toInt();
}
if (Qx.endsWith("20X")) {
Qx = String(cvx) + "EX"; // Get Encoder Position
}
if (Qx.endsWith("22X")) {
Startx = 2; //Run
Qx = "22X";
}
if (Qx.endsWith("21X")) {
Startx = 1; //Auto
Qx = "21X";
}
if (Qx.endsWith("32X")) {
Startx = 35; //Jog fwd
mcp1.digitalWrite(directionx, LOW);
Qx = "32X";
}
if (Qx.endsWith("42X")) {
Startx = 45; //Jog rev
mcp1.digitalWrite(directionx, HIGH);
Qx = "42X";
}
if (Qx.endsWith("52X")) {
Startx = 0; //Reference
Refx = 5;
mcp1.digitalWrite(directionx, LOW);
Qx = "52X";
}
if (Qx.endsWith("11X")) {
Startx = 0; //Stop
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
Qx = "11X";
}
if (Qx.endsWith("A")) {
cpx = Qx.toInt();
Qx = (String(cpx) + "A");
}
if (Qx.endsWith("PX")) {
Qx = String(pvx) + "PX";
}
if (Qx.length() > 2 ) {
for (int k = Qx.length(); k < 8; k++) {
Qx = "0" + Qx;
}
}
}
void decodey() {
if (Qy.endsWith("ITY")) {
SoftSer.println("ITY!");
Qy = "";
diss = "Inital-Y";
}
if (Qy.endsWith("CLY")) {
SoftSer.println("CLY!");
Qy = "";
diss = "Clr-EncY";
}
if (Qy.endsWith("R1Y")) {
R1y = Qy.toInt();
}
if (Qy.endsWith("R2Y")) {
R2y = Qy.toInt();
}
if (Qy.endsWith("R3Y")) {
R3y = Qy.toInt();
}
if (Qy.endsWith("R4Y")) {
R4y = Qy.toInt();
}
if (Qy.endsWith("D1Y")) {
D1y = Qy.toInt();
}
if (Qy.endsWith("D2Y")) {
D2y = Qy.toInt();
}
if (Qy.endsWith("W1Y")) {
W1y = Qy.toInt();
}
if (Qy.endsWith("W2Y")) {
W2y = Qy.toInt();
}
if (Qy.endsWith("20Y")) {
Qy = String(cvy) + "EY"; // Get Encoder Position
}
if (Qy.endsWith("22Y")) {
Starty = 2; //Run
Qy = "22Y";
}
if (Qy.endsWith("21Y")) {
Starty = 1; //Auto
Qy = "21Y";
}
if (Qy.endsWith("32Y")) {
Starty = 35; //Jog fwd
mcp1.digitalWrite(directiony, LOW);
Qy = "32Y";
}
if (Qy.endsWith("42Y")) {
Starty = 45; //Jog rev
mcp1.digitalWrite(directiony, HIGH);
Qy = "42Y";
}
if (Qy.endsWith("52Y")) {
Starty = 0; //Reference
Refy = 5;
mcp1.digitalWrite(directiony, LOW);
Qy = "52Y";
}
if (Qy.endsWith("11Y")) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
Qy = "11Y";
}
if (Qy.endsWith("B")) {
cpy = Qy.toInt();
Qy = (String(cpy) + "B");
}
if (Qy.endsWith("PY")) {
Qy = String(pvy) + "PY";
}
if (Qy.length() > 2) {
for (int k = Qy.length(); k < 8; k++) {
Qy = "0" + Qy;
}
}
}
void decodez() {
if (Qz.endsWith("ITZ")) {
SoftSer.println("ITZ!");
Qz = "Inital-Z";
}
if (Qz.endsWith("CLZ")) {
SoftSer.println("CLZ!");
Qz = "Clr-EncZ";
}
if (Qz.endsWith("R1Z")) {
R1z = Qz.toInt();
}
if (Qz.endsWith("R2Z")) {
R2z = Qz.toInt();
}
if (Qz.endsWith("R3Z")) {
R3z = Qz.toInt();
}
if (Qz.endsWith("R4Z")) {
R4z = Qz.toInt();
}
if (Qz.endsWith("D1Z")) {
D1z = Qz.toInt();
}
if (Qz.endsWith("D2Z")) {
D2z = Qz.toInt();
}
if (Qz.endsWith("D3Z")) {
D3z = Qz.toInt();
}
if (Qz.endsWith("D4Z")) {
D4z = Qz.toInt();
}
if (Qz.endsWith("W1Z")) {
W1z = Qz.toInt();
}
if (Qz.endsWith("W2Z")) {
W2z = Qz.toInt();
}
if (Qz.endsWith("15Z")) {
mcp2.digitalWrite(SpinRun, HIGH);
Qz = "15Z";
}
if (Qz.endsWith("18Z")) {
mcp2.digitalWrite(SpinRun, LOW);
SpindleStop = 0;
Startz = 0;
Qz = "18Z";
}
if (Qz.endsWith("20Z")) {
Qz = String(cvz) + "EZ"; // Get Encoder Position
}
if (Qz.endsWith("22Z")) {
Startz = 2; //Run
Qz = "22Z";
}
if (Qz.endsWith("21Z")) {
Startz = 1; //Auto
Qz = "21Z";
}
if (Qz.endsWith("32Z")) {
Startz = 35; //Jog fwd
mcp1.digitalWrite(directionz, LOW);
Qz = "32Z";
}
if (Qz.endsWith("42Z")) {
Startz = 45; //Jog rev
mcp1.digitalWrite(directionz, HIGH);
Qz = "42Z";
}
if (Qz.endsWith("52Z")) {
Startz = 0; //Reference
Refz = 5;
digitalWrite(directionz, LOW);
Qz = "52Z";
}
if (Qz.endsWith("11Z")) {
Startz = 0; //Stop
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
Qz = "11Z";
}
if (Qz.endsWith("C")) {
cpz = Qz.toInt();
Qz = (String(cpz) + "C");
}
if (Qz.endsWith("PZ")) {
Qz = String(pvz) + "PZ";
}
if (Qz.length() > 2) {
for (int k = Qz.length(); k < 8; k++) {
Qz = "0" + Qz;
}
}
}
[[code]
#include <Adafruit_MCP23017.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SoftwareSerial.h>
//#include <Adafruit_MCP23X17.h>
#include <Adafruit_PCF8574.h>
#include <SPI.h>
#include <Wire.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 15, 220);
unsigned int localPort = 51000; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
EthernetUDP udp;
Adafruit_MCP23017 mcp1; // I2C
Adafruit_MCP23017 mcp2; // I2C
Adafruit_PCF8574 safex;// I2C
Adafruit_PCF8574 safey;// I2C
Adafruit_PCF8574 safez;// I2C
SoftwareSerial SoftSer(2, 3);
//mcp1
const int takeastepx = 0;
const int directionx = 1;
const int axisXenable = 2;
const int step_ms1x = 3;
const int step_ms2x = 4;
const int step_ms3x = 5;
const int takeastepy = 6;
const int directiony = 7;
const int axisYenable = 8;
const int step_ms1y = 9;
const int step_ms2y = 10;
const int step_ms3y = 11;
const int takeastepz = 12;
const int directionz = 13;
const int axisZenable = 14;
//mcp2
const int step_ms1z = 0;
const int step_ms2z = 1;
const int step_ms3z = 2;
const int Spin = 3;
const int SpinRun = 4;
String disc = "";
String diss = "";
String Qx = "";
String Qy = "";
String Qz = "";
String replX = "";
String replY = "";
String replZ = "";
int SpindleStop = 0;
int Startx = 0;
int Starty = 0;
int Startz = 0;
int Refx = 0;
int Refy = 0;
int Refz = 0;
unsigned long cm = 0;
unsigned long pm = 0;
long iv = 15;
long cvx = 0; //X-axis Encoder Counts
long cvy = 0; //Y-axis Encoder Counts
long cvz = 0; //Z-axis Encoder Counts
long pvx = 0; //X-axis process variable Counts to position
long pvy = 0; //Y-axis process variable Counts to position
long pvz = 0; //Z-axis process variable Counts to position
long cpx = 0; //Recieved command for X-axis position
long cpy = 0; //Recieved command for Y-axis position
long cpz = 0; //Recieved command for Z-axis position
int xspare = 0;
int yspare = 0;
int zspare = 0;
int gohomex = 0;
int JogFwdx = 0;
int JogRevx = 0;
int Stopx = 0;
int exteotx = 0;
int reteotx = 0;
int xhome = 0;
int gohomey = 0;
int JogFwdy = 0;
int JogRevy = 0;
int Stopy = 0;
int exteoty = 0;
int reteoty = 0;
int yhome = 0;
int gohomez = 0;
int JogDwnz = 0;
int JogUpz = 0;
int Stopz = 0;
int exteotz = 0;
int reteotz = 0;
int zhome = 2;
int Tmrx = 0;
int Tmry = 0;
int Tmrz = 0;
int Nopz = 0;
int R1x = 100;
int R2x = 50;
int R3x = 10;
int R4x = 3;
int D1x = 1000;
int D2x = 750;
int W1x = 2;
int W2x = 4;
int R1y = 100;
int R2y = 50;
int R3y = 10;
int R4y = 3;
int D1y = 1000;
int D2y = 750;
int W1y = 2;
int W2y = 4;
int R1z = 100;
int R2z = 50;
int R3z = 10;
int R4z = 3;
int D1z = 1000;
int D2z = 750;
int D3z = 500;
int D4z = 250;
int D5z = 75;
int D6z = 35;
int D7z = 20;
int D8z = 10;
int W1z = 2;
int W2z = 4;
int R = 0;
int LL = 0;
int timeWinSlo1 = 125;
int timeWinSlo2 = 126;
int timeWinFst1 = 10;
int timeWinFst2 = 11;
int readAll = 0;
int getEncData = 0;
int SerNot = 0;
int RampTimez = 0;
int Q = 0;
void setup() {
// Remember Serial has the Encoder position data
SPI.begin();
Ethernet.init(10);
Ethernet.begin(mac, ip);
Wire.begin();
mcp1.begin(0x03);
mcp2.begin(0x04);
safex.begin(0x20, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safex.pinMode(p, INPUT_PULLUP);
}
safey.begin(0x21, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safey.pinMode(p, INPUT_PULLUP);
}
safez.begin(0x22, &Wire);// I2C
for (uint8_t p = 0; p < 8; p++) {
safez.pinMode(p, INPUT_PULLUP);
}
mcp1.pinMode(takeastepx, OUTPUT);// step pin X
mcp1.pinMode(takeastepy, OUTPUT);// step pin Y
mcp1.pinMode(takeastepz, OUTPUT);// step pin Z
mcp1.pinMode(directionx, OUTPUT);// stepperX direction
mcp1.pinMode(directiony, OUTPUT);// stepperY direction
mcp1.pinMode(directionz, OUTPUT);// stepperZ direction
mcp1.pinMode(axisXenable, OUTPUT);// Enable stepper X movement
mcp1.pinMode(axisYenable, OUTPUT);// Enable stepper Y movement
mcp1.pinMode(axisZenable, OUTPUT);// Enable stepper Z movement
mcp1.pinMode(step_ms1x, OUTPUT);// stepper step select ms1x
mcp1.pinMode(step_ms2x, OUTPUT);// stepper step select ms2x
mcp1.pinMode(step_ms3x, OUTPUT);// stepper step select ms3x
mcp1.pinMode(step_ms1y, OUTPUT);// stepper step select ms1y
mcp1.pinMode(step_ms2y, OUTPUT);// stepper step select ms2y
mcp1.pinMode(step_ms3y, OUTPUT);// stepper step select ms3y
mcp2.pinMode(step_ms1z, OUTPUT);// stepper step select ms1z
mcp2.pinMode(step_ms2z, OUTPUT);// stepper step select ms2z
mcp2.pinMode(step_ms3z, OUTPUT);// stepper step select ms3z
mcp2.pinMode(Spin, OUTPUT);// command to run Spindle Motor
mcp2.pinMode(SpinRun, INPUT);//Indication of spindle motor Powered
mcp2.pullUp(SpinRun, HIGH);
//mcp2.pinMode(SpinRun, INPUT);
mcp1.digitalWrite(step_ms1x, LOW); //was 8
mcp1.digitalWrite(step_ms1y, LOW); //was 2
mcp2.digitalWrite(step_ms1z, LOW); //was 12
mcp1.digitalWrite(step_ms2x, LOW); //was 7
mcp1.digitalWrite(step_ms2y, LOW); //was 1
mcp2.digitalWrite(step_ms2z, LOW); //was 11
mcp1.digitalWrite(step_ms3x, LOW); //was 5
mcp1.digitalWrite(step_ms3y, LOW); //was 0
mcp2.digitalWrite(step_ms3z, LOW); //was 10
mcp1.digitalWrite(takeastepx, LOW);// takeastepx
mcp1.digitalWrite(takeastepy, LOW);// takeastepy
mcp1.digitalWrite(takeastepz, LOW);// takeastepz
Serial.begin(9600);
SoftSer.begin(9600);//was 57600
udp.begin(localPort);
}
void loop() {
Timer();
timeWinSlo1 = 126;
if (Startx == 2 && R == 2 || Starty == 2 && R == 2) {
R = 0;
}
if (Startx == 0 && getEncData == timeWinSlo1 && getEncData < timeWinSlo2) {
SoftSer.println("000RD!");
getEncData = 0;
}
if (Startx > 0 && getEncData == timeWinFst1 && getEncData < timeWinFst2) {
SoftSer.println("000RD!");
getEncData = 0;
}
UdpRec();
RealSer1();
getio();
if (cvx > cpx) {
pvx = (cvx - cpx);
}
if (cpx > cvx) {
pvx = (cpx - cvx);
}
//start of X axis
if (Tmrx < 20 && Stopx == 1) {
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
//pvx = process variable, cpx = Command Position
if (pvx > W2x && Startx == 1 && Refx == 0) {
Startx = 2;
}
if (Refx == 1) {
Reffx(); //remote Ref == 5 comes from remote
}
if (gohomex == 0 && Refx == 0 || Refx == 5) {
mcp1.digitalWrite(directionx, LOW); //manual or remote
Refx = 1;
Startx = 20;
cpx = -1;
}
if (Stopx == 0 && exteotx == 1 && reteotx == 1) {
Startx = 2;
mcp1.digitalWrite(takeastepx, HIGH);
}
if (Stopx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (exteotx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (reteotx == 0) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogFwdx == 0) {
Startx = 30;
}
if (JogRevx == 0) {
Startx = 40;
}
if (exteotx == 1 && reteotx == 1) {
if (Startx == 2 && Refx == 0) {
positionX();
}
if (Startx == 35 || Startx == 45 || Startx == 30 || Startx == 40) {
jogX();
}
}
//start of Y axis
// determine position movement for Y axis
if (cvy > cpy) {
pvy = (cvy - cpy);
}
if (cpy > cvy) {
pvy = (cpy - cvy);
}
if (Tmry < 20 && Stopy == 1) {
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
//pvy = process variable, cpy = Command Position
if (pvy > W2y && Starty == 1 && Refy == 0) {
Starty = 2;
}
if (Refy == 1) {
Reffy(); //remote Ref == 5 comes from remote
}
//manual or remote
if (gohomey == 0 && Refy == 0 || Refy == 5) {
mcp1.digitalWrite(directiony, LOW);
Refy = 1;
Starty = 20;
cpy = -1;
}
if (Stopy == 0 && exteoty == 1 && reteoty == 1) {
Starty = 2;
mcp1.digitalWrite(takeastepy, HIGH);
}
if (Stopy == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (exteoty == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (reteoty == 0) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogFwdy == 0) {
Starty = 30;
}
if (JogRevy == 0) {
Starty = 40;
}
if (exteoty == 1 && reteoty == 1) {
if (Starty == 2 && Refy == 0) {
positionY();
}
if (Starty == 35 || Starty == 45 || Starty == 30 || Starty == 40) {
jogY();
}
}
//start of Z axis
// determine position movement for Z axis
if (cvz > cpz) {
pvz = (cvz - cpz);
}
if (cpz > cvz) {
pvz = (cpz - cvz);
}
if (mcp2.digitalRead(Spin) == 0 && SpindleStop == 0) {
SpindleStop = 1;
diss = "25Z";
UdpTrans();
}
if (mcp2.digitalRead(Spin) == 1 && SpindleStop == 1) {
diss = "27Z";
SpindleStop = 0;
UdpTrans();
}
if (Tmrz < 20 && Stopz == 1) {
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
//pvz = process variable, cpz = Command Position
if (pvz > W2z && Startz == 1 && Refz == 0) {
Startz = 2;
}
if (Refz == 1) {
Reffz(); //remote Refz == 5 comes from remote
}
//manual or remote
if (gohomez == 0 && Refz == 0 || Refz == 5) {
mcp1.digitalWrite(directionz, LOW);
Refz = 1;
Startz = 20;
cpz = -1;
}
if (Stopz == 0 && exteotz == 1 && reteotz == 1) {
Startz = 2;
mcp1.digitalWrite(takeastepz, HIGH);
}
if (Stopz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (exteotz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (reteotz == 0) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogDwnz == 0) {
Startz = 30;
}
if (JogUpz == 0) {
Startz = 40;
}
if (exteotz == 1 && reteotz == 1) {
if (Startz == 2 && Refz == 0) {
positionZ();
}
if (Startz == 35 || Startz == 45 || Startz == 30 || Startz == 40) {
jogZ();
}
}
if (readAll == 5) {
if (pvx <= W1x && Startx == 2 || pvx <= W1x && Startx == 1 && replX.length() < 8) {
replX = String(cvx) + "IX";
for (int k = replX.length(); k < 8; k++) {
replX = "0" + replX;
}
}
if (pvy <= W1y && Starty == 2 || pvy <= W1y && Starty == 1 && replY.length() < 8) {
replY = String(cvy) + "IY";
for (int k = replY.length(); k < 8; k++) {
replY = "0" + replY;
}
}
if (pvz <= W1z && Startz == 2 || pvz <= W1z && Startz == 1 && replZ.length() < 8) {
replZ = String(cvz) + "IZ";
for (int k = replZ.length(); k < 8; k++) {
replZ = "0" + replZ;
}
}
if (replX.length() == 8 && replY.length() == 8 && replZ.length() == 8) {
diss = replX + replY + replZ;
replX = "";
replY = "";
replZ = "";
UdpTrans();
}
}
if (Startx == 1 && Starty == 1 && Startz == 1 && R == 0) {
diss = "REQpos"; //request next position
R = 2;
UdpTrans();
}
if (Qx.length() == 8 && Qy.length() == 8 && Qz.length() == 8) {
diss = Qx + Qy + Qz;
Qx = "";
Qy = "";
Qz = "";
UdpTrans();
}
}
void UdpRec() {
int packetSize = udp.parsePacket();
if (packetSize) {
udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
disc = packetBuffer;
if (disc.length() > 20) {
Q = 24;
//Serial.println(disc);
Qx = disc.substring(0, 8);
Qy = disc.substring(8, 16);
Qz = disc.substring(16, 24);
disc = "";
if (Qx.length() > 0) {
decodex();
}
if (Qy.length() > 0) {
decodey();
}
if (Qz.length() > 0) {
decodez();
}
}
}
}
void UdpTrans() {
udp.beginPacket(udp.remoteIP(), udp.remotePort());
udp.println(diss);
udp.endPacket();
diss = "";
}
void Timer() {
cm = millis(); // cm = current Millis, pm = previous Millis, iv = intervalTime
if ((cm - pm) > iv) {
pm = cm;
if (RampTimez < 5000) {
++RampTimez;
}
if (Tmrx < 10000) {
++Tmrx;
}
if (Tmry < 10000) {
++Tmry;
}
if (Tmrz < 10000) {
++Tmrz;
}
if (getEncData < 5000) {
++getEncData;
}
//error handling for unexpected serial function interupt, below
if (Startx == 0 && getEncData > (timeWinSlo2) + 20) {
getEncData = 0;
}
if (Startx > 0 && getEncData > (timeWinFst2) + 20) {
getEncData = 0;
}
}
}
void positionX () {
if (cpx < cvx && Startx < 20) {
mcp1.digitalWrite(directionx, LOW); // Reverse was High, changed encoder wiring
}
if (cpx > cvx && Startx < 20) {
mcp1.digitalWrite(directionx, HIGH); // Forward was Low
}
// One Inch = 1024 pulses
if (Startx == 2) {
mcp1.digitalWrite(axisXenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepx, HIGH);
}
//start stepping
if (pvx >= R1x) {
mcp1.digitalWrite(step_ms1x, LOW); // full step
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
}
if (pvx < R1x && pvx >= R2x) {
mcp1.digitalWrite(step_ms1x, HIGH); // half Step
}
if (pvx < R2x && pvx >= R3x) {
mcp1.digitalWrite(step_ms2x, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms1x, LOW);
}
if (pvx < R3x && pvx >= R4x) {
mcp1.digitalWrite(step_ms2x, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms1x, HIGH);
}
if (pvx <= W1x && Startx == 2) {
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
// don't transmit until all axis are in position
//replX = String(cvx) + "IX"; // transmitt X position to computer
//for(int k = replX.length();k < 8;k++){replX = "0" + replX;}
Startx = 1; // standby - was running but now enabled and standing by for next command
}
Tmrx = 0;
}
void positionY () {
if (cpy < cvy && Starty < 20) {
mcp1.digitalWrite(directiony, LOW); // Reverse was High, changed encoder wiring
}
if (cpy > cvy && Starty < 20) {
mcp1.digitalWrite(directiony, HIGH); // Forward was Low
}
// One Inch = 1046 pulses
if (Starty == 2) {
mcp1.digitalWrite(axisYenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepy, HIGH);
}
if (pvy >= R1y) {
mcp1.digitalWrite(step_ms1y, LOW); // full step
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
}
if (pvy < R1y && pvy >= R2y) {
mcp1.digitalWrite(step_ms1y, HIGH); // half Step
}
if (pvy < R2y && pvy >= R3y) {
mcp1.digitalWrite(step_ms2y, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms3y, LOW);
}
if (pvy < R3y && pvy >= R4y) {
mcp1.digitalWrite(step_ms2y, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms3y, HIGH);
}
if (pvy <= W1y && Starty == 2) {
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
//replY = String(cvy) + "IY";
//for(int k = replY.length();k < 8;k++){replY = "0" + replY;}
Starty = 1; // standby - was running but now enabled and standing by for next command
}
Tmry = 0;
}
void positionZ () {
if (cpz < cvz && Startz < 20) {
mcp1.digitalWrite(directionz, LOW); // Reverse was High, changed encoder wiring
}
if (cpz > cvz && Startz < 20) {
mcp1.digitalWrite(directionz, HIGH); // Forward was Low
}
// One Inch = 2512 pulses
if (Startz == 2) {
mcp1.digitalWrite(axisZenable, LOW); // Stepper A4988 enabled
mcp1.digitalWrite(takeastepz, HIGH);
}
if (pvz >= R1z) {
mcp1.digitalWrite(step_ms1z, LOW); // full step
mcp1.digitalWrite(step_ms2z, LOW);
mcp1.digitalWrite(step_ms3z, LOW);
}
if (pvz < R1z && pvz >= R2z) {
mcp1.digitalWrite(step_ms1z, HIGH); // half Step
}
if (pvz < R2z && pvz >= R3z) {
mcp1.digitalWrite(step_ms2z, HIGH); // 1/4 step
mcp1.digitalWrite(step_ms1z, LOW);
}
if (pvz < R3z && pvz >= R4z) {
mcp1.digitalWrite(step_ms2z, HIGH); // 1/8 step
mcp1.digitalWrite(step_ms1z, HIGH);
}
if (pvz <= W1z && Startz == 2) {
mcp1.digitalWrite(takeastepz, LOW);
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
//replZ = String(cvz) + "IZ"; // transmitt Z position to computer
//for(int k = replZ.length();k < 8;k++){replZ = "0" + replZ;}
Startz = 1; // standby - was running but now enabled and standing by for next command
}
Tmrz = 0;;
}
void Reffx() {
if (Startx == 20) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(axisXenable, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
} // full step
if (Startx == 20 && xhome == 0) {
Startx = 21;
Tmrx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (Startx == 21 && xhome == 0 && Tmrx > 20) {
mcp1.digitalWrite(axisXenable, LOW);
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(step_ms2x, HIGH);
mcp1.digitalWrite(step_ms1x, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepx, HIGH);
}
if (Startx == 21 && xhome == 1) {
mcp1.digitalWrite(takeastepx, LOW);
}
if (Startx == 21 && xhome == 1 && Tmrx > 20) {
Startx = 0;
SoftSer.println("CLX!");
replX = "000000RX";
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
mcp1.digitalWrite(directionx, HIGH);
}
}
void Reffy() {
if (Starty == 20) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(axisYenable, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
} // full step
if (Starty == 20 && yhome == 0) {
Starty = 21;
Tmry = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (Starty == 21 && yhome == 0 && Tmry > 20) {
mcp1.digitalWrite(axisYenable, LOW);
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(step_ms2y, HIGH);
mcp1.digitalWrite(step_ms1y, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepy, HIGH);
}
if (Starty == 21 && yhome == 1) {
mcp1.digitalWrite(takeastepy, LOW);
}
if (Starty == 21 && yhome == 1 && Tmry > 20) {
Starty = 0;
SoftSer.println("CLY!");
replY = "000000RY";
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
mcp1.digitalWrite(directiony, HIGH);
}
}
void Reffz() {
if (Startz == 20) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(axisZenable, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
} // full step
if (Startz == 20 && zhome == 0) {
Startz = 21;
Tmrz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (Startz == 21 && zhome == 0 && Tmrz > 20) {
mcp1.digitalWrite(axisZenable, LOW);
mcp1.digitalWrite(directionz, HIGH);
mcp2.digitalWrite(step_ms2z, HIGH);
mcp2.digitalWrite(step_ms1z, HIGH); // 1/8 step
mcp1.digitalWrite(takeastepz, HIGH);
}
if (Startz == 21 && zhome == 1) {
mcp1.digitalWrite(takeastepz, LOW);
}
if (Startz == 21 && zhome == 1 && Tmrz > 20) {
Startz = 0;
SoftSer.println("CLZ!");
replZ = "000000RZ";
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
mcp1.digitalWrite(directionz, HIGH);
}
}
void jogX() {
// remote computer
if (Startx > 29) {
mcp1.digitalWrite(step_ms1x, LOW);
mcp1.digitalWrite(step_ms2x, LOW);
mcp1.digitalWrite(step_ms3x, LOW);
} // full step
if (Startx == 35 && JogFwdx == 1) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (Startx == 45 && JogRevx == 1) {
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
//Local
if (JogFwdx == 0 && Startx == 30) {
mcp1.digitalWrite(directionx, LOW);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (JogFwdx == 1 && Startx == 30) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogRevx == 0 && Startx == 40) {
mcp1.digitalWrite(directionx, HIGH);
mcp1.digitalWrite(takeastepx, HIGH);
mcp1.digitalWrite(axisXenable, LOW);
}
if (JogRevx == 1 && Startx == 40) {
Startx = 0;
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
}
if (JogRevx == 1 && Startx == 40 || JogFwdx == 1 && Startx == 30) {
replX = "0000011X";
}
}
void jogY() {
// remote computer
if (Starty > 29) {
mcp1.digitalWrite(step_ms1y, LOW);
mcp1.digitalWrite(step_ms2y, LOW);
mcp1.digitalWrite(step_ms3y, LOW);
} // full step
if (Starty == 35 && JogFwdy == 1) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (Starty == 45 && JogRevy == 1) {
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
//Local
if (JogFwdy == 0 && Starty == 30) {
mcp1.digitalWrite(directiony, LOW);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (JogFwdy == 1 && Starty == 30) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogRevy == 0 && Starty == 40) {
mcp1.digitalWrite(directiony, HIGH);
mcp1.digitalWrite(takeastepy, HIGH);
mcp1.digitalWrite(axisYenable, LOW);
}
if (JogRevy == 1 && Starty == 40) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
}
if (JogRevy == 1 && Starty == 40 || JogFwdy == 1 && Starty == 30) {
replY = "0000011Y";
}
}
void jogZ() {
// remote computer
if (Startz > 29) {
mcp2.digitalWrite(step_ms1z, LOW);
mcp2.digitalWrite(step_ms2z, LOW);
mcp2.digitalWrite(step_ms3z, LOW);
} // full step
if (Startz == 35 && JogDwnz == 1) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (Startz == 45 && JogUpz == 1) {
mcp1.digitalWrite(directionz, HIGH);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
//Local
if (JogDwnz == 0 && Startz == 30) {
mcp1.digitalWrite(directionz, LOW);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (JogDwnz == 1 && Startz == 30) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogUpz == 0 && Startz == 40) {
mcp1.digitalWrite(directionz, HIGH);
mcp1.digitalWrite(takeastepz, HIGH);
mcp1.digitalWrite(axisZenable, LOW);
}
if (JogUpz == 1 && Startz == 40) {
Startz = 0;
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
}
if (JogUpz == 1 && Startz == 40 || JogDwnz == 1 && Startz == 30) {
diss = "0000011Z";
}
}
void getio() {
exteotx = safex.digitalRead(0);//End of Travel Extend
reteotx = safex.digitalRead(1);//End of Travel Retract
xhome = safex.digitalRead(2);//Optical home switch
xspare = safex.digitalRead(3);//spare
Stopx = safex.digitalRead(4);//Stop PB
JogFwdx = safex.digitalRead(5);//Jog FWD PB
gohomex = safex.digitalRead(6);//reference PB
JogRevx = safex.digitalRead(7);//Jog REV PB
exteoty = safey.digitalRead(0);//End of Travel Extend
reteoty = safey.digitalRead(1);//End of Travel Retract
yhome = safey.digitalRead(2);//Optical home switch
yspare = safey.digitalRead(3);//spare
Stopy = safey.digitalRead(4);//Stop PB
JogFwdy = safey.digitalRead(5);//Jog FWD PB
gohomey = safey.digitalRead(6);//reference PB
JogRevy = safey.digitalRead(7);//Jog REV PB
exteotz = safez.digitalRead(0);//End of Travel Extend
reteotz = safez.digitalRead(1);//End of Travel Retract
zhome = safez.digitalRead(2);//Optical home switch
zspare = safez.digitalRead(3);//spare
Stopz = safez.digitalRead(4);//Stop PB
JogDwnz = safez.digitalRead(5);//Jog DWN PB
gohomez = safez.digitalRead(6);//reference PB
JogUpz = safez.digitalRead(7);//Jog UP PB
}
void RealSer1() {
String xx;
String yy;
String zz;
if (SoftSer.available() > 0) {
disc = SoftSer.readStringUntil('!');
disc.trim();
if (disc.length() >= 21) {
if (readAll == 5) {
diss = disc;
UdpTrans();
readAll = 0;
}
xx = disc.substring(0, 8);
yy = disc.substring(8, 16);
zz = disc.substring(16, 24);
disc = "";
if (xx.length() > 0) {
cvx = xx.toInt();
xx = "";
}
if (yy.length() > 0) {
cvy = yy.toInt();
yy = "";
}
if (zz.length() > 0) {
cvz = zz.toInt();
zz = "";
}
}
}
}
void decodex() {
if (Qx.endsWith("RGX")) {
readAll = 5;
Qx = "";
}
if (Qx.endsWith("ITX")) {
SoftSer.println("ITX!");
Qx = "Inital-X";
}
if (Qx.endsWith("CLX")) {
SoftSer.println("CLX!");
Qx = "Clr-EncX";
}
if (Qx.endsWith("R1X")) {
R1x = Qx.toInt();
}
if (Qx.endsWith("R2X")) {
R2x = Qx.toInt();
}
if (Qx.endsWith("R3X")) {
R3x = Qx.toInt();
}
if (Qx.endsWith("R4X")) {
R4x = Qx.toInt();
}
if (Qx.endsWith("D1X")) {
D1x = Qx.toInt();
}
if (Qx.endsWith("D2X")) {
D2x = Qx.toInt();
}
if (Qx.endsWith("W1X")) {
W1x = Qx.toInt();
}
if (Qx.endsWith("W2X")) {
W2x = Qx.toInt();
}
if (Qx.endsWith("20X")) {
Qx = String(cvx) + "EX"; // Get Encoder Position
}
if (Qx.endsWith("22X")) {
Startx = 2; //Run
Qx = "22X";
}
if (Qx.endsWith("21X")) {
Startx = 1; //Auto
Qx = "21X";
}
if (Qx.endsWith("32X")) {
Startx = 35; //Jog fwd
mcp1.digitalWrite(directionx, LOW);
Qx = "32X";
}
if (Qx.endsWith("42X")) {
Startx = 45; //Jog rev
mcp1.digitalWrite(directionx, HIGH);
Qx = "42X";
}
if (Qx.endsWith("52X")) {
Startx = 0; //Reference
Refx = 5;
mcp1.digitalWrite(directionx, LOW);
Qx = "52X";
}
if (Qx.endsWith("11X")) {
Startx = 0; //Stop
mcp1.digitalWrite(takeastepx, LOW);
mcp1.digitalWrite(axisXenable, HIGH);
Qx = "11X";
}
if (Qx.endsWith("A")) {
cpx = Qx.toInt();
Qx = (String(cpx) + "A");
}
if (Qx.endsWith("PX")) {
Qx = String(pvx) + "PX";
}
if (Qx.length() > 2 ) {
for (int k = Qx.length(); k < 8; k++) {
Qx = "0" + Qx;
}
}
}
void decodey() {
if (Qy.endsWith("ITY")) {
SoftSer.println("ITY!");
Qy = "";
diss = "Inital-Y";
}
if (Qy.endsWith("CLY")) {
SoftSer.println("CLY!");
Qy = "";
diss = "Clr-EncY";
}
if (Qy.endsWith("R1Y")) {
R1y = Qy.toInt();
}
if (Qy.endsWith("R2Y")) {
R2y = Qy.toInt();
}
if (Qy.endsWith("R3Y")) {
R3y = Qy.toInt();
}
if (Qy.endsWith("R4Y")) {
R4y = Qy.toInt();
}
if (Qy.endsWith("D1Y")) {
D1y = Qy.toInt();
}
if (Qy.endsWith("D2Y")) {
D2y = Qy.toInt();
}
if (Qy.endsWith("W1Y")) {
W1y = Qy.toInt();
}
if (Qy.endsWith("W2Y")) {
W2y = Qy.toInt();
}
if (Qy.endsWith("20Y")) {
Qy = String(cvy) + "EY"; // Get Encoder Position
}
if (Qy.endsWith("22Y")) {
Starty = 2; //Run
Qy = "22Y";
}
if (Qy.endsWith("21Y")) {
Starty = 1; //Auto
Qy = "21Y";
}
if (Qy.endsWith("32Y")) {
Starty = 35; //Jog fwd
mcp1.digitalWrite(directiony, LOW);
Qy = "32Y";
}
if (Qy.endsWith("42Y")) {
Starty = 45; //Jog rev
mcp1.digitalWrite(directiony, HIGH);
Qy = "42Y";
}
if (Qy.endsWith("52Y")) {
Starty = 0; //Reference
Refy = 5;
mcp1.digitalWrite(directiony, LOW);
Qy = "52Y";
}
if (Qy.endsWith("11Y")) {
Starty = 0;
mcp1.digitalWrite(takeastepy, LOW);
mcp1.digitalWrite(axisYenable, HIGH);
Qy = "11Y";
}
if (Qy.endsWith("B")) {
cpy = Qy.toInt();
Qy = (String(cpy) + "B");
}
if (Qy.endsWith("PY")) {
Qy = String(pvy) + "PY";
}
if (Qy.length() > 2) {
for (int k = Qy.length(); k < 8; k++) {
Qy = "0" + Qy;
}
}
}
void decodez() {
if (Qz.endsWith("ITZ")) {
SoftSer.println("ITZ!");
Qz = "Inital-Z";
}
if (Qz.endsWith("CLZ")) {
SoftSer.println("CLZ!");
Qz = "Clr-EncZ";
}
if (Qz.endsWith("R1Z")) {
R1z = Qz.toInt();
}
if (Qz.endsWith("R2Z")) {
R2z = Qz.toInt();
}
if (Qz.endsWith("R3Z")) {
R3z = Qz.toInt();
}
if (Qz.endsWith("R4Z")) {
R4z = Qz.toInt();
}
if (Qz.endsWith("D1Z")) {
D1z = Qz.toInt();
}
if (Qz.endsWith("D2Z")) {
D2z = Qz.toInt();
}
if (Qz.endsWith("D3Z")) {
D3z = Qz.toInt();
}
if (Qz.endsWith("D4Z")) {
D4z = Qz.toInt();
}
if (Qz.endsWith("W1Z")) {
W1z = Qz.toInt();
}
if (Qz.endsWith("W2Z")) {
W2z = Qz.toInt();
}
if (Qz.endsWith("15Z")) {
mcp2.digitalWrite(SpinRun, HIGH);
Qz = "15Z";
}
if (Qz.endsWith("18Z")) {
mcp2.digitalWrite(SpinRun, LOW);
SpindleStop = 0;
Startz = 0;
Qz = "18Z";
}
if (Qz.endsWith("20Z")) {
Qz = String(cvz) + "EZ"; // Get Encoder Position
}
if (Qz.endsWith("22Z")) {
Startz = 2; //Run
Qz = "22Z";
}
if (Qz.endsWith("21Z")) {
Startz = 1; //Auto
Qz = "21Z";
}
if (Qz.endsWith("32Z")) {
Startz = 35; //Jog fwd
mcp1.digitalWrite(directionz, LOW);
Qz = "32Z";
}
if (Qz.endsWith("42Z")) {
Startz = 45; //Jog rev
mcp1.digitalWrite(directionz, HIGH);
Qz = "42Z";
}
if (Qz.endsWith("52Z")) {
Startz = 0; //Reference
Refz = 5;
digitalWrite(directionz, LOW);
Qz = "52Z";
}
if (Qz.endsWith("11Z")) {
Startz = 0; //Stop
mcp1.digitalWrite(takeastepz, LOW);
mcp1.digitalWrite(axisZenable, HIGH);
Qz = "11Z";
}
if (Qz.endsWith("C")) {
cpz = Qz.toInt();
Qz = (String(cpz) + "C");
}
if (Qz.endsWith("PZ")) {
Qz = String(pvz) + "PZ";
}
if (Qz.length() > 2) {
for (int k = Qz.length(); k < 8; k++) {
Qz = "0" + Qz;
}
}
}
[/code]]