Zeiterfassung Init
This commit is contained in:
parent
5d98fd35f2
commit
f1f799adfe
165
Arduino/Zeit/Zeit.ino
Normal file
165
Arduino/Zeit/Zeit.ino
Normal 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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user