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