/*******************************************************************/
/*
Industrial Shield Irrigation Controller
Code by: Alan Madorin
Industrial Shield library: http://apps.industrialshields.com/main/arduino/boards/package_industrialshields_index.json
Set board to: "Ardbox Family"
Set model to: "Ardbox Relay"
*/
/*************************** Pinout ******************************/
// OUTPUTS
#define Relay_1 10 //R1_0
#define Relay_2 9 //R2_0
#define Relay_3 6 //R3_0
#define Relay_4 5 //R4_0
#define Relay_5 3 //R5_0
#define Relay_6 7 //R6_0
#define Relay_7 0 //R7_0
#define Relay_8 1 //R8_0
//INPUTS
#define Input_0 2 //I.0.0
#define Input_1 12 //I.0.1
#define Input_2 4 //I.0.2
#define Input_3 8 //I.0.3
#define Input_4 A0 //I.0.4
#define Input_5 A1 //I.0.5
#define Input_6 A2 //I.0.6
#define Input_7 A3 //I.0.7
#define Input_8 A4 //I.0.8
#define Input_9 A5 //I.0.9
/************************* Libraries ***************************/
#include <ArduinoJson.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(14, 15); // RX (MISO), TX (SCK)
/************************* Variables ***************************/
bool relay1 = false;
bool relay2 = false;
bool relay3 = false;
bool relay4 = false;
bool relay5 = false;
bool relay6 = false;
bool relay7 = false;
bool relay8 = false;
/**************************** Setup ******************************/
void setup() {
Serial.begin(9600);
//mySerial.begin(9600);
// Setup Output Pins
pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);
pinMode(Relay_5, OUTPUT);
pinMode(Relay_6, OUTPUT);
pinMode(Relay_7, OUTPUT);
pinMode(Relay_8, OUTPUT);
// Setup Input Pins
pinMode(Input_0, INPUT);
pinMode(Input_1, INPUT);
pinMode(Input_2, INPUT);
pinMode(Input_3, INPUT);
pinMode(Input_4, INPUT);
pinMode(Input_5, INPUT);
pinMode(Input_6, INPUT);
pinMode(Input_7, INPUT);
pinMode(Input_8, INPUT);
pinMode(Input_9, INPUT);
sendJSON();
}
/***************************** Loop ******************************/
void loop() {
checkSerial();
}
/**************************** Serial *****************************/
void checkSerial() {
if (Serial.available()) {
// Allocate the JSON document
StaticJsonDocument<128> doc;
// Read the JSON document from the "link" serial port
DeserializationError err = deserializeJson(doc, Serial);
if (err == DeserializationError::Ok) {
// (we must use as<T>() to resolve the ambiguity) .as<bool>()
relay1 = doc["R1"] | relay1;
relay2 = doc["R2"] | relay2;
relay3 = doc["R3"] | relay3;
relay4 = doc["R4"] | relay4;
relay5 = doc["R5"] | relay5;
relay6 = doc["R6"] | relay6;
relay7 = doc["R7"] | relay7;
relay8 = doc["R8"] | relay8;
updateOutputs();
sendJSON();
}
else {
// Print error to the "debug" serial port
Serial.print("deserializeJson() returned ");
Serial.println(err.c_str());
// Flush all bytes in the "link" serial port buffer
while (Serial.available() > 0) {
Serial.read();
}
}
}
}
/*************************** Outputs *****************************/
void updateOutputs() {
digitalWrite(Relay_1, relay1);
digitalWrite(Relay_2, relay2);
digitalWrite(Relay_3, relay3);
digitalWrite(Relay_4, relay4);
digitalWrite(Relay_5, relay5);
digitalWrite(Relay_6, relay6);
digitalWrite(Relay_7, relay7);
digitalWrite(Relay_8, relay8);
}
/*************************** Response ****************************/
void sendJSON() {
// Create the JSON document
StaticJsonDocument<128> doc;
doc["R1"] = relay1;
doc["R2"] = relay2;
doc["R3"] = relay3;
doc["R4"] = relay4;
doc["R5"] = relay5;
doc["R6"] = relay6;
doc["R7"] = relay7;
doc["R8"] = relay8;
// Send the JSON document over the "link" serial port
serializeJson(doc, Serial);
Serial.println();
}