#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int address = 105;
char data[64] = {0};
int y100;
int y200;
float y[19];
int commandStart = 1200;
int commandStop = 1300;
int commandBacklight = 1403;
int commandNoBacklight = 1404;
int packet1 = 201;
int packet2 = 202;
int packet3 = 203;
int packet4 = 204;
int packet5 = 205;
int packet6 = 206;
int comRelease = 207;
// RX 0
// TX 1
#define enaExchange 2
#define pulExchange 3
#define dirExchange 4
#define enaDose 5
#define pulDose 6
#define dirDose 7
#define manual_1 8
#define manual_2 9
#define manual_3 10
#define txEnable 11
// #define xxx 12
int enaExchangeState;
long pulExchangeState;
int dirExchangeState;
long uSecExchange;
int enaDoseState;
long pulDoseState;
int dirDoseState;
long uSecDose;
void setup() {
lcd.init();
lcd.backlight();
delay(500);
lcd.noBacklight();
Serial.begin(9600);
Serial.println(".....");
enaExchangeState = 0;
pulExchangeState = 0;
dirExchangeState = 0;
enaDoseState = 0;
pulDoseState = 0;
dirDoseState = 0;
uSecExchange = 0;
uSecDose = 0;
pinMode(enaExchange, OUTPUT);
pinMode(pulExchange, OUTPUT);
pinMode(dirExchange, OUTPUT);
pinMode(enaDose, OUTPUT);
pinMode(pulDose, OUTPUT);
pinMode(dirDose, OUTPUT);
pinMode(manual_1, INPUT);
pinMode(manual_2, INPUT);
pinMode(manual_3, INPUT);
pinMode(txEnable, OUTPUT);
}
void loop() {
if(Serial.available() != 0) {
getSerialData();
enaExchangeState = y[4];
pulExchangeState = y[5];
dirExchangeState = y[6];
enaDoseState = y[7];
pulDoseState = y[8];
dirDoseState = y[9];
uSecExchange = y[10];
uSecDose = y[11];
}
if(y[2] == commandBacklight) {
lcd.backlight();
}
else if(y[2] == commandNoBacklight) {
lcd.noBacklight();
}
while((y[1] == commandStart) && (y200 == comRelease)) {
if(enaExchangeState == 1) {
digitalWrite(enaExchange, LOW);
}
else if(enaExchangeState == 0) {
digitalWrite(enaExchange, HIGH);
}
if(dirExchangeState == 1) {
digitalWrite(dirExchange, LOW);
}
else if(dirExchangeState == 0) {
digitalWrite(dirExchange, HIGH);
}
for(long x = 0; x < pulExchangeState; x++) {
digitalWrite(pulExchange,HIGH);
delayMicroseconds(uSecExchange);
digitalWrite(pulExchange,LOW);
delayMicroseconds(uSecExchange);
}
delay(1000);
if(enaDoseState == 1) {
digitalWrite(enaDose, LOW);
}
else if(enaDoseState == 0) {
digitalWrite(enaDose, HIGH);
}
if(dirDoseState == 1) {
digitalWrite(dirDose, LOW);
}
else if(dirDoseState == 0) {
digitalWrite(dirDose, HIGH);
}
for(long x = 0; x < pulDoseState; x++) {
digitalWrite(pulDose,HIGH);
delayMicroseconds(uSecDose);
digitalWrite(pulDose,LOW);
delayMicroseconds(uSecDose);
}
delay(1000);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(commandStop);
digitalWrite(txEnable, LOW);
y[1] = 0;
}
}
void getSerialData() {
byte n = Serial.available();
if (n != 0) {
byte m = Serial.readBytesUntil('\n', data, 64);
data[m] = '\0'; //null-byte
y100 = atoi(strtok(data, ","));
y200 = atoi(strtok(NULL, ","));
if(y100 == address) {
if(y200 == 0) {
}
if(y200 == packet1) {
y[1] = atof(strtok(NULL, ","));
y[2] = atof(strtok(NULL, ","));
y[3] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(packet2);
digitalWrite(txEnable, LOW);
}
if(y200 == packet2) {
y[4] = atof(strtok(NULL, ","));
y[5] = atof(strtok(NULL, ","));
y[6] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(packet3);
digitalWrite(txEnable, LOW);
}
if(y200 == packet3) {
y[7] = atof(strtok(NULL, ","));
y[8] = atof(strtok(NULL, ","));
y[9] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(packet4);
digitalWrite(txEnable, LOW);
}
if(y200 == packet4) {
y[10] = atof(strtok(NULL, ","));
y[11] = atof(strtok(NULL, ","));
y[12] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(packet5);
digitalWrite(txEnable, LOW);
}
if(y200 == packet5) {
y[13] = atof(strtok(NULL, ","));
y[14] = atof(strtok(NULL, ","));
y[15] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(packet6);
digitalWrite(txEnable, LOW);
}
if(y200 == packet6) {
y[16] = atof(strtok(NULL, ","));
y[17] = atof(strtok(NULL, ","));
y[18] = atof(strtok(NULL, ","));
delay(200);
digitalWrite(txEnable, HIGH);
Serial.print(address);
Serial.print(",");
Serial.println(comRelease);
digitalWrite(txEnable, LOW);
}
if(y200 == comRelease) {
}
}
}
}