This is my packet handler and i had to modify it to receive commands locally. This chunk is a real eyesore. Could you provide me with some tips maybe to get this shortened a little bit.
void LocalMessage(const char* Message) {
if (strcmp( Message, "NODEN1") == 0) {
_EEPROM.timerEnabled[0] = true;
timerStates[0] = 0;
_writeEEPROM();
}
if (strcmp( Message, "NODDI1") == 0) {
_EEPROM.timerEnabled[0] = false;
// Relays[0].readyToTurnOn = false;
timerStates[0] = 0;
digitalWrite(relay[0], HIGH);
_writeEEPROM();
}
if (strcmp( Message, "NODDI2") == 0) {
_EEPROM.timerEnabled[1] = false;
// Relays[1].readyToTurnOn = false;
timerStates[1] = 0;
digitalWrite(relay[1], HIGH);
_writeEEPROM();
}
if (strcmp( Message, "NODEN2") == 0) {
_EEPROM.timerEnabled[1] = true;
timerStates[1] = 0;
_writeEEPROM();
}
if (strcmp( Message, "NODDI3") == 0) {
_EEPROM.timerEnabled[2] = false;
//Relays[2].readyToTurnOn = false;
timerStates[2] = 0;
digitalWrite(relay[2], HIGH);
_writeEEPROM();
}
if (strcmp( Message, "NODEN3") == 0) {
_EEPROM.timerEnabled[2] = true;
timerStates[2] = 0;
_writeEEPROM();
}
if (strcmp( Message, "NODDI4") == 0) {
// Relays[3].readyToTurnOn = false;
_EEPROM.timerEnabled[3] = false;
timerStates[3] = 0;
digitalWrite(relay[3], HIGH);
_writeEEPROM();
}
if (strcmp( Message, "NODEN4") == 0) {
_EEPROM.timerEnabled[3] = true;
timerStates[3] = 0;
_writeEEPROM();
}
if (strcmp( Message, "NODENA") == 0) {
_EEPROM.enabled = true;
handleTimerStates(0, 0, 0, 0);
timerState = 1;
_writeEEPROM();
}
if (strcmp( Message, "NODDIA") == 0) {
_EEPROM.enabled = false;
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 0, 0);
timerState = 1;
_writeEEPROM();
}
if (_EEPROM.enabled && _EEPROM.timerMode == 1) {
if (strcmp( Message, "T1STAR") == 0) {
if (digitalRead(relay[0])) { //if time 1 off turn it on
timerState = 1;
handleTimers(0, 1, 1, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp( Message, "T2STAR") == 0) {
if (digitalRead(relay[1])) { //if time 2 off turn it on
timerState = 2;
handleTimers(1, 0, 1, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp( Message, "T3STAR") == 0) {
if (digitalRead(relay[2])) { //if time 3 off turn it on
timerState = 3;
handleTimers(1, 1, 0, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp( Message, "T4STAR") == 0) {
if (digitalRead(relay[3])) { //if time 4 off turn it on
timerState = 4;
handleTimers(1, 1, 1, 0);
handleTimerStates(0, 0, 0, 0);
}
}
}
if (_EEPROM.enabled && _EEPROM.timerMode == 2) {
if (strcmp( Message, "T1STAR") == 0) {
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(0, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[0].readyToTurnOn = true;
}
if (strcmp( Message, "T2STAR") == 0) {
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[1].readyToTurnOn = true;
}
if (strcmp( Message, "T3STAR") == 0) {
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[2].readyToTurnOn = true;
}
if (strcmp( Message, "T4STAR") == 0) {
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[3].readyToTurnOn = true;
}
}
if (strcmp( Message, "T1STOP") == 0) {
if (digitalRead(relay[0]) == LOW) { //if time 1 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 0, 0);
timer1offMillis = millis();
}
}
if (strcmp( Message, "T2STOP") == 0) {
if (digitalRead(relay[1]) == LOW) { //if time 2 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 2, 0, 0);
timer2offMillis = millis();
}
}
if (strcmp( Message, "T3STOP") == 0) {
if (digitalRead(relay[3]) == LOW) { //if time 3 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 2, 0);
Serial.println("stopping t3");
timer3offMillis = millis();
}
}
if (strcmp( Message, "T4STOP") == 0) {
Serial.println("t4=stop");
if (digitalRead(relay[2]) == LOW) { //if time 1 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 0, 2);
Serial.println("stopping t4");
timer4offMillis = millis();
}
}
}
void recPacket() {
int packetSize = Udp.parsePacket();
if (packetSize) {
int len = Udp.read(incomingPacket, 355);
char verify[13]; //NODEC1 plus null
unsigned long _data;
strncpy (verify, (char*)incomingPacket, 6);//6 bytes
strncat (verify, (char*)incomingPacket + len - 6 , 6 );//6 bytes
memcpy(&_data, incomingPacket + 6 , 4); //copy 4 bytes to _data
if (strcmp(verify, "PAIRMEEMRIAP") == 0) {
String str = Udp.remoteIP().toString();
char new_ip[15];
str.toCharArray(new_ip, 15);
masterIP = Udp.remoteIP().toString();
if (strcmp(_EEPROM.masterIP, new_ip) != 0) {
masterIP.toCharArray(_EEPROM.masterIP, 15);
_writeEEPROM();
}
Serial.println("updated gateway ip");
Udp.beginPacket(_EEPROM.masterIP, 4210);
Udp.print(nodePairID0);
Udp.print(nodePairID1);
Udp.endPacket();
}
if (strcmp(verify, "T1ONDEUDT1ON") == 0) {
_EEPROM.timerTimes[0][0] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T1OFFEUT1OFF") == 0) {
_EEPROM.timerTimes[0][1] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T2ONDEUDT2ON") == 0) {
_EEPROM.timerTimes[1][0] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T2OFFEUT2OFF") == 0) {
_EEPROM.timerTimes[1][1] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T3ONDEUDT3ON") == 0) {
_EEPROM.timerTimes[2][0] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T3OFFEUT3OFF") == 0) {
_EEPROM.timerTimes[2][1] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T4ONDEUDT4ON") == 0) {
_EEPROM.timerTimes[3][0] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T4OFFEUT4OFF") == 0) {
_EEPROM.timerTimes[3][1] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T1NNDEUDT1NN") == 0) {
_EEPROM.timerTimes[0][2] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T1NFFEUT1NFF") == 0) {
_EEPROM.timerTimes[0][3] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T2NNDEUDT2NN") == 0) {
_EEPROM.timerTimes[1][2] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T2NFFEUT2NFF") == 0) {
_EEPROM.timerTimes[1][3] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T3NNDEUDT3NN") == 0) {
_EEPROM.timerTimes[2][2] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T3NFFEUT3NFF") == 0) {
_EEPROM.timerTimes[2][3] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T4NNDEUDT4NN") == 0) {
_EEPROM.timerTimes[3][2] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "T4NFFEUT4NFF") == 0) {
_EEPROM.timerTimes[3][3] = _data;
_writeEEPROM();
now4 = millis();
}
if (strcmp(verify, "NODDI1ID1ODE") == 0) {
_EEPROM.timerEnabled[0] = false;
timerStates[0] = 0;
digitalWrite(relay[0], HIGH);
_writeEEPROM();
}
if (strcmp(verify, "NODEN11NEODE") == 0) {
_EEPROM.timerEnabled[0] = true;
timerStates[0] = 0;
_writeEEPROM();
}
if (strcmp(verify, "NODDI2ID2ODE") == 0) {
_EEPROM.timerEnabled[1] = false;
timerStates[1] = 0;
digitalWrite(relay[1], HIGH);
_writeEEPROM();
}
if (strcmp(verify, "NODEN22NEODE") == 0) {
_EEPROM.timerEnabled[1] = true;
timerStates[1] = 0;
_writeEEPROM();
}
if (strcmp(verify, "NODDI3ID3ODE") == 0) {
_EEPROM.timerEnabled[2] = false;
timerStates[2] = 0;
digitalWrite(relay[2], HIGH);
_writeEEPROM();
}
if (strcmp(verify, "NODEN33NEODE") == 0) {
_EEPROM.timerEnabled[2] = true;
timerStates[2] = 0;
_writeEEPROM();
}
if (strcmp(verify, "NODDI4ID4ODE") == 0) {
_EEPROM.timerEnabled[3] = false;
timerStates[3] = 0;
digitalWrite(relay[3], HIGH);
_writeEEPROM();
}
if (strcmp(verify, "NODEN44NEODE") == 0) {
_EEPROM.timerEnabled[3] = true;
timerStates[3] = 0;
_writeEEPROM();
}
if (strcmp(verify, "NODENAANEODE") == 0) {
_EEPROM.enabled = true;
handleTimerStates(0, 0, 0, 0);
timerState = 1;
_writeEEPROM();
}
if (strcmp(verify, "NODDIAIDEODE") == 0) {
_EEPROM.enabled = false;
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 0, 0);
timerState = 1;
_writeEEPROM();
}
if (_EEPROM.enabled && _EEPROM.timerMode == 1) {
if (strcmp(verify, "T1STARRATS1T") == 0) {
if (digitalRead(relay[0])) { //if time 1 off turn it on
timerState = 1;
handleTimers(0, 1, 1, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp(verify, "T2STARRATS2T") == 0) {
if (digitalRead(relay[1])) { //if time 2 off turn it on
timerState = 2;
handleTimers(1, 0, 1, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp(verify, "T3STARRATS3T") == 0) {
if (digitalRead(relay[2])) { //if time 3 off turn it on
timerState = 3;
handleTimers(1, 1, 0, 1);
handleTimerStates(0, 0, 0, 0);
}
}
if (strcmp(verify, "T4STARRATS4T") == 0) {
if (digitalRead(relay[3])) { //if time 4 off turn it on
timerState = 4;
handleTimers(1, 1, 1, 0);
handleTimerStates(0, 0, 0, 0);
}
}
}
if (strcmp(verify, "T1STOPPOTS1T") == 0) {
if (digitalRead(relay[0]) == LOW) { //if time 1 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(2, 0, 0, 0);
timer1offMillis = millis();
}
}
if (strcmp(verify, "T2STOPPOTS2T") == 0) {
if (digitalRead(relay[1]) == LOW) { //if time 2 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 2, 0, 0);
timer2offMillis = millis();
}
}
if (strcmp(verify, "T3STOPPOTS3T") == 0) {
if (digitalRead(relay[2]) == LOW) { //if time 3 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 2, 0);
timer3offMillis = millis();
}
}
if (strcmp(verify, "T4STOPPOTS4T") == 0) {
if (digitalRead(relay[3]) == LOW) { //if time 1 on turn it off
handleTimers(1, 1, 1, 1);
handleTimerStates(0, 0, 0, 2);
timer4offMillis = millis();
}
}
if (_EEPROM.enabled && _EEPROM.timerMode == 2) {
if (strcmp(verify, "T1STARRATS1T") == 0) {
Serial.println("t1start");
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(0, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[0].readyToTurnOn = true;
}
if (strcmp(verify, "T2STARRATS2T") == 0) {
Serial.println("t2start");
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[1].readyToTurnOn = true;
}
if (strcmp(verify, "T3STARRATS3T") == 0) {
Serial.println("t3start");
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[2].readyToTurnOn = true;
}
if (strcmp(verify, "T4STARRATS4T") == 0) {
Serial.println("t4start");
for (int r = 0; r < RelayCount; r++) {
Relays[r].readyToTurnOn = false;
Relays[r].isOn = false;
Relays[r].StartTime = millis();
}
handleTimers(1, 1, 1, 1);
delay(150);
ARelayIsOn = false;
Relays[3].readyToTurnOn = true;
}
}
}
}
would be nice to lose about 400 lines of code there. as it is, it works but theres got to be a better way
There are 2 fucntions,
void LocalMessage(const char* Message) {}
and,
void recPacket() {
recPacket handles commands from network nodes. while local handles commands from local web server through server handles.