Zeiterfassung Init

This commit is contained in:
BlubbFish 2016-01-21 13:13:37 +00:00
parent 5d98fd35f2
commit f1f799adfe

165
Arduino/Zeit/Zeit.ino Normal file
View File

@ -0,0 +1,165 @@
#include <Time.h>
#include <stdlib.h>
#include <SoftwareSerial.h>
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(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;
}