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
main.cpp
- Committer:
- BETZtechnik
- Date:
- 2019-03-29
- Revision:
- 17:84ea3ec0660d
- Parent:
- 16:69155b34efd6
- Child:
- 19:4ad111112853
File content as of revision 17:84ea3ec0660d:
#include "mbed.h"
#include "Adafruit_ST7735.h"
#include "RPG.h"
#include "reScale.h"
#include "Ee24xx08.h"
#include "mRotaryEncoder.h"
// DISPLAY INIT:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#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);
I2C iic(P0_5, P0_4);
DigitalOut dir(P0_21);
Ee24xx08 eeprom(&iic);
Adafruit_ST7735 tft(P0_9, P0_8, P0_6, P0_2, P0_22, P0_7); // MOSI, MISO, SCLK, SSEL, TFT_DC, TFT_RST
int maxServo = 2500;
int minServo = 500;
reScale servo1Scale(-90,90,minServo,maxServo); //
PwmOut myServo(P1_13); //display board
//PwmOut myServo(D4);
//DigitalIn tUpButton(P2_11);
//DigitalIn tDownButton(P2_12);
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() {
// ************************************** 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 v0");
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:");
// **************************************************************************************************************
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 = 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
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 *********************************
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);
/*
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?
while(1) {
/*
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;
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;
}
}
// ************* 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
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
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 (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;
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;
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 (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");
}
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 (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 (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 ***************************************
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;
}
}
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=='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;
}
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;
}
}
}
}
}