Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed reScale USBDevice
Diff: main.cpp
- Revision:
- 17:84ea3ec0660d
- Parent:
- 16:69155b34efd6
- Child:
- 19:4ad111112853
--- a/main.cpp Sun Feb 24 21:30:05 2019 +0000
+++ b/main.cpp Fri Mar 29 06:13:59 2019 +0000
@@ -3,6 +3,7 @@
#include "RPG.h"
#include "reScale.h"
#include "Ee24xx08.h"
+#include "mRotaryEncoder.h"
// DISPLAY INIT:
@@ -16,9 +17,24 @@
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
+/* EEPROM Memory map:
+
+1 - 50: N1 angles
+51 - 100: Settings
+101- 150: N2 angles
+151- 200: Twitch settings
+200- 250: unused
+*/
+
#define currentToolAddress 51
#define numToolsAddress 52
#define numNozAddress 53
+#define versionAddress 54 // 0= basic, 1=pro
+#define syncAddress 55
+#define n1DirAddress 56
+#define n2DirAddress 57
+
+
//DigitalOut myled(P1_13);
@@ -34,7 +50,9 @@
Adafruit_ST7735 tft(P0_9, P0_8, P0_6, P0_2, P0_22, P0_7); // MOSI, MISO, SCLK, SSEL, TFT_DC, TFT_RST
-reScale servo1Scale(-45,0,750,1800); //19850 is 1.0v from voltage divider at 10k.
+int maxServo = 2500;
+int minServo = 500;
+reScale servo1Scale(-90,90,minServo,maxServo); //
PwmOut myServo(P1_13); //display board
//PwmOut myServo(D4);
@@ -44,12 +62,16 @@
DigitalIn encoderFalseButton(P0_23); // FALSE!!! push button of knob
DigitalIn encoderButton(P0_20); // push button of knob
DigitalIn backButton(P0_15); // back button
+DigitalIn aButton(P0_1); // ISP and A button
Timer t;
+Timer tw;
int lastBackButton;
int lastDownButton;
int lastEncoderButton;
+
+
int dirt = 0;
int main() {
@@ -61,7 +83,7 @@
tft.setRotation(3);
tft.fillScreen(BLACK);
tft.setCursor(30,120);
- tft.setTextColor(WHITE);
+ tft.setTextColor(BLUE);
tft.setTextWrap(false);
tft.printf("AccuBlast v0");
@@ -83,38 +105,87 @@
tft.setCursor(4, 50);
tft.setTextColor(WHITE);
tft.setTextSize(1);
- tft.printf("Nozzle");
+ tft.printf("Twitch:");
tft.setCursor(4, 65);
tft.setTextColor(WHITE);
tft.setTextSize(1);
- tft.printf("Res.");
+ tft.printf("Sync:");
tft.setCursor(4, 80);
tft.setTextColor(WHITE);
tft.setTextSize(1);
- tft.printf("Res.");
+ 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(4, 110);
+ 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:");
+
// **************************************************************************************************************
-
-int received = 9;
-int serialCounter = 0;
-int index = 0;
+ 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 index = 0;
int count = 0;
- int maxCount = 7; //max number of menu items
+ 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 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 *******************
char tempToolNo = 0; // last tool in spindle
@@ -129,10 +200,50 @@
eeprom.read(numNozAddress, &tempNumNoz);
int numNoz = (int)tempNumNoz;
- char tempLastAngle = 0; // last angle of last tool in spindle
+ char tempLastAngle = 0; // last angle of last tool in spindle N1
eeprom.read(currentToolNo, &tempLastAngle);
int lastAngle = (int)tempLastAngle;
- lastAngle = lastAngle - 45; // Not storing signed int, so signed value is 45 less than what was stored to memory.
+ 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 *********************************
@@ -142,6 +253,7 @@
//tDownButton.mode(PullUp); // button pull up
encoderButton.mode(PullUp);
encoderFalseButton.mode(PullUp);
+ aButton.mode(PullUp);
t.start(); // starts timer
lastBackButton = t.read_ms();
@@ -158,9 +270,14 @@
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!! ;
+ // 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);
@@ -195,6 +312,8 @@
while(1) {
+
+
/*
while (device.readable())
{
@@ -262,12 +381,14 @@
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 + 200)){
+if (t.read_ms() > (lastEncoderButton + 50)){ // from 200
count = count + 1; //Reset count if PB pressed
}
if (count > maxCount){
@@ -279,118 +400,374 @@
count = 0;
}
}
+
+// ************* 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);
+ }
+
+ 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);
+}
+
+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 == 12){
+tft.drawRect(130,108,20,12,BLACK);
+}
+
+ // Set new box
+
+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);
+}
+
+else if (count == 3){
+tft.drawRect(50,48,20,12,GREEN);
+}
+
+else if (count == 4){
+tft.drawRect(50,63,20,12,GREEN);
+}
+
+else if (count == 5){
+tft.drawRect(50,78,20,12,GREEN);
+}
+
+else if (count == 6){
+tft.drawRect(50,93,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 == 10){
+tft.drawRect(130,78,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);
+}
+
+lastCount = count;
+}
+
+
+
+
//****************** ENCODER ACTIONS ************************************************
if (count == 0){ // knob controls servo value
-dirt = rpg1.dir(); //Get Dir
-n1Pos = n1Pos + dirt; //Ad Dirt to n1pos
-if (n1Pos > 0){
- n1Pos = 0;
+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 (n1Pos < -45){
- n1Pos = -45;
+ 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
-dirt = rpg1.dir(); //Get Dir
-currentToolNo = currentToolNo + dirt; //Ad Dirt to n1pos
+
+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 (count == 6){ //knob controls tool number
-dirt = rpg1.dir(); //Get Dir
-numTools = numTools + dirt; //Ad Dirt to n1pos
+ 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 == 7){ //knob controls tool number
-dirt = rpg1.dir(); //Get Dir
-numNoz = numNoz + dirt; //Ad Dirt to n1pos
+//****************************
+ 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);
}
}
-
-
-// ************* Rectangles for identifying active selection *****************************
-
-if (count == 0){ // N1 adjust
-tft.drawRect(2,2,74,18,GREEN);
-}
-else{
-tft.drawRect(2,2,74,18,WHITE);
-}
+//****************************************************************************************
-if ((count == 1) && (numNoz == 2)){ // N2 adjust
-tft.drawRect(78,2,74,18,GREEN);
-}
-
-if ((count != 1) && (numNoz == 2)){ // N2 adjust
-tft.drawRect(78,2,74,18,WHITE);
+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 (count == 2){
-tft.drawRect(20,26,28,18,GREEN);
-}
-else{
-tft.drawRect(20,26,28,18,BLACK);
-}
-
-if (count == 3){
-tft.drawRect(53,48,20,12,GREEN);
+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);
}
-else{
-tft.drawRect(53,48,20,12,BLACK);
-}
-
-if (count == 4){
-tft.drawRect(53,63,20,12,GREEN);
-}
-else{
-tft.drawRect(53,63,20,12,BLACK);
-}
-if (count == 5){
-tft.drawRect(53,78,20,12,GREEN);
-}
-else{
-tft.drawRect(53,78,20,12,BLACK);
-}
-
-if (count == 6){
-tft.drawRect(53,93,20,12,GREEN);
-}
-else{
-tft.drawRect(53,93,20,12,BLACK);
-}
-
-if (count == 7){
-tft.drawRect(53,108,20,12,GREEN);
-}
-else{
-tft.drawRect(53,108,20,12,BLACK);
-}
-
-//****************************************************************************************
-
-servo1Pos = servo1Scale.from(n1Pos);
-
-myServo.pulsewidth_us(servo1Pos);
//********************** update display values **********************************************
@@ -412,12 +789,13 @@
tempLastAngle = 0;
eeprom.read(currentToolNo, &tempLastAngle);
lastAngle = (int)tempLastAngle;
- lastAngle = lastAngle - 45; // Not storing signed int, so signed value is 45 less than what was stored to memory.
- //RotaryEncoder knob1(D2, D3, -45, 45, lastAngle); // RotaryEncoder(PinName pin1_name, PinName pin2_name, int min = 0, int max = 100, int val = 50);
- //knob1.val = lastAngle;
+ lastAngle = lastAngle - 90; // Not storing signed int, so signed value is 90 less than what was stored to memory.
n1Pos = lastAngle;
eeprom.write(currentToolAddress, currentToolNo);
- //wait(0.1);
+ wait(0.1);
+ tempLastTwitch = 0;
+ eeprom.read(currentToolNo + 150, &tempLastTwitch); // pull up previous twitch setting.
+ twitch = (int)tempLastTwitch;
lastToolNo = currentToolNo;
}
@@ -431,26 +809,50 @@
tft.setTextColor(GREEN);
tft.setTextSize(2);
tft.printf("%d", n1Pos);
- eeprom.write(currentToolNo, n1Pos + 45); // store new angle in eeprom, add 45 because its an unsigned value.
+ 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 + 145); //send over RS485 add 145 so no negative values and always 3 digits. 1xx for N1, 2xx for nozzle 2
+ 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);
+ // tft.setCursor(100, 50);
+ // tft.setTextSize(2);
+ // tft.printf("%d", n1Pos + 145);
+ wait(0.05);
dir=0;
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(55, 95);
+ tft.setCursor(133, 95);
tft.setTextColor(BLACK);
tft.setTextSize(1);
tft.printf("%d", lastNumTools);
- tft.setCursor(55,95);
+ tft.setCursor(133,95);
tft.setTextColor(WHITE);
tft.setTextSize(1);
tft.printf("%d", numTools);
@@ -460,11 +862,11 @@
}
if (numNoz != lastNumNoz){
- tft.setCursor(55, 110);
+ tft.setCursor(133, 110);
tft.setTextColor(BLACK);
tft.setTextSize(1);
tft.printf("%d", lastNumNoz);
- tft.setCursor(55,110);
+ tft.setCursor(133,110);
tft.setTextColor(WHITE);
tft.setTextSize(1);
tft.printf("%d", numNoz);
@@ -483,47 +885,140 @@
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");
+ }
+ 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 != lastCount){
- tft.setCursor(150, 100);
+ if (n1Dir != lastN1Dir){ //
+ tft.setCursor(132, 50);
tft.setTextColor(BLACK);
tft.setTextSize(1);
- tft.printf("%d", lastCount);
- tft.setCursor(150,100);
- tft.setTextColor(RED);
+ 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);
- tft.printf("%d", count);
- lastCount = count;
- }
+ 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;
+}
+
+ 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 ***************************************
-
- //dir =0; // receiver enable
-/*
-if (device.readable())
- {
- c = device.getc();
- if(c=='B'){
- received = 1;
- }
-}
-
-if (received == 1){
- tft.setCursor(150, 80);
- tft.setTextColor(WHITE);
- tft.setTextSize(1);
- tft.printf("1");
- }
-
-*/
-
while (device.readable())
{
@@ -668,11 +1163,11 @@
index = 0;
}
else if (c == '-'){
-
+ /*
tft.setTextColor(WHITE);
tft.setCursor(100, 100);
tft.printf("1");
-
+ */
currentToolNo = (currentToolNo -1);
if (currentToolNo < 1){
currentToolNo = numTools;
@@ -683,12 +1178,6 @@
}
}
-
-
-
-
-
-
}
}