#include #include #include SoftwareSerial rfid(11, 10); SoftwareSerial disp(13, 12); String rmsg; String cmsg; String dmsg; #define ALLOWED_TAG "0A006AB7AE79" #define MAX_STORE_DATA 8 #define DEBUG_FLAG true void setup() { Serial.begin(9600); Serial.println("Init...."); rfid.begin(9600); disp.begin(9600); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); Serial.println("t="+String(now())); Serial.println("Init loading!"); loadFromDisplay(); Serial.println("Init finished!"); } int job = -1; int online = -1; bool keep = false; int storeCount = -1; String storeData[MAX_STORE_DATA]; void loadFromDisplay() { disp.setTimeout(1000); print_disp("getJob=1"); parse(disp.readStringUntil('\n')); print_disp("getOnline=1"); parse(disp.readStringUntil('\n')); print_disp("getStoreCount=1"); parse(disp.readStringUntil('\n')); if(storeCount > 0) { print_disp("getStoreData=1"); parse(disp.readStringUntil('\n')); } if(storeCount > 0 && keepAlive()) { doJob("getStore","1"); } } void loop() { char c; rfid.listen(); if(rfid.available()) { c = rfid.read(); rmsg += c; } if(Serial.available()) { c = Serial.read(); if(c == '\n') { parse(cmsg); cmsg = ""; } else { cmsg += c; } } if(rmsg.length() >= 14) { rmsg = rmsg.substring(1,13); if(rmsg == ALLOWED_TAG) { online = online==1?0:1; doJob("tag",rmsg); doJob("online",String(online)); delay(1000); } rmsg = ""; } if(((digitalRead(2) == LOW && job != 1) || (digitalRead(3) == LOW && job != 2))) { job = digitalRead(2)==LOW?1:2; doJob("job", String(job)); rmsg = ""; } } void parse(String text) { if(DEBUG_FLAG) { Serial.println("i<-: "+text); } text.trim(); String task = ""; String value = ""; if (text.indexOf("=") != -1) { task = text.substring(0, text.indexOf("=")); value = text.substring(text.indexOf("=") + 1); doJob(task, value); } } void doJob(String task, String value) { if(task == "tag") { char hex[15]; value.toCharArray(hex,14); String answ = "tag="+String(strtol(hex, NULL, 16)); answ += ";time="+String(now()); answ += ";job="+String(job); answ += ";online="+String(online); if(keepAlive()) { Serial.println(answ); } else { print_disp(answ); } } else if(task == "job") { print_disp("job="+value); } else if(task == "online") { print_disp("online="+value); } else if(task == "time") { setTime(value.toInt()); Serial.println("t="+String(now())); } else if(task == "setJob") { job = value.toInt(); } else if(task == "setOnline") { online = value.toInt(); } else if(task == "keep") { keep = true; } else if(task == "hasCount") { storeCount = value.toInt(); } else if(task == "dataStore") { int i = 0; while(true) { if(value.indexOf('|') == -1) { storeData[i] = value; i++; break; } storeData[i] = value.substring(0, value.indexOf('|')); value = value.substring(value.indexOf('|') + 1); i++; } storeCount = i; } else if(task == "getStore") { if(storeCount > 0) { for(int i=0; i < storeCount; i++) { Serial.println(storeData[i]); } storeCount=0; } } } void print_disp(String text) { if(DEBUG_FLAG) { Serial.println("d->: "+text); } disp.listen(); disp.println(text); } bool keepAlive() { Serial.setTimeout(1000); Serial.println("requestKeep=1"); String a = Serial.readStringUntil('\n'); if(a != "") { parse(a); } return keep; }