reconnect feature added
after connection lost, Arduino will now reset and send Status again
This commit is contained in:
parent
0fdc117b74
commit
d2270c0fc9
@ -77,7 +77,7 @@ Communication Status = 'E' -read/Write -Pin State: 0:0
|
|||||||
int sInPinmap[] = {10};
|
int sInPinmap[] = {10};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define OUTPUTS //Use Arduino IO's as Outputs. Define how many Outputs you want in total and then which Pins you want to be Outputs.
|
//#define OUTPUTS //Use Arduino IO's as Outputs. Define how many Outputs you want in total and then which Pins you want to be Outputs.
|
||||||
#ifdef OUTPUTS
|
#ifdef OUTPUTS
|
||||||
const int Outputs = 2; //number of outputs
|
const int Outputs = 2; //number of outputs
|
||||||
int OutPinmap[] = {11,12};
|
int OutPinmap[] = {11,12};
|
||||||
@ -89,11 +89,11 @@ Communication Status = 'E' -read/Write -Pin State: 0:0
|
|||||||
int PwmOutPinmap[] = {12,11};
|
int PwmOutPinmap[] = {12,11};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define AINPUTS //Use Arduino ADC's as Analog Inputs. Define how many Analog Inputs you want in total and then which Pins you want to be Analog Inputs.
|
#define AINPUTS //Use Arduino ADC's as Analog Inputs. Define how many Analog Inputs you want in total and then which Pins you want to be Analog Inputs.
|
||||||
//Note that Analog Pin numbering is different to the Print on the PCB.
|
//Note that Analog Pin numbering is different to the Print on the PCB.
|
||||||
#ifdef AINPUTS
|
#ifdef AINPUTS
|
||||||
const int AInputs = 2;
|
const int AInputs = 1;
|
||||||
int AInPinmap[] = {0,2}; //Potentiometer for SpindleSpeed override
|
int AInPinmap[] = {0}; //Potentiometer for SpindleSpeed override
|
||||||
int smooth = 200; //number of samples to denoise ADC, try lower numbers on your setup 200 worked good for me.
|
int smooth = 200; //number of samples to denoise ADC, try lower numbers on your setup 200 worked good for me.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -113,19 +113,21 @@ Then in the Array, {which Pin, How many Positions}
|
|||||||
Note that Analog Pin numbering is different to the Print on the PCB.
|
Note that Analog Pin numbering is different to the Print on the PCB.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
//#define LPOTIS
|
#define LPOTIS
|
||||||
#ifdef LPOTIS
|
#ifdef LPOTIS
|
||||||
const int LPotis = 2;
|
const int LPotis = 2;
|
||||||
const int LPotiPins[LPotis][2] = {
|
const int LPotiPins[LPotis][2] = {
|
||||||
{2,9}, //Latching Knob Spindle Overdrive on A1, has 9 Positions
|
{1,9}, //Latching Knob Spindle Overdrive on A1, has 9 Positions
|
||||||
{3,4} //Latching Knob Feed Resolution on A2, has 4 Positions
|
{2,4} //Latching Knob Feed Resolution on A2, has 4 Positions
|
||||||
};
|
};
|
||||||
int margin = 20; //giving it some margin so Numbers dont jitter, make this number smaller if your knob has more than 50 Positions
|
int margin = 20; //giving it some margin so Numbers dont jitter, make this number smaller if your knob has more than 50 Positions
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define BINSEL //Support of an Rotating Knob that was build in my Machine. It encodes 32 Positions with 5 Pins in Binary. This will generate 32 Pins in LinuxCNC Hal.
|
|
||||||
|
|
||||||
|
#define BINSEL //Support of an Rotating Knob that was build in my Machine. It encodes 32 Positions with 5 Pins in Binary. This will generate 32 Pins in LinuxCNC Hal.
|
||||||
#ifdef BINSEL
|
#ifdef BINSEL
|
||||||
const int BinSelKnobPins[] = {27,28,31,29,30}; //1,2,4,8,16
|
const int BinSelKnobPins[] = {2,6,4,3,5}; //1,2,4,8,16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -351,6 +353,7 @@ unsigned long lastUpdateTime[JoySticks*2] = {0}; // Store the time of the last u
|
|||||||
unsigned long oldmillis = 0;
|
unsigned long oldmillis = 0;
|
||||||
unsigned long newcom = 0;
|
unsigned long newcom = 0;
|
||||||
unsigned long lastcom = 0;
|
unsigned long lastcom = 0;
|
||||||
|
int connectionState = 0;
|
||||||
|
|
||||||
#define STATE_CMD 0
|
#define STATE_CMD 0
|
||||||
#define STATE_IO 1
|
#define STATE_IO 1
|
||||||
@ -431,15 +434,7 @@ for(int col = 0; col < numCols; col++) {
|
|||||||
//Setup Serial
|
//Setup Serial
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
while (!Serial){}
|
while (!Serial){}
|
||||||
while (lastcom == 0){
|
comalive();
|
||||||
readCommands();
|
|
||||||
flushSerial();
|
|
||||||
Serial.println("E0:0");
|
|
||||||
delay(200);
|
|
||||||
#ifdef STATUSLED
|
|
||||||
StatLedErr(1000,1000);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -568,14 +563,41 @@ void readEncoders(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
void initialiseIO(){
|
||||||
|
|
||||||
|
}
|
||||||
void comalive(){
|
void comalive(){
|
||||||
|
if(lastcom == 0){ //no connection yet. send E0:0 periodicly and wait for response
|
||||||
|
while (lastcom == 0){
|
||||||
|
readCommands();
|
||||||
|
flushSerial();
|
||||||
|
Serial.println("E0:0");
|
||||||
|
delay(200);
|
||||||
|
#ifdef STATUSLED
|
||||||
|
StatLedErr(1000,1000);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
connectionState = 1;
|
||||||
|
flushSerial();
|
||||||
|
#ifdef DEBUG
|
||||||
|
Serial.println("first connect");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if(millis() - lastcom > timeout){
|
||||||
#ifdef STATUSLED
|
#ifdef STATUSLED
|
||||||
if(millis() - lastcom > timeout){
|
StatLedErr(500,200);
|
||||||
StatLedErr(500,200);
|
#endif
|
||||||
}
|
if(connectionState == 1){
|
||||||
else{
|
#ifdef DEBUG
|
||||||
|
Serial.println("disconnected");
|
||||||
|
#endif
|
||||||
|
connectionState = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
connectionState=1;
|
||||||
|
#ifdef STATUSLED
|
||||||
if(DLEDSTATUSLED == 1){
|
if(DLEDSTATUSLED == 1){
|
||||||
#ifdef DLED
|
#ifdef DLED
|
||||||
controlDLED(StatLedPin, 1);
|
controlDLED(StatLedPin, 1);
|
||||||
@ -584,13 +606,68 @@ void comalive(){
|
|||||||
else{
|
else{
|
||||||
digitalWrite(StatLedPin, HIGH);
|
digitalWrite(StatLedPin, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void reconnect(){
|
||||||
|
#ifdef DEBUG
|
||||||
|
Serial.println("reconnected");
|
||||||
|
#endif
|
||||||
|
#ifdef DEBUG
|
||||||
|
Serial.println("resending Data");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef INPUT
|
||||||
|
for (int x = 0; x < Inputs; x++){
|
||||||
|
InState[x]= -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SINPUTS
|
||||||
|
for (int x = 0; x < sInputs; x++){
|
||||||
|
soldInState[x]= -1;
|
||||||
|
togglesinputs[x] = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef AINPUTS
|
||||||
|
for (int x = 0; x < AInputs; x++){
|
||||||
|
oldAinput[x] = -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef LPOTIS
|
||||||
|
for (int x = 0; x < LPotis; x++){
|
||||||
|
oldLpoti[x] = -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef BINSEL
|
||||||
|
oldAbsEncState = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef INPUTS
|
||||||
|
readInputs(); //read Inputs & send data
|
||||||
|
#endif
|
||||||
|
#ifdef SINPUTS
|
||||||
|
readsInputs(); //read Inputs & send data
|
||||||
|
#endif
|
||||||
|
#ifdef AINPUTS
|
||||||
|
readAInputs(); //read Analog Inputs & send data
|
||||||
|
#endif
|
||||||
|
#ifdef LPOTIS
|
||||||
|
readLPoti(); //read LPotis & send data
|
||||||
|
#endif
|
||||||
|
#ifdef BINSEL
|
||||||
|
readAbsKnob(); //read ABS Encoder & send data
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
connectionState = 1;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void sendData(char sig, int pin, int state){
|
void sendData(char sig, int pin, int state){
|
||||||
@ -841,6 +918,9 @@ void commandReceived(char cmd, uint16_t io, uint16_t value){
|
|||||||
#endif
|
#endif
|
||||||
if(cmd == 'E'){
|
if(cmd == 'E'){
|
||||||
lastcom=millis();
|
lastcom=millis();
|
||||||
|
if(connectionState == 2){
|
||||||
|
reconnect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -853,11 +933,6 @@ void commandReceived(char cmd, uint16_t io, uint16_t value){
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//This Funktion checks if Received Command is valid. Insert your custom Letter here by inserting another , for example: "||cmd == 'X'"
|
|
||||||
int isCmdChar(char cmd){
|
|
||||||
if(cmd == 'O'||cmd == 'P'||cmd == 'E'||cmd == 'D') {return true;}
|
|
||||||
else{return false;}
|
|
||||||
}
|
|
||||||
|
|
||||||
void readCommands(){
|
void readCommands(){
|
||||||
byte current;
|
byte current;
|
||||||
@ -865,11 +940,9 @@ void readCommands(){
|
|||||||
current = Serial.read();
|
current = Serial.read();
|
||||||
switch(state){
|
switch(state){
|
||||||
case STATE_CMD:
|
case STATE_CMD:
|
||||||
if(isCmdChar(current)){
|
cmd = current;
|
||||||
cmd = current;
|
state = STATE_IO;
|
||||||
state = STATE_IO;
|
bufferIndex = 0;
|
||||||
bufferIndex = 0;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case STATE_IO:
|
case STATE_IO:
|
||||||
if(isDigit(current)){
|
if(isDigit(current)){
|
||||||
|
Loading…
Reference in New Issue
Block a user