#define NodeID 0
typedef struct {
String Source;
String Target;
String Data;
} json_t;
boolean requestFlag = false;
void setup() {
Serial.begin(9600);
while (!Serial) ;; // wait for serial port to connect. Needed for native USB port only
Serial.println("Starting Node" + String(NodeID));
delay(1000);
sendJson("Node1", 0);
}
void loop() {
if(requestFlag) {
sendJson("Node1", 5000);
requestFlag = false;
}
decJson("Node1","Node0");
}
String encJson(json_t doc_json) {
String json_str = "{";
json_str += "\"Source\":\"" + doc_json.Source + "\",";
json_str += "\"Target\":\"" + doc_json.Target + "\",";
json_str += "\"Data\":\"" + doc_json.Data + "\"}";
return json_str;
}
void sendJson(String target, uint32_t interval) {
// Put values to struct
json_t doc_json;
doc_json.Source = "Node" + String(NodeID);
doc_json.Target = target;
doc_json.Data = String(millis());
unsigned long currentMillis = millis();
static unsigned long previousMillis = 0;
if (currentMillis - previousMillis >= interval) {
// pinMode(RS_DI, OUTPUT);
String json_str = encJson(doc_json);
Serial.println("JSON sent: " + json_str);
// pinMode(RS_DI, INPUT);
previousMillis = currentMillis;
}
}
void decJson(String source, String target) {
json_t doc_json;
if (Serial.available() > 0) {
String json_str = Serial.readStringUntil('\n');
Serial.println("JSON received: " + json_str);
json_str.trim(); // Remove blank spaces at start & end of string
// Find start & end field
int start = json_str.indexOf("\"Source\":") + 9;
int end = json_str.indexOf(",", start);
doc_json.Source = json_str.substring(start, end);
start = json_str.indexOf("\"Target\":") + 9;
end = json_str.indexOf(",", start);
doc_json.Target = json_str.substring(start, end);
start = json_str.indexOf("\"Data\":") + 7;
end = json_str.indexOf("}", start);
doc_json.Data = json_str.substring(start, end);
// Print json data
if((doc_json.Source == "\""+source+"\"") \
&& (doc_json.Target == "\""+target+"\"")) {
Serial.println("Source: " + doc_json.Source);
Serial.println("Target: " + doc_json.Target);
Serial.println("Data: " + doc_json.Data);
requestFlag = true;
}
}
}