forked from Wien60Pioneers/beerbox
moved drinksMax to beerbox struct and refactored to maxDrink added if(debug) to all serial write and serial print statements Moved BLE com to seperat file and added command and subcommandparsing Added filename JSON method
274 lines
7.3 KiB
C++
274 lines
7.3 KiB
C++
uint8_t getFingerprintEnroll(int id) {
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("Fin pls");
|
|
|
|
int p = -1;
|
|
while (p != FINGERPRINT_OK) {
|
|
p = finger.getImage();
|
|
switch (p) {
|
|
case FINGERPRINT_OK:
|
|
if(debug)Serial.println("Image taken");
|
|
lcd.clear();
|
|
lcd.print("Image 1");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("Done");
|
|
break;
|
|
case FINGERPRINT_NOFINGER:
|
|
if(debug)Serial.println(".");
|
|
break;
|
|
case FINGERPRINT_PACKETRECIEVEERR:
|
|
if(debug)Serial.println("Communication error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
case FINGERPRINT_IMAGEFAIL:
|
|
if(debug)Serial.println("Imaging error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
default:
|
|
if(debug)Serial.println("Unknown error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
}
|
|
}
|
|
|
|
// OK success!
|
|
|
|
p = finger.image2Tz(1);
|
|
switch (p) {
|
|
case FINGERPRINT_OK:
|
|
if(debug)Serial.println("Image converted");
|
|
break;
|
|
case FINGERPRINT_IMAGEMESS:
|
|
if(debug)Serial.println("Image too messy");
|
|
return p;
|
|
case FINGERPRINT_PACKETRECIEVEERR:
|
|
if(debug)Serial.println("Communication error");
|
|
return p;
|
|
case FINGERPRINT_FEATUREFAIL:
|
|
if(debug)Serial.println("Could not find fingerprint features");
|
|
return p;
|
|
case FINGERPRINT_INVALIDIMAGE:
|
|
if(debug)Serial.println("Could not find fingerprint features");
|
|
return p;
|
|
default:
|
|
if(debug)Serial.println("Unknown error");
|
|
return p;
|
|
}
|
|
|
|
//if(debug)Serial.println("Remove finger");
|
|
lcd.clear();
|
|
lcd.print("Remove");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("Finger");
|
|
delay(2000);
|
|
p = 0;
|
|
while (p != FINGERPRINT_NOFINGER) {
|
|
p = finger.getImage();
|
|
}
|
|
|
|
p = -1;
|
|
lcd.clear();
|
|
lcd.print("Second");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("time pls");
|
|
if(debug)Serial.println("Place same finger again");
|
|
while (p != FINGERPRINT_OK) {
|
|
p = finger.getImage();
|
|
switch (p) {
|
|
case FINGERPRINT_OK:
|
|
if(debug)Serial.println("Image taken");
|
|
break;
|
|
case FINGERPRINT_NOFINGER:
|
|
if(debug)Serial.print(".");
|
|
break;
|
|
case FINGERPRINT_PACKETRECIEVEERR:
|
|
if(debug)Serial.println("Communication error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
case FINGERPRINT_IMAGEFAIL:
|
|
if(debug)Serial.println("Imaging error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
default:
|
|
if(debug)Serial.println("Unknown error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
break;
|
|
}
|
|
}
|
|
|
|
// OK success!
|
|
|
|
p = finger.image2Tz(2);
|
|
switch (p) {
|
|
case FINGERPRINT_OK:
|
|
if(debug)Serial.println("Image converted");
|
|
break;
|
|
case FINGERPRINT_IMAGEMESS:
|
|
if(debug)Serial.println("Image too messy");
|
|
return p;
|
|
case FINGERPRINT_PACKETRECIEVEERR:
|
|
if(debug)Serial.println("Communication error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
return p;
|
|
case FINGERPRINT_FEATUREFAIL:
|
|
if(debug)Serial.println("Could not find fingerprint features");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
return p;
|
|
case FINGERPRINT_INVALIDIMAGE:
|
|
if(debug)Serial.println("Could not find fingerprint features");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
return p;
|
|
default:
|
|
if(debug)Serial.println("Unknown error");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
return p;
|
|
}
|
|
|
|
|
|
// OK converted!
|
|
p = finger.createModel();
|
|
if (p == FINGERPRINT_OK) {
|
|
if(debug)Serial.println("Prints matched!");
|
|
lcd.clear();
|
|
lcd.print("Match!");
|
|
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
|
|
if(debug)Serial.println("Communication error");
|
|
return p;
|
|
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
|
|
if(debug)Serial.println("Fingerprints did not match");
|
|
lcd.clear();
|
|
lcd.print("Error");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("mismatch");
|
|
delay(1000);
|
|
return p;
|
|
} else {
|
|
if(debug)Serial.println("Unknown error");
|
|
return p;
|
|
}
|
|
|
|
if(debug)Serial.print("ID "); if(debug)Serial.println(id);
|
|
p = finger.storeModel(id);
|
|
if (p == FINGERPRINT_OK) {
|
|
if(debug)Serial.println("Stored!");
|
|
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
|
|
if(debug)Serial.println("Communication error");
|
|
return p;
|
|
} else if (p == FINGERPRINT_BADLOCATION) {
|
|
if(debug)Serial.println("Could not store in that location");
|
|
return p;
|
|
} else if (p == FINGERPRINT_FLASHERR) {
|
|
if(debug)Serial.println("Error writing to flash");
|
|
return p;
|
|
} else {
|
|
if(debug)Serial.println("Unknown error");
|
|
return p;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
void getRFIDEnroll() {
|
|
Serial1.flush();
|
|
if (Serial1.available() >= gesamtKennungLaenge) // wenn genug Zeichen eingegangen ...
|
|
{
|
|
if (Serial1.read() == startZeichen) // und das Startzeichen erkannt wurde ...
|
|
{
|
|
//if(debug)Serial.print("Start-Byte erkannt ... ");
|
|
bytesGelesen = 0; // starten Lesen, also Zaehler auf 0
|
|
while (bytesGelesen < kennungLaenge) // lese 12-stelligen Code
|
|
{
|
|
char zeichen = Serial1.read(); // lesen Zeichen
|
|
//if(debug)Serial.print(zeichen); // zur Kontrolle
|
|
//if(debug)Serial.print(" ");
|
|
if (zeichen == endeZeichen) // suche nach Ende-Befehl
|
|
{
|
|
//if(debug)Serial.println("CR erkannt ...");
|
|
break;
|
|
}
|
|
code[bytesGelesen] = zeichen; // speicher Zeichen im Puffer
|
|
bytesGelesen = bytesGelesen + 1; // ein Zeichen weiter
|
|
}
|
|
code[bytesGelesen] = 0; // beende Zeichenkette
|
|
if(debug)Serial.print("RFID-Code lautet: ");
|
|
if(debug)Serial.println(code);
|
|
zugang = code; //char[] to string
|
|
|
|
//already existing
|
|
if (getRFIDIndex(code) != -1) {
|
|
if(debug)Serial.print("Error: ");
|
|
if(debug)Serial.print("This is ");
|
|
if(debug)Serial.println(persons[getRFIDIndex(code)].name);
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("Error! ");
|
|
|
|
zugang = ""; //this time reset first!
|
|
delay(1000); // debounce time
|
|
serial1_flush_buffer();
|
|
}
|
|
else {
|
|
// do not reset zugang
|
|
delay(1000); // debounce time
|
|
serial1_flush_buffer();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int write_pers_file(Person* thisPerson) {
|
|
if(debug)Serial.println("Writing Person:");
|
|
File write;
|
|
char tmp[25];
|
|
|
|
int i = 0;
|
|
//if(debug)Serial.println(thisPerson.file_name);
|
|
write = SD.open(thisPerson->file_name, FILE_WRITE);
|
|
|
|
// write.seek(0);
|
|
|
|
|
|
sprintf(tmp, "%s\n", thisPerson->name);
|
|
if(debug)Serial.print(tmp);
|
|
write.write(tmp, strlen(tmp));
|
|
sprintf(tmp, "rfid_uuid: %s\n", thisPerson->rfid_uuid);
|
|
if(debug)Serial.print(tmp);
|
|
write.write(tmp, strlen(tmp));
|
|
sprintf(tmp, "finger_uuid: %u\n", thisPerson->finger_uuid);
|
|
if(debug)Serial.print(tmp);
|
|
write.write(tmp, strlen(tmp));
|
|
sprintf(tmp, "credits_left: %u\n", thisPerson->credits_left);
|
|
write.write(tmp, strlen(tmp));
|
|
|
|
for (i = 0; i < box->maxDrink; i++) {
|
|
if (thisPerson->drinks_taken[i] != -1) {
|
|
sprintf(tmp, "\ndrink_Count_%d: %d\n", i, thisPerson->drinks_taken[i]);
|
|
write.write(tmp, strlen(tmp));
|
|
if(debug)Serial.println(tmp);
|
|
}
|
|
}
|
|
|
|
|
|
write.close();
|
|
|
|
//rescan it!
|
|
delete [] persons; // When done, free memory pointed to
|
|
persons = NULL;
|
|
persons = readAllPersons();
|
|
if(debug)Serial.println(sizeof(persons));
|
|
return 0;
|
|
|
|
}
|