Remote inc coolant nozzle control program
Dependencies: mbed reScale USBDevice
Dependents: Nozzle_inputs Nozzle_display
Diff: main.cpp
- Revision:
- 15:ce51026d8702
- Parent:
- 14:dd8d89133b28
- Child:
- 16:1e974964272e
diff -r dd8d89133b28 -r ce51026d8702 main.cpp --- a/main.cpp Sat Apr 13 20:38:22 2019 +0000 +++ b/main.cpp Sun Sep 15 18:41:03 2019 +0000 @@ -1,4 +1,4 @@ - #include "mbed.h" +#include "mbed.h" #include "Adafruit_ST7735.h" #include "RPG.h" #include "reScale.h" @@ -14,17 +14,17 @@ #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F -#define YELLOW 0xFFE0 +#define YELLOW 0xFFE0 #define WHITE 0xFFFF /* EEPROM Memory map: -1 - 50: N1 angles +1 - 50: N1 angles 51 - 100: Settings 101- 150: N2 angles 151- 200: Twitch settings 200- 250: unused -*/ +*/ #define currentToolAddress 51 #define numToolsAddress 52 @@ -54,7 +54,7 @@ int minServo = 500; reScale servo1Scale(-90,90,minServo,maxServo); // - PwmOut myServo(P1_13); //display board +PwmOut myServo(P1_13); //display board //PwmOut myServo(D4); //DigitalIn tUpButton(P2_11); @@ -70,1122 +70,1252 @@ int lastDownButton; int lastEncoderButton; - +int encoderMove = 0; int dirt = 0; -int main() { +int main() +{ // ************************************** SCREEN INIT ************************************************* - tft.initR(INITR_GREENTAB); // initialize a ST7735S chip, black tab - - tft.setRotation(3); - tft.fillScreen(BLACK); - tft.setCursor(30,120); - tft.setTextColor(BLUE); - tft.setTextWrap(false); - tft.printf("AccuBlast v1.1"); - - tft.setCursor(4, 4); - tft.setTextColor(WHITE); - tft.setTextSize(2); - tft.printf("N1"); - - tft.setCursor(80, 4); - tft.setTextColor(WHITE); - tft.setTextSize(2); - tft.printf("N2"); - - tft.setCursor(4, 28); - tft.setTextColor(WHITE); - tft.setTextSize(2); - tft.printf("T"); - - tft.setCursor(4, 50); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("Twitch:"); - - tft.setCursor(4, 65); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("Sync:"); - - tft.setCursor(4, 80); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("AUX 1:"); - - tft.setCursor(4, 95); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("AUX 2:"); - - tft.setCursor(4, 110); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("AUX 3:"); - - tft.setCursor(75, 95); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("Num Tls"); - - tft.setCursor(75, 110); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("Num Noz"); - - tft.setCursor(75, 50); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("N1 dir:"); - - tft.setCursor(75, 65); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("N2 dir:"); + tft.initR(INITR_GREENTAB); // initialize a ST7735S chip, black tab + + tft.setRotation(3); + tft.fillScreen(BLACK); + tft.setCursor(30,120); + tft.setTextColor(BLUE); + tft.setTextWrap(false); + tft.printf("AccuBlast v1.3"); + + tft.setCursor(4, 4); + tft.setTextColor(WHITE); + tft.setTextSize(2); + tft.printf("N1"); + + tft.setCursor(80, 4); + tft.setTextColor(WHITE); + tft.setTextSize(2); + tft.printf("N2"); + + tft.setCursor(4, 28); + tft.setTextColor(WHITE); + tft.setTextSize(2); + tft.printf("T"); + + tft.setCursor(4, 50); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("Twitch:"); + + tft.setCursor(4, 65); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("Sync:"); + + tft.setCursor(4, 80); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("AUX 1:"); + + tft.setCursor(4, 95); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("AUX 2:"); + + tft.setCursor(4, 110); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("AUX 3:"); + + tft.setCursor(75, 95); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("Num Tls"); + + tft.setCursor(75, 110); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("Num Noz"); + + tft.setCursor(75, 50); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("N1 dir:"); + + tft.setCursor(75, 65); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("N2 dir:"); + + tft.setCursor(75, 80); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("version:"); - tft.setCursor(75, 80); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("version:"); - - // ************************************************************************************************************** - int version = 0; // 0= basic, 1=pro - int lastVersion = 99; - - int sync = 0; // sync setting for N1 and N1 - int lastSync = 99; - int syncSpread = 0; - - int n1Dir = 0; // direction of knob for N1 - int lastN1Dir = 99; - - int n2Dir = 0; // direction of knob for N2 - int lastN2Dir = 99; +// ************************************************************************************************************** + int version = 0; // 0= basic, 1=pro + int lastVersion = 99; + + int sync = 0; // sync setting for N1 and N1 + int lastSync = 99; + int syncSpread = 0; + int syncFlag =0; ///// for count/ sync = 2 issue. 2019-09-11 + + int n1Dir = 0; // direction of knob for N1 + int lastN1Dir = 99; + + int n2Dir = 0; // direction of knob for N2 + int lastN2Dir = 99; + + int index = 0; - int index = 0; - - int count = 0; - int maxCount = 12; //max number of menu items - int lastCount = 99; - - int twitch = 0; - int lastTwitch = 300; - int lastTwitchMove = 0; - int twitchStart = 0; // has twitching begun? - int twitchDirection = 0; // 0 is up, 1 is down. - int maxTwitch = 0; - int minTwitch = 0; + int count = 0; + int maxCount = 12; //max number of menu items + int lastCount = 99; -int tw1 = 5; // stages of servo write to control speed of sweep. 11.11 Ms = 1 degree -int tw2 = 10; -int tw3 = 15; + int twitch = 0; + int lastTwitch = 300; + int lastTwitchMove = 0; + int twitchStart = 0; // has twitching begun? + int twitchDirection = 0; // 0 is up, 1 is down. + int maxTwitch = 0; + int minTwitch = 0; + + int tw1 = 5; // stages of servo write to control speed of sweep. 11.11 Ms = 1 degree + int tw2 = 10; + int tw3 = 15; + + int twReadMs = 100; // interval of twitch changes us. + + //************* Pull previous setting from eeprom ******************* -int twReadMs = 100; // interval of twitch changes us. - - //************* Pull previous setting from eeprom ******************* - - char tempToolNo = 0; // last tool in spindle - eeprom.read(currentToolAddress, &tempToolNo); - int currentToolNo = (int)tempToolNo; - - char tempNumTools = 0; // number of tools in ATC - eeprom.read(numToolsAddress, &tempNumTools); - int numTools = (int)tempNumTools; - - char tempNumNoz = 0; // number of nozzles installed - eeprom.read(numNozAddress, &tempNumNoz); - int numNoz = (int)tempNumNoz; - - char tempLastAngle = 0; // last angle of last tool in spindle N1 - eeprom.read(currentToolNo, &tempLastAngle); - int lastAngle = (int)tempLastAngle; - lastAngle = lastAngle - 90; // Not storing signed int, so signed value is 45 less than what was stored to memory. - - char tempLastAngleN2 = 0; // last angle of last tool in spindle - eeprom.read(currentToolNo+100, &tempLastAngleN2); - int lastAngleN2 = (int)tempLastAngleN2; - lastAngleN2 = lastAngleN2 - 90; // Not storing signed int, so signed value is 45 less than what was stored to memory. - - char tempLastTwitch = 0; // last Twitch setting for the current tool in spindle - eeprom.read(currentToolNo + 150, &tempLastTwitch); - twitch = (int)tempLastTwitch; // should be 1, 2 or 3. - - char tempLastVersion = 0; // version of system. 0=basic, 1=pro - eeprom.read(versionAddress, &tempLastVersion); - version = (int)tempLastVersion; - - char tempLastSync = 0; // previous sync setting - eeprom.read(syncAddress, &tempLastSync); - sync = (int)tempLastSync; - - char tempLastN1Dir = 0; // previous N1 knob direction setting - eeprom.read(n1DirAddress, &tempLastN1Dir); - n1Dir = (int)tempLastN1Dir; - + char tempToolNo = 0; // last tool in spindle + eeprom.read(currentToolAddress, &tempToolNo); + int currentToolNo = (int)tempToolNo; + + char tempNumTools = 0; // number of tools in ATC + eeprom.read(numToolsAddress, &tempNumTools); + int numTools = (int)tempNumTools; + + char tempNumNoz = 0; // number of nozzles installed + eeprom.read(numNozAddress, &tempNumNoz); + int numNoz = (int)tempNumNoz; + + char tempLastAngle = 0; // last angle of last tool in spindle N1 + eeprom.read(currentToolNo, &tempLastAngle); + int lastAngle = (int)tempLastAngle; + lastAngle = lastAngle - 90; // Not storing signed int, so signed value is 45 less than what was stored to memory. + + char tempLastAngleN2 = 0; // last angle of last tool in spindle + eeprom.read(currentToolNo+100, &tempLastAngleN2); + int lastAngleN2 = (int)tempLastAngleN2; + lastAngleN2 = lastAngleN2 - 90; // Not storing signed int, so signed value is 45 less than what was stored to memory. + + char tempLastTwitch = 0; // last Twitch setting for the current tool in spindle + eeprom.read(currentToolNo + 150, &tempLastTwitch); + twitch = (int)tempLastTwitch; // should be 1, 2 or 3. + + char tempLastVersion = 0; // version of system. 0=basic, 1=pro + eeprom.read(versionAddress, &tempLastVersion); + version = (int)tempLastVersion; + + char tempLastSync = 0; // previous sync setting + eeprom.read(syncAddress, &tempLastSync); + sync = (int)tempLastSync; + + char tempLastN1Dir = 0; // previous N1 knob direction setting + eeprom.read(n1DirAddress, &tempLastN1Dir); + n1Dir = (int)tempLastN1Dir; + char tempLastN2Dir = 0; // previous N2 knob direction setting - eeprom.read(n2DirAddress, &tempLastN2Dir); - n2Dir = (int)tempLastN2Dir; - - - /*EEprom test over 2 digits: - int test1 = 150; - eeprom.write(199, test1); - wait(1); -char tempN2char = 0; -eeprom.read(199, &tempN2char); -int tempN2 = (int)tempN2char; - tft.setCursor(130,120); - tft.setTextColor(RED); - tft.setTextSize(1); - tft.printf("%d", tempN2); - */ - - - //******************** Button debounce ********************************* - + eeprom.read(n2DirAddress, &tempLastN2Dir); + n2Dir = (int)tempLastN2Dir; - backButton.mode(PullUp); // button pull up - //tDownButton.mode(PullUp); // button pull up - encoderButton.mode(PullUp); - encoderFalseButton.mode(PullUp); - aButton.mode(PullUp); - -t.start(); // starts timer -lastBackButton = t.read_ms(); -lastDownButton = t.read_ms(); -lastEncoderButton = t.read_ms(); - - //**************************************************************************** - - int lastToolNo = 99; - int lastNumTools = -1; // trigger to write eeprom value for number of tools - - int lastNumNoz = 0; //trigger display for number of nozzles after startup - - int n1Pos = lastAngle; //Set servo to last known postition prior to power off - int lastN1Pos = 150; - - int n2Pos = lastAngleN2; - int lastN2Pos = 150; - - int servo1Pos = 0; - - // RPG rpg1(P2_2,P1_20,P0_23); // RPG (PinName pA, PinName pB, PinName pPB)P0_23 is unconnected!! ; - //mRotaryEncoder Enc(P2_2,P1_20,P0_23, PullUp, 500); - mRotaryEncoder Enc(P1_20,P2_2,P0_23, PullUp, 1000); - - myServo.period_ms(20); + /*EEprom test over 2 digits: + int test1 = 150; + eeprom.write(199, test1); + wait(1); + char tempN2char = 0; + eeprom.read(199, &tempN2char); + int tempN2 = (int)tempN2char; + tft.setCursor(130,120); + tft.setTextColor(RED); + tft.setTextSize(1); + tft.printf("%d", tempN2); + */ + + + //******************** Button debounce ********************************* + + + + backButton.mode(PullUp); // button pull up +//tDownButton.mode(PullUp); // button pull up + encoderButton.mode(PullUp); + encoderFalseButton.mode(PullUp); + aButton.mode(PullUp); + + t.start(); // starts timer + lastBackButton = t.read_ms(); + lastDownButton = t.read_ms(); + lastEncoderButton = t.read_ms(); + +//**************************************************************************** + + int lastToolNo = 99; + int lastNumTools = -1; // trigger to write eeprom value for number of tools + + int lastNumNoz = 0; //trigger display for number of nozzles after startup + + int n1Pos = lastAngle; //Set servo to last known postition prior to power off + int lastN1Pos = 150; -/* - char t1Ang = 200; - char t1Read = 0; - - eeprom.write(1, t1Ang); - wait(1); - eeprom.read(1, &t1Read); - + int n2Pos = lastAngleN2; + int lastN2Pos = 150; + + int servo1Pos = 0; + + +// RPG rpg1(P2_2,P1_20,P0_23); // RPG (PinName pA, PinName pB, PinName pPB)P0_23 is unconnected!! ; +//mRotaryEncoder Enc(P2_2,P1_20,P0_23, PullUp, 500); + mRotaryEncoder Enc(P1_20,P2_2,P0_23, PullUp, 1000); + + myServo.period_ms(20); + + /* + char t1Ang = 200; + char t1Read = 0; + + eeprom.write(1, t1Ang); + wait(1); + eeprom.read(1, &t1Read); + - tft.setCursor(30,110); - tft.setTextColor(WHITE); - tft.setTextWrap(true); - // tft.printf("%s\r\n",t1Read); - tft.printf("%d", currentTool); - */ - - uint8_t c = 0; // for 485 link - - - int serialToolNumber = 0; - int stage = 0; // for serial parsing - int Tens = 0; - int Ones = 0; - - dir = 0; - - wait(2); - Serial device(P0_14, P0_13, 19200); // RS 485 TX RX? - + tft.setCursor(30,110); + tft.setTextColor(WHITE); + tft.setTextWrap(true); + // tft.printf("%s\r\n",t1Read); + tft.printf("%d", currentTool); + */ + + uint8_t c = 0; // for 485 link + + + int serialToolNumber = 0; + int stage = 0; // for serial parsing + int Tens = 0; + int Ones = 0; + + dir = 0; + + wait(2); + Serial device(P0_14, P0_13, 19200); // RS 485 TX RX? + while(1) { - - - - /* - while (device.readable()) - { - c = device.getc(); + + + + /* + while (device.readable()) + { + c = device.getc(); + + + if (c == '+'){ + currentToolNo = currentToolNo +1; + if (currentToolNo > numTools){ + currentToolNo = 1; + } + } + + else if (c == '-'){ + currentToolNo = currentToolNo - 1; + if (currentToolNo > 1){ + currentToolNo = numTools; + } + } + } + */ + + /* + while (device.readable()) + { + + + c = device.getc(); + + if (c == 'M'){ + // stage = 1; - - if (c == '+'){ - currentToolNo = currentToolNo +1; - if (currentToolNo > numTools){ - currentToolNo = 1; - } - } - - else if (c == '-'){ - currentToolNo = currentToolNo - 1; - if (currentToolNo > 1){ - currentToolNo = numTools; - } - } - } - */ - - /* - while (device.readable()) - { - - - c = device.getc(); - - if (c == 'M'){ - // stage = 1; - - c = device.getc(); - if (c == '+'){ - - // tft.setTextColor(WHITE); - // tft.setCursor(100, 100); - // tft.printf("%d", c); - currentToolNo = currentToolNo +1; - if (currentToolNo > numTools){ - currentToolNo = 1; - } - } - - else if (c == '-'){ - currentToolNo = currentToolNo - 1; - if (currentToolNo < 1){ - currentToolNo = numTools; - } - } - - } - } - - */ - - - -//myled = 1; - -if (t.read() > 1200){ // timer can only hold 30 min, so reset after 20 -t.reset(); -lastBackButton = t.read_ms(); -lastDownButton = t.read_ms(); -lastEncoderButton = t.read_ms(); -} + c = device.getc(); + if (c == '+'){ + + // tft.setTextColor(WHITE); + // tft.setCursor(100, 100); + // tft.printf("%d", c); + currentToolNo = currentToolNo +1; + if (currentToolNo > numTools){ + currentToolNo = 1; + } + } + + else if (c == '-'){ + currentToolNo = currentToolNo - 1; + if (currentToolNo < 1){ + currentToolNo = numTools; + } + } + + } + } + + */ + + + +//myled = 1; + + if (t.read() > 1200) { // timer can only hold 30 min, so reset after 20 + t.reset(); + lastBackButton = t.read_ms(); + lastDownButton = t.read_ms(); + lastEncoderButton = t.read_ms(); + } -if (backButton == 0){ //Back button was pressed so back to default selection - count = 0; - } - -if (encoderButton == 0){ -if (t.read_ms() > (lastEncoderButton + 50)){ // from 200 -count = count + 1; //Reset count if PB pressed -} - if (count > maxCount){ - count = 0; - } -lastEncoderButton = t.read_ms(); - - if (count > maxCount){ - count = 0; - } - } + if (backButton == 0) { //Back button was pressed so back to default selection + count = 0; + } + + if (encoderButton == 0) { + if (t.read_ms() > (lastEncoderButton + 50)) { // from 200 + count = count + 1; //Reset count if PB pressed + } + if (count > maxCount) { + count = 0; + } + lastEncoderButton = t.read_ms(); + + if (count > maxCount) { + count = 0; + } + } + + +//**************************************************************************************** + + if (version == 0) { //Basic runs the servo direct from the display unit + if (twitch == 0) { + tw.stop(); + twitchStart = 0; + twitchDirection = 0; + servo1Pos = servo1Scale.from(n1Pos); + } + + if (twitch > 0) { + if (twitchStart == 0) { + tw.start(); // start timer for nozzle sweep + servo1Pos = servo1Scale.from(n1Pos); + lastTwitchMove = tw.read_ms(); // store time of last nozzle movement + minTwitch = servo1Pos; // store original servo postion for bottom of sweep + maxTwitch = servo1Pos + 1000; // 11.11mS per degree of sweep, 55 = 5 degrees of sweep. This should be a viariable set on the display. + twitchStart = 1; + } + if ((twitchStart == 1) && (tw.read_ms() > (lastTwitchMove + twReadMs))) { + if (twitchDirection == 0) { //going up + servo1Pos = servo1Pos + 100; // add variable amount of uS to the servo signal + + tft.setCursor(130,120); + tft.setTextColor(RED); + tft.setTextSize(1); + tft.printf("%d", servo1Pos); + + + if (servo1Pos > maxServo) { + servo1Pos = maxServo; + twitchDirection = 1; //reverse direction + } + if (servo1Pos > maxTwitch) { + servo1Pos = maxTwitch; + twitchDirection = 1; //reverse direction + } + lastTwitchMove = tw.read_ms(); + } + + if (twitchDirection == 1) { // going down + servo1Pos = servo1Pos - 100; // add variable amount of Ms to the servo signal + if (servo1Pos < minServo) { + servo1Pos = minServo; + twitchDirection = 0; //reverse direction + } + if (servo1Pos < minTwitch) { + servo1Pos = minTwitch; + twitchDirection = 0; //reverse direction + } + lastTwitchMove = tw.read_ms(); + } + } + } + + myServo.pulsewidth_us(servo1Pos); + } + + +//********************** update display values ********************************************** + + + if (currentToolNo != lastToolNo) { + /* + tft.fillRect(103, 2, 55,25, BLACK); + tft.setCursor(105, 4); + */ + tft.setCursor(22, 28); + tft.setTextColor(BLACK); + tft.setTextSize(2); + tft.printf("%d", lastToolNo); + tft.setTextColor(WHITE); + //tft.setTextSize(2); + // tft.printf("T"); + tft.setCursor(22,28); + tft.printf("%d", currentToolNo); + + tempLastAngle = 0; + eeprom.read(currentToolNo, &tempLastAngle); + lastAngle = (int)tempLastAngle; + lastAngle = lastAngle - 90; // Not storing signed int, so signed value is 90 less than what was stored to memory. + n1Pos = lastAngle; + + tempLastAngleN2 = 0; + eeprom.read(currentToolNo+100, &tempLastAngleN2); + int lastAngleN2 = (int)tempLastAngleN2; + lastAngleN2 = lastAngleN2 - 90; // Not storing signed int, so signed value is 45 less than what was stored to memory. + n2Pos = lastAngleN2; + + if (count == 0) { // if knob is on N1 adjust and ATC changes tools, update enc value) + Enc.Set(n1Pos); // test for ATC following issue! + } + + eeprom.write(currentToolAddress, currentToolNo); + wait(0.1); + tempLastTwitch = 0; + eeprom.read(currentToolNo + 150, &tempLastTwitch); // pull up previous twitch setting. + twitch = (int)tempLastTwitch; + lastToolNo = currentToolNo; + } + + + if (n1Pos != lastN1Pos) { + tft.setCursor(40, 4); + tft.setTextColor(BLACK); + tft.setTextSize(2); + tft.printf("%d", lastN1Pos); + tft.setCursor(40,4); + tft.setTextColor(GREEN); + tft.setTextSize(2); + tft.printf("%d", n1Pos); + eeprom.write(currentToolNo, n1Pos + 90); // store new angle in eeprom, add 90 because its an unsigned value. + //wait(0.1); // adjusted from 1 + dir=1; + device.printf("N"); + device.printf("%d", n1Pos + 190); //send over RS485 add 190 so no negative values and always 3 digits. + //device.printf("N245"); // TEST!!! + // tft.setCursor(100, 50); + // tft.setTextSize(2); + // tft.printf("%d", n1Pos + 145); + wait(0.05); + dir=0; + + //Enc.Set(n1Pos); // test!! + + lastN1Pos = n1Pos; + syncFlag =1; // set the flag after lastN1Pos has run once to allow REV sync setting in count ==0 2019-09-11 + } + + if (n2Pos != lastN2Pos && numNoz == 2) { + tft.setCursor(115, 4); + tft.setTextColor(BLACK); + tft.setTextSize(2); + tft.printf("%d", lastN2Pos); + tft.setCursor(115, 4); + tft.setTextColor(GREEN); + tft.setTextSize(2); + tft.printf("%d", n2Pos); + eeprom.write(currentToolNo +100, n2Pos + 90); // store new angle in eeprom, add 90 because its an unsigned value. + //wait(0.1); // adjusted from 1 + dir=1; + device.printf("N"); + device.printf("%d", n2Pos + 390); //send over RS485 add 390 so no negative values and always 3 digits. + //device.printf("N245"); // TEST!!! + // tft.setCursor(100, 50); + // tft.setTextSize(2); + // tft.printf("%d", n1Pos + 145); + wait(0.05); + dir=0; + lastN2Pos = n2Pos; + } + + + if (numTools != lastNumTools) { + tft.setCursor(133, 95); + tft.setTextColor(BLACK); + tft.setTextSize(1); + tft.printf("%d", lastNumTools); + tft.setCursor(133,95); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("%d", numTools); + eeprom.write(numToolsAddress, numTools); // store new angle in eeprom, add 45 because its an unsigned value. + //wait(0.1); // adjusted from 1 + lastNumTools = numTools; + } + + if (numNoz != lastNumNoz) { + tft.setCursor(133, 110); + tft.setTextColor(BLACK); + tft.setTextSize(1); + tft.printf("%d", lastNumNoz); + tft.setCursor(133,110); + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("%d", numNoz); + eeprom.write(numNozAddress, numNoz); // store new angle in eeprom, add 45 because its an unsigned value. + //wait(0.1); // adjusted from 1 + + if (numNoz == 2) { + tft.setCursor(80, 4); + tft.setTextColor(WHITE); + tft.setTextSize(2); + tft.printf("N2"); + tft.drawRect(78,2,74,18,WHITE); + } + if (numNoz == 1) { + tft.setCursor(80, 4); + tft.setTextColor(BLACK); + tft.setTextSize(2); + tft.printf("N2"); + tft.setCursor(115, 4); + tft.printf("%d", n2Pos); + tft.drawRect(78,2,74,18,BLACK); + } + lastNumNoz = numNoz; + } + + + if (twitch != lastTwitch) { + tft.setCursor(52, 50); + tft.setTextColor(BLACK); + tft.setTextSize(1); + tft.printf("%d", lastTwitch); + tft.setCursor(52, 50); + tft.setTextColor(GREEN); + tft.setTextSize(1); + tft.printf("%d", twitch); + dir=1; + device.printf("W"); + device.printf("%d", twitch); + wait(0.05); + dir=0; + eeprom.write(currentToolNo +150, twitch); // store new twitch setting + lastN1Pos = 999; // trigger sending servo values to module + lastN2Pos = 999; + lastTwitch = twitch; + } + + if (sync != lastSync) { // + tft.setCursor(52, 65); + tft.setTextColor(BLACK); + tft.setTextSize(1); + if (lastSync == 0) { + tft.printf("OFF"); + } + if (lastSync == 1) { + tft.printf("ON"); + } + + tft.setCursor(52, 65); + tft.setTextSize(1); + if (sync == 0) { + tft.setTextColor(WHITE); + tft.printf("OFF"); + } + if (sync == 1) { + tft.setTextColor(GREEN); + tft.printf("ON"); + } + + + eeprom.write(syncAddress, sync); // store new twitch setting + syncSpread = (n2Pos - n1Pos); + + lastSync = sync; + + } + + if (n1Dir != lastN1Dir) { // + tft.setCursor(132, 50); + tft.setTextColor(BLACK); + tft.setTextSize(1); + if (lastN1Dir == 0) { + tft.printf("NOR"); + } + if (lastN1Dir == 1) { + tft.printf("REV"); + } + tft.setCursor(132, 50); + if (n1Dir == 0) { + tft.setTextColor(WHITE); + tft.printf("NOR"); + } + if (n1Dir == 1) { + tft.setTextColor(GREEN); + tft.printf("REV"); + } + eeprom.write(n1DirAddress, n1Dir); // store new twitch setting + lastN1Dir = n1Dir; + + dir=1; + device.printf("D1"); + device.printf("%d", n1Dir); + wait(0.05); + dir=0; + + } + + if (n2Dir != lastN2Dir) { // + tft.setCursor(132, 65); + tft.setTextColor(BLACK); + tft.setTextSize(1); + if (lastN2Dir == 0) { + tft.printf("NOR"); + } + if (lastN2Dir == 1) { + tft.printf("REV"); + } + tft.setCursor(132, 65); + if (n2Dir == 0) { + tft.setTextColor(WHITE); + tft.printf("NOR"); + } + if (n2Dir == 1) { + tft.setTextColor(GREEN); + tft.printf("REV"); + } + eeprom.write(n2DirAddress, n2Dir); // store new twitch setting + lastN2Dir = n2Dir; + + dir=1; + device.printf("D2"); + device.printf("%d", n2Dir); + wait(0.05); + dir=0; + + } + + if (version != lastVersion) { // + tft.setCursor(132, 80); + tft.setTextColor(BLACK); + tft.setTextSize(1); + if (lastVersion == 0) { + tft.printf("BAS"); + } + if (lastVersion == 1) { + tft.printf("PRO"); + } + tft.setCursor(132, 80); + if (version == 0) { + tft.setTextColor(WHITE); + tft.setTextSize(1); + tft.printf("BAS"); + } + if (version == 1) { + tft.setTextColor(RED); + tft.printf("PRO"); + } + eeprom.write(versionAddress, version); // store new twitch setting + lastVersion = version; + } // ************* Rectangles for identifying active selection ***************************** -if (count != lastCount){ - - if (count ==0){ - Enc.Set(n1Pos); - } - - else if (count == 1){ - Enc.Set(n2Pos); - } - - else if (count == 2){ - Enc.Set(currentToolNo); - } - - else if (count == 3){ - Enc.Set(twitch); - } - - else if (count == 4){ - Enc.Set(sync); - } - - else if (count == 8){ - Enc.Set(n1Dir); - } - - else if (count == 9){ - Enc.Set(n2Dir); - } - - else if (count == 10){ - Enc.Set(version); - } - - else if (count == 11){ - Enc.Set(numTools); - } + if (count != lastCount) { + + if (count ==0) { + Enc.Set(n1Pos); + lastN1Pos = n1Pos; ////*******************************2019-09-11 WAS FIX FOR SYNC REV RST = 90 + } + + else if (count == 1) { + Enc.Set(n2Pos); + } + + else if (count == 2) { + Enc.Set(currentToolNo); + } + + else if (count == 3) { + Enc.Set(twitch); + } + + else if (count == 4) { + Enc.Set(sync); + } + + else if (count == 8) { + Enc.Set(n1Dir); + } + + else if (count == 9) { + Enc.Set(n2Dir); + } + + else if (count == 10) { + Enc.Set(version); + } - else if (count == 12){ - Enc.Set(numNoz); - } + else if (count == 11) { + Enc.Set(numTools); + } + + else if (count == 12) { + Enc.Set(numNoz); + } + + + +// clear old boxes (white or black) + if (lastCount == 0) { + tft.drawRect(2,2,74,18,WHITE); + } + + else if ((lastCount == 1) && (numNoz == 2)) { + tft.drawRect(78,2,74,18,WHITE); + } + + else if (lastCount == 2) { + tft.drawRect(20,26,28,18,BLACK); + } + + else if (lastCount == 3) { + tft.drawRect(50,48,20,12,BLACK); + } + + else if (lastCount == 4) { + tft.drawRect(50,63,20,12,BLACK); + } + + else if (lastCount == 5) { + tft.drawRect(50,78,20,12,BLACK); + } + + else if (lastCount == 6) { + tft.drawRect(50,93,20,12,BLACK); + } - - - // clear old boxes (white or black) - if (lastCount == 0){ -tft.drawRect(2,2,74,18,WHITE); -} - -else if ((lastCount == 1) && (numNoz == 2)){ -tft.drawRect(78,2,74,18,WHITE); -} - -else if (lastCount == 2){ -tft.drawRect(20,26,28,18,BLACK); -} - -else if (lastCount == 3){ -tft.drawRect(50,48,20,12,BLACK); -} - -else if (lastCount == 4){ -tft.drawRect(50,63,20,12,BLACK); -} - -else if (lastCount == 5){ -tft.drawRect(50,78,20,12,BLACK); -} - -else if (lastCount == 6){ -tft.drawRect(50,93,20,12,BLACK); -} - -else if (lastCount == 7){ -tft.drawRect(50,108,20,12,BLACK); -} - -else if (lastCount == 8){ -tft.drawRect(130,48,20,12,BLACK); -} - -else if (lastCount == 9){ -tft.drawRect(130,63,20,12,BLACK); -} - -else if (lastCount == 10){ -tft.drawRect(130,78,20,12,BLACK); -} + else if (lastCount == 7) { + tft.drawRect(50,108,20,12,BLACK); + } + + else if (lastCount == 8) { + tft.drawRect(130,48,20,12,BLACK); + } + + else if (lastCount == 9) { + tft.drawRect(130,63,20,12,BLACK); + } + + else if (lastCount == 10) { + tft.drawRect(130,78,20,12,BLACK); + } -else if (lastCount == 11){ -tft.drawRect(130,93,20,12,BLACK); -} + else if (lastCount == 11) { + tft.drawRect(130,93,20,12,BLACK); + } + + else if (lastCount == 12) { + tft.drawRect(130,108,20,12,BLACK); + } + +// Set new box -else if (lastCount == 12){ -tft.drawRect(130,108,20,12,BLACK); -} + if (count == 0) { // N1 adjust + tft.drawRect(2,2,74,18,GREEN); + } + + else if ((count == 1) && (numNoz == 2)) { // N2 adjust + tft.drawRect(78,2,74,18,GREEN); + } + + else if (count == 2) { + tft.drawRect(20,26,28,18,GREEN); + } - // Set new box - -if (count == 0){ // N1 adjust -tft.drawRect(2,2,74,18,GREEN); -} + else if (count == 3) { + tft.drawRect(50,48,20,12,GREEN); + } -else if ((count == 1) && (numNoz == 2)){ // N2 adjust -tft.drawRect(78,2,74,18,GREEN); -} + else if (count == 4) { + tft.drawRect(50,63,20,12,GREEN); + } -else if (count == 2){ -tft.drawRect(20,26,28,18,GREEN); -} - -else if (count == 3){ -tft.drawRect(50,48,20,12,GREEN); -} + else if (count == 5) { + tft.drawRect(50,78,20,12,GREEN); + } -else if (count == 4){ -tft.drawRect(50,63,20,12,GREEN); -} + else if (count == 6) { + tft.drawRect(50,93,20,12,GREEN); + } -else if (count == 5){ -tft.drawRect(50,78,20,12,GREEN); -} + else if (count == 7) { + tft.drawRect(50,108,20,12,GREEN); + } -else if (count == 6){ -tft.drawRect(50,93,20,12,GREEN); -} + else if (count == 8) { + tft.drawRect(130,48,20,12,GREEN); + } -else if (count == 7){ -tft.drawRect(50,108,20,12,GREEN); -} - -else if (count == 8){ -tft.drawRect(130,48,20,12,GREEN); -} + else if (count == 9) { + tft.drawRect(130,63,20,12,GREEN); + } -else if (count == 9){ -tft.drawRect(130,63,20,12,GREEN); -} - -else if (count == 10){ -tft.drawRect(130,78,20,12,GREEN); -} + else if (count == 10) { + tft.drawRect(130,78,20,12,GREEN); + } -else if (count == 11){ -tft.drawRect(130,93,20,12,GREEN); -} + else if (count == 11) { + tft.drawRect(130,93,20,12,GREEN); + } -else if (count == 12){ -tft.drawRect(130,108,20,12,GREEN); -} + else if (count == 12) { + tft.drawRect(130,108,20,12,GREEN); + } -lastCount = count; -} + lastCount = count; + } - - //****************** ENCODER ACTIONS ************************************************ - if (count == 0){ // knob controls servo value -n1Pos = Enc.Get(); -if (sync == 1){ - n2Pos = (n1Pos + syncSpread); - if (n2Pos > 90){ - n2Pos = 90; - //Enc.Set(90); - } - if (n2Pos < -90){ - n2Pos = -90; - // Enc.Set(-90); - } - } - if (sync == 2){ - n2Pos = n2Pos + (lastN1Pos - n1Pos); - if (n2Pos > 90){ - n2Pos = 90; - //Enc.Set(90); - } - if (n2Pos < -90){ - n2Pos = -90; - // Enc.Set(-90); - } - } -if (n1Pos > 90){ - n1Pos = 90; - Enc.Set(90); - } - if (n1Pos < -90){ - n1Pos = -90; - Enc.Set(-90); - } - } - //*************************** - if (count == 1){ // knob controls servo value -n2Pos = Enc.Get(); -if (n2Pos > 90){ - n2Pos = 90; - Enc.Set(90); - } - if (n2Pos < -90){ - n2Pos = -90; - Enc.Set(-90); - } - } -//**************************** -if (count == 2){ //knob controls tool number + +//****************** ENCODER ACTIONS ************************************************ + if (count == 0) { // knob controls servo value + + if (n1Pos != Enc.Get()) { + //n1Pos = Enc.Get(); 2019-09-12 + if (sync == 0 && n1Dir ==0) { // n1 fwd + n1Pos = Enc.Get(); + } + + if (sync == 0 && n1Dir ==1) { // n1 rev + n1Pos = n1Pos + (n1Pos - Enc.Get()); + Enc.Set(n1Pos); + } + + + if (n1Pos > 90) { + n1Pos = 90; + Enc.Set(90); + } + + if (n1Pos < -90) { + n1Pos = -90; + Enc.Set(-90); + } + +//*** + + if (sync == 1 && n1Dir == 0 && n2Dir == 0) { // PASS 2019-09-12 + encoderMove = (Enc.Get() - n1Pos); // save direction change, positive or negative + if (encoderMove > 0 && n1Pos < 90 && n2Pos <90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = Enc.Get(); + n2Pos = n2Pos + encoderMove; + encoderMove =0; + //Enc.Set(n1Pos); + } + + if (encoderMove < 0 && n1Pos > -90 && n2Pos >-90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = Enc.Get(); + n2Pos = n2Pos + encoderMove; + encoderMove =0; + // Enc.Set(n1Pos); + } + Enc.Set(n1Pos); // reset encoder so it doesnt store counts past +90/ -90 + + } + + if (sync == 1 && n1Dir == 1 && n2Dir == 0) { + encoderMove = ( n1Pos - Enc.Get()); // save direction change, positive or negative + if (encoderMove > 0 && n1Pos > -90 && n2Pos <90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos + encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } -currentToolNo = Enc.Get(); -if (currentToolNo > numTools){ - currentToolNo = numTools; - } - if (currentToolNo < 1){ - currentToolNo = 1; - Enc.Set(1); - } - } - //**************************** -if (count == 3){ // Knob controls twitch setting - twitch = Enc.Get(); - if (twitch < 0){ - twitch = 0; - Enc.Set(0); - } - if (twitch > 3){ - twitch = 3; - Enc.Set(3); - } - } - //**************************** - if (count == 4){ // Knob controls sync setting. 1=off, 2=sync, 3=rev - sync = Enc.Get(); - if (sync < 0){ - sync= 0; - Enc.Set(0); - } - if (sync > 2){ - sync = 2; - Enc.Set(2); - } - } - //**************************** - // 5,6,7 AUX? - if (count == 8){ // knob controls the direction of rotation for N1 - n1Dir = Enc.Get(); - - if (n1Dir > 1){ - n1Dir = 1; - Enc.Set(1); - } - - if (n1Dir < 0){ - n1Dir =0; - Enc.Set(0); - } - } -//**************************** - if (count == 9){ // knob controls the direction of rotation for N2 - n2Dir = Enc.Get(); - - if (n2Dir > 1){ - n2Dir = 1; - Enc.Set(1); - } - - if (n2Dir < 0){ - n2Dir =0; - Enc.Set(0); - } - } -//**************************** - if (count == 10){ // knob controls the version -version = Enc.Get(); - - if (version > 1){ - version = 1; - Enc.Set(1); - } - - if (version < 0){ - version =0; - Enc.Set(0); - } - } - //**************************** - if (count == 11){ //knob controls tool number -numTools = Enc.Get(); -if (numTools > 50){ - numTools = 50; - Enc.Set(50); - } - if (numTools < 1){ - numTools = 1; - Enc.Set(1); - } - } -//**************************** - if (count == 12){ //knob controls tool number -numNoz = Enc.Get(); -if (numNoz> 2){ - numNoz = 2; - Enc.Set(2); - } - if (numNoz < 1){ - numNoz = 1; - Enc.Set(1); - } - } -//**************************************************************************************** + if (encoderMove < 0 && n1Pos < 90 && n2Pos > -90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos + encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } + Enc.Set(n1Pos); // reset encoder so it doesnt store counts past +90/ -90 + + } + + + if (sync == 1 && n1Dir == 0 && n2Dir == 1) { + encoderMove = (Enc.Get() - n1Pos); // save direction change, positive or negative + if (encoderMove < 0 && n1Pos > -90 && n2Pos <90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos + encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } + + if (encoderMove > 0 && n1Pos < 90 && n2Pos > -90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos + encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } + Enc.Set(n1Pos); // reset encoder so it doesnt store counts past +90/ -90 + } + + -if (version == 0){ //Basic runs the servo direct from the display unit -if (twitch == 0){ -tw.stop(); -twitchStart = 0; -twitchDirection = 0; -servo1Pos = servo1Scale.from(n1Pos); -} + if (sync == 1 && n1Dir == 1 && n2Dir == 1) { + encoderMove = (Enc.Get() - n1Pos); // save direction change, positive or negative + if (encoderMove > 0 && n1Pos > -90 && n2Pos >-90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos - encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } -if (twitch > 0){ - if (twitchStart == 0){ - tw.start(); // start timer for nozzle sweep - servo1Pos = servo1Scale.from(n1Pos); - lastTwitchMove = tw.read_ms(); // store time of last nozzle movement - minTwitch = servo1Pos; // store original servo postion for bottom of sweep - maxTwitch = servo1Pos + 1000; // 11.11mS per degree of sweep, 55 = 5 degrees of sweep. This should be a viariable set on the display. - twitchStart = 1; - } - if ((twitchStart == 1) && (tw.read_ms() > (lastTwitchMove + twReadMs))){ - if (twitchDirection == 0){ //going up - servo1Pos = servo1Pos + 100; // add variable amount of uS to the servo signal - - tft.setCursor(130,120); - tft.setTextColor(RED); - tft.setTextSize(1); - tft.printf("%d", servo1Pos); - - - if (servo1Pos > maxServo){ - servo1Pos = maxServo; - twitchDirection = 1; //reverse direction + if (encoderMove < 0 && n1Pos < 90 && n2Pos < 90) { // Move is positive // stop both nozzles once ONE reaches limit. + n1Pos = (n1Pos - encoderMove); + Enc.Set(n1Pos); + n2Pos = (n2Pos - encoderMove); + encoderMove=0; + } + Enc.Set(n1Pos); // reset encoder so it doesnt store counts past +90/ -90 + } + } - if (servo1Pos > maxTwitch){ - servo1Pos = maxTwitch; - twitchDirection = 1; //reverse direction - } - lastTwitchMove = tw.read_ms(); + if (n1Pos > 90) { + n1Pos =90; + } + if (n1Pos < -90) { + n1Pos = -90; } - - if (twitchDirection == 1){ // going down - servo1Pos = servo1Pos - 100; // add variable amount of Ms to the servo signal - if (servo1Pos < minServo){ - servo1Pos = minServo; - twitchDirection = 0; //reverse direction + if (n2Pos > 90) { + n2Pos =90; } - if (servo1Pos < minTwitch){ - servo1Pos = minTwitch; - twitchDirection = 0; //reverse direction - } - lastTwitchMove = tw.read_ms(); - } - } - } - -myServo.pulsewidth_us(servo1Pos); -} + if (n2Pos < -90) { + n2Pos = -90; + } + } -//********************** update display values ********************************************** +//*************************** + if (count == 1) { // knob controls servo value + + if (n2Pos != Enc.Get()) { + encoderMove = (Enc.Get() - n2Pos); // save direction change, positive or negative + + if (n2Dir == 0 && encoderMove >0 && n2Pos < 90){ // normal direction + n2Pos = n2Pos + encoderMove; + encoderMove=0; + } + if (n2Dir == 0 && encoderMove <0 && n2Pos > -90){ // normal direction + n2Pos = n2Pos + encoderMove; + encoderMove=0; + } - - if (currentToolNo != lastToolNo){ - /* - tft.fillRect(103, 2, 55,25, BLACK); - tft.setCursor(105, 4); - */ - tft.setCursor(22, 28); - tft.setTextColor(BLACK); - tft.setTextSize(2); - tft.printf("%d", lastToolNo); - tft.setTextColor(WHITE); - //tft.setTextSize(2); - // tft.printf("T"); - tft.setCursor(22,28); - tft.printf("%d", currentToolNo); - tempLastAngle = 0; - eeprom.read(currentToolNo, &tempLastAngle); - lastAngle = (int)tempLastAngle; - lastAngle = lastAngle - 90; // Not storing signed int, so signed value is 90 less than what was stored to memory. - n1Pos = lastAngle; - - if (count == 0){ // if knob is on N1 adjust and ATC changes tools, update enc value) - Enc.Set(n1Pos); // test for ATC following issue! + if (n2Dir == 1 && encoderMove <0 && n2Pos < 90){ // reverse direction + n2Pos = n2Pos - encoderMove; + encoderMove=0; + } + if (n2Dir == 1 && encoderMove >0 && n2Pos > -90){ // reverse direction + n2Pos = n2Pos - encoderMove; + encoderMove=0; + } + Enc.Set(n2Pos); // reset encoder so it doesnt store counts past +90/ -90 + if (n2Pos > 90){ + n2Pos = 90; + } + if (n2Pos < -90){ + n2Pos = -90; + } } - eeprom.write(currentToolAddress, currentToolNo); - wait(0.1); - tempLastTwitch = 0; - eeprom.read(currentToolNo + 150, &tempLastTwitch); // pull up previous twitch setting. - twitch = (int)tempLastTwitch; - lastToolNo = currentToolNo; + } +//**************************** + if (count == 2) { //knob controls tool number + + currentToolNo = Enc.Get(); + if (currentToolNo > numTools) { + currentToolNo = numTools; + } + if (currentToolNo < 1) { + currentToolNo = 1; + Enc.Set(1); + } + } +//**************************** + if (count == 3) { // Knob controls twitch setting + twitch = Enc.Get(); + if (twitch < 0) { + twitch = 0; + Enc.Set(0); + } + if (twitch > 3) { + twitch = 3; + Enc.Set(3); + } } - - - if (n1Pos != lastN1Pos){ - tft.setCursor(40, 4); - tft.setTextColor(BLACK); - tft.setTextSize(2); - tft.printf("%d", lastN1Pos); - tft.setCursor(40,4); - tft.setTextColor(GREEN); - tft.setTextSize(2); - tft.printf("%d", n1Pos); - eeprom.write(currentToolNo, n1Pos + 90); // store new angle in eeprom, add 90 because its an unsigned value. - //wait(0.1); // adjusted from 1 - dir=1; - device.printf("N"); - device.printf("%d", n1Pos + 190); //send over RS485 add 190 so no negative values and always 3 digits. - //device.printf("N245"); // TEST!!! - // tft.setCursor(100, 50); - // tft.setTextSize(2); - // tft.printf("%d", n1Pos + 145); - wait(0.05); - dir=0; - - //Enc.Set(n1Pos); // test!! - - lastN1Pos = n1Pos; - } - -if (n2Pos != lastN2Pos && numNoz == 2){ - tft.setCursor(115, 4); - tft.setTextColor(BLACK); - tft.setTextSize(2); - tft.printf("%d", lastN2Pos); - tft.setCursor(115, 4); - tft.setTextColor(GREEN); - tft.setTextSize(2); - tft.printf("%d", n2Pos); - eeprom.write(currentToolNo +100, n2Pos + 90); // store new angle in eeprom, add 90 because its an unsigned value. - //wait(0.1); // adjusted from 1 - dir=1; - device.printf("N"); - device.printf("%d", n2Pos + 390); //send over RS485 add 390 so no negative values and always 3 digits. - //device.printf("N245"); // TEST!!! - // tft.setCursor(100, 50); - // tft.setTextSize(2); - // tft.printf("%d", n1Pos + 145); - wait(0.05); - dir=0; - lastN2Pos = n2Pos; - } - - - if (numTools != lastNumTools){ - tft.setCursor(133, 95); - tft.setTextColor(BLACK); - tft.setTextSize(1); - tft.printf("%d", lastNumTools); - tft.setCursor(133,95); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("%d", numTools); - eeprom.write(numToolsAddress, numTools); // store new angle in eeprom, add 45 because its an unsigned value. - //wait(0.1); // adjusted from 1 - lastNumTools = numTools; - } +//**************************** + if (count == 4) { // Knob controls sync setting. 1=off, 2=sync, 3=rev + sync = Enc.Get(); + if (sync < 0) { + sync= 0; + Enc.Set(0); + } + if (sync > 1) { + sync = 1; + Enc.Set(1); + } + } + //**************************** + // 5,6,7 AUX? + if (count == 8) { // knob controls the direction of rotation for N1 + n1Dir = Enc.Get(); - if (numNoz != lastNumNoz){ - tft.setCursor(133, 110); - tft.setTextColor(BLACK); - tft.setTextSize(1); - tft.printf("%d", lastNumNoz); - tft.setCursor(133,110); - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("%d", numNoz); - eeprom.write(numNozAddress, numNoz); // store new angle in eeprom, add 45 because its an unsigned value. - //wait(0.1); // adjusted from 1 - - if (numNoz == 2){ - tft.setCursor(80, 4); - tft.setTextColor(WHITE); - tft.setTextSize(2); - tft.printf("N2"); - tft.drawRect(78,2,74,18,WHITE); - } - if (numNoz == 1){ - tft.setCursor(80, 4); - tft.setTextColor(BLACK); - tft.setTextSize(2); - tft.printf("N2"); - tft.setCursor(115, 4); - tft.printf("%d", n2Pos); - tft.drawRect(78,2,74,18,BLACK); + if (n1Dir > 1) { + n1Dir = 1; + Enc.Set(1); + } + + if (n1Dir < 0) { + n1Dir =0; + Enc.Set(0); + } } - lastNumNoz = numNoz; - } - - - if (twitch != lastTwitch){ - tft.setCursor(52, 50); - tft.setTextColor(BLACK); - tft.setTextSize(1); - tft.printf("%d", lastTwitch); - tft.setCursor(52, 50); - tft.setTextColor(GREEN); - tft.setTextSize(1); - tft.printf("%d", twitch); - dir=1; - device.printf("W"); - device.printf("%d", twitch); - wait(0.05); - dir=0; - eeprom.write(currentToolNo +150, twitch); // store new twitch setting - lastN1Pos = 999; // trigger sending servo values to module - lastN2Pos = 999; - lastTwitch = twitch; -} +//**************************** + if (count == 9) { // knob controls the direction of rotation for N2 + n2Dir = Enc.Get(); + + if (n2Dir > 1) { + n2Dir = 1; + Enc.Set(1); + } - if (sync != lastSync){ // - tft.setCursor(52, 65); - tft.setTextColor(BLACK); - tft.setTextSize(1); - if (lastSync == 0){ - tft.printf("OFF"); - } - if (lastSync == 1){ - tft.printf("ON"); + if (n2Dir < 0) { + n2Dir =0; + Enc.Set(0); + } } - if (lastSync == 2){ - tft.printf("REV"); - } - tft.setCursor(52, 65); - tft.setTextSize(1); - if (sync == 0){ - tft.setTextColor(WHITE); - tft.printf("OFF"); - } - if (sync == 1){ - tft.setTextColor(GREEN); - tft.printf("ON"); - } - if (sync == 2){ - tft.setTextColor(RED); - tft.printf("REV"); - } - eeprom.write(syncAddress, sync); // store new twitch setting - syncSpread = (n2Pos - n1Pos); - - lastSync = sync; - -} +//**************************** + if (count == 10) { // knob controls the version + version = Enc.Get(); + + if (version > 1) { + version = 1; + Enc.Set(1); + } - if (n1Dir != lastN1Dir){ // - tft.setCursor(132, 50); - tft.setTextColor(BLACK); - tft.setTextSize(1); - if (lastN1Dir == 0){ - tft.printf("NOR"); - } - if (lastN1Dir == 1){ - tft.printf("REV"); - } - tft.setCursor(132, 50); - if (n1Dir == 0){ - tft.setTextColor(WHITE); - tft.printf("NOR"); - } - if (n1Dir == 1){ - tft.setTextColor(GREEN); - tft.printf("REV"); - } - eeprom.write(n1DirAddress, n1Dir); // store new twitch setting - lastN1Dir = n1Dir; -} - - if (n2Dir != lastN2Dir){ // - tft.setCursor(132, 65); - tft.setTextColor(BLACK); - tft.setTextSize(1); - if (lastN2Dir == 0){ - tft.printf("NOR"); + if (version < 0) { + version =0; + Enc.Set(0); + } } - if (lastN2Dir == 1){ - tft.printf("REV"); - } - tft.setCursor(132, 65); - if (n2Dir == 0){ - tft.setTextColor(WHITE); - tft.printf("NOR"); +//**************************** + if (count == 11) { //knob controls tool number + numTools = Enc.Get(); + if (numTools > 50) { + numTools = 50; + Enc.Set(50); + } + if (numTools < 1) { + numTools = 1; + Enc.Set(1); + } } - if (n2Dir == 1){ - tft.setTextColor(GREEN); - tft.printf("REV"); +//**************************** + if (count == 12) { //knob controls tool number + numNoz = Enc.Get(); + if (numNoz> 2) { + numNoz = 2; + Enc.Set(2); + } + if (numNoz < 1) { + numNoz = 1; + Enc.Set(1); + } } - eeprom.write(n2DirAddress, n2Dir); // store new twitch setting - lastN2Dir = n2Dir; -} - if (version != lastVersion){ // - tft.setCursor(132, 80); - tft.setTextColor(BLACK); - tft.setTextSize(1); - if (lastVersion == 0){ - tft.printf("BAS"); - } - if (lastVersion == 1){ - tft.printf("PRO"); - } - tft.setCursor(132, 80); - if (version == 0){ - tft.setTextColor(WHITE); - tft.setTextSize(1); - tft.printf("BAS"); - } - if (version == 1){ - tft.setTextColor(RED); - tft.printf("PRO"); - } - eeprom.write(versionAddress, version); // store new twitch setting - lastVersion = version; -} //**************************** RS485 link *************************************** -while (device.readable()) - { - c = device.getc(); - - if (c == 'T'){ // Actual tool number sent over serial - - index = 1; - - } - - - if (c == 'M'){ // magazine + or - sent over serial - index = 5; - } - - if (index == 1){ - c = device.getc(); - if (c == '1'){ // hundreds place to know we are sending 3 digits - index = 2; - } - } - + while (device.readable()) { + c = device.getc(); + + if (c == 'T') { // Actual tool number sent over serial + + index = 1; + + } + + + if (c == 'M') { // magazine + or - sent over serial + index = 5; + } - - if (index == 2){ // tool number 10's column - - c = device.getc(); - - if (c=='0'){ - Tens = 0; + if (index == 1) { + c = device.getc(); + if (c == '1') { // hundreds place to know we are sending 3 digits + index = 2; + } + } + + + + if (index == 2) { // tool number 10's column + + c = device.getc(); + + if (c=='0') { + Tens = 0; + index = 4; + + } + + else if (c=='1') { + Tens = 1; index = 4; - - } - - else if (c=='1'){ - Tens = 1; - index = 4; - - } - - else if (c=='2'){ - Tens = 2; - index = 4; - - } - - else if (c=='3'){ - Tens = 3; - index = 4; - - } - - else if (c=='4'){ - Tens = 4; - index = 4; - } - - else if (c=='5'){ //max number of tools is 50 - Tens = 5; - index = 4; - } - - } - - if (index == 4){ // tool number ones column - - c = device.getc(); - - if (c=='0'){ - Ones = 0; - - } - - else if (c=='1'){ - Ones = 1; - - - } - - else if (c=='2'){ - Ones = 2; - - } - - else if (c=='3'){ - Ones = 3; - - } - - else if (c=='4'){ - Ones = 4; - } - - else if (c=='5'){ - Ones = 5; - } - - else if (c=='6'){ - Ones = 6; - } - - else if (c=='7'){ - Ones = 7; - } - - else if (c=='8'){ - Ones = 8; - } - - else if (c=='9'){ - Ones = 9; - } - - else if (c=='0'){ - Ones = 0; - } - - - - serialToolNumber = ((Tens * 10) + Ones); - - currentToolNo = serialToolNumber; // update tool number - - index=0; - + + } + + else if (c=='2') { + Tens = 2; + index = 4; + + } + + else if (c=='3') { + Tens = 3; + index = 4; + + } + + else if (c=='4') { + Tens = 4; + index = 4; } - - if (index == 5){ // magazine monitoring - + + else if (c=='5') { //max number of tools is 50 + Tens = 5; + index = 4; + } + + } + + if (index == 4) { // tool number ones column - - c = device.getc(); + c = device.getc(); + + if (c=='0') { + Ones = 0; - if (c == '+'){ + } + + else if (c=='1') { + Ones = 1; - currentToolNo = (currentToolNo +1); - if (currentToolNo > numTools){ - currentToolNo = 1; - } - index = 0; - } - else if (c == '-'){ - /* - tft.setTextColor(WHITE); - tft.setCursor(100, 100); - tft.printf("1"); - */ - currentToolNo = (currentToolNo -1); - if (currentToolNo < 1){ - currentToolNo = numTools; - } - index = 0; + } + + else if (c=='2') { + Ones = 2; + + } + + else if (c=='3') { + Ones = 3; + + } + + else if (c=='4') { + Ones = 4; + } + + else if (c=='5') { + Ones = 5; + } + + else if (c=='6') { + Ones = 6; + } + + else if (c=='7') { + Ones = 7; + } + + else if (c=='8') { + Ones = 8; + } + + else if (c=='9') { + Ones = 9; + } + + else if (c=='0') { + Ones = 0; } - -} + + + + serialToolNumber = ((Tens * 10) + Ones); + + currentToolNo = serialToolNumber; // update tool number + + index=0; + + } + + if (index == 5) { // magazine monitoring + + + + c = device.getc(); + + if (c == '+') { + + + currentToolNo = (currentToolNo +1); + if (currentToolNo > numTools) { + currentToolNo = 1; + } + index = 0; + } else if (c == '-') { + /* + tft.setTextColor(WHITE); + tft.setCursor(100, 100); + tft.printf("1"); + */ + currentToolNo = (currentToolNo -1); + if (currentToolNo < 1) { + currentToolNo = numTools; + } + index = 0; + } + + } + } + + } } -} -} -