// FARM DATA RELAY SYSTEM // // Irrigation Controller // // Developed by Timm Bogner (timmbogner@gmail.com) in Urbana, Illinois, USA. // // #include "fdrs_node_config.h" #include #define CONTROL_1 101 //Address for controller 1 #define CONTROL_2 102 //Address for controller 2 #define CONTROL_3 103 //Address for controller 3 #define CONTROL_4 104 //Address for controller 4 #define COIL_1 4 //Coil Pin 1 #define COIL_2 5 //Coil Pin 2 #define COIL_3 13 //Coil Pin 3 #define COIL_4 14 //Coil Pin 4 int status_1 = 0; int status_2 = 0; int status_3 = 0; int status_4 = 0; bool isData = false; bool newStatus = false; void fdrs_recv_cb(DataReading theData) { DBG(String(theData.id)); switch (theData.t) { case 0: // Incoming command is to SET a value switch (theData.id) { case CONTROL_1: status_1 = (int)theData.d; isData = true; break; case CONTROL_2: status_2 = (int)theData.d; isData = true; break; case CONTROL_3: status_3 = (int)theData.d; isData = true; break; case CONTROL_4: status_4 = (int)theData.d; isData = true; break; } break; case 1: // Incoming command is to GET a value switch (theData.id) { case CONTROL_1: if (digitalRead(COIL_1) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_1); } else { loadFDRS(0, STATUS_T, CONTROL_1); } break; case CONTROL_2: if (digitalRead(COIL_2) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_2); } else { loadFDRS(0, STATUS_T, CONTROL_2); } break; case CONTROL_3: if (digitalRead(COIL_3) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_3); } else { loadFDRS(0, STATUS_T, CONTROL_3); } break; case CONTROL_4: if (digitalRead(COIL_4) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_4); } else { loadFDRS(0, STATUS_T, CONTROL_4); } break; } newStatus = true; break; } } void checkCoils() { // Sends back a status report for each coil pin. if (digitalRead(COIL_1) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_1); } else { loadFDRS(0, STATUS_T, CONTROL_1); } if (digitalRead(COIL_2) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_2); } else { loadFDRS(0, STATUS_T, CONTROL_2); } if (digitalRead(COIL_3) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_3); } else { loadFDRS(0, STATUS_T, CONTROL_3); } if (digitalRead(COIL_4) == HIGH) { loadFDRS(1, STATUS_T, CONTROL_4); } else { loadFDRS(0, STATUS_T, CONTROL_4); } if (sendFDRS()) { DBG("Packet received by gateway"); } else { DBG("Unable to communicate with gateway!"); } } void updateCoils() { //These are set up for relay module which are active-LOW. Swap 'HIGH'and 'LOW' in this function to use the inverse. if (status_1) { digitalWrite(COIL_1, LOW); } else { digitalWrite(COIL_1, HIGH); } if (status_2) { digitalWrite(COIL_2, LOW); } else { digitalWrite(COIL_2, HIGH); } if (status_3) { digitalWrite(COIL_3, LOW); } else { digitalWrite(COIL_3, HIGH); } if (status_4) { digitalWrite(COIL_4, LOW); } else { digitalWrite(COIL_4, HIGH); } } void setup() { beginFDRS(); pingFDRS(1000); if (addFDRS(1000, fdrs_recv_cb)) { subscribeFDRS(CONTROL_1); subscribeFDRS(CONTROL_2); subscribeFDRS(CONTROL_3); subscribeFDRS(CONTROL_4); } else { DBG("Not Connected"); } pinMode(COIL_1, OUTPUT); digitalWrite(COIL_1, HIGH); pinMode(COIL_2, OUTPUT); digitalWrite(COIL_2, HIGH); pinMode(COIL_3, OUTPUT); digitalWrite(COIL_3, HIGH); pinMode(COIL_4, OUTPUT); digitalWrite(COIL_4, HIGH); DBG("FARM DATA RELAY SYSTEM :: Irrigation Module"); } void loop() { loopFDRS(); if (isData) { isData = false; updateCoils(); checkCoils(); } if (newStatus) { newStatus = false; if (sendFDRS()) { DBG("Packet received by gateway"); } else { DBG("Unable to communicate with gateway!"); } } }