Lukas Bachschwell
df94ff0654
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
203 lines
5.1 KiB
C++
203 lines
5.1 KiB
C++
|
|
|
|
void checkButton() {
|
|
//one change per click to make seleting drinks easier for the drunken
|
|
//if (digitalRead(2) != lastButtonState) {
|
|
//delayMicroseconds(50); //debounce delay
|
|
if (digitalRead(2) != lastButtonState) {
|
|
//ok we have a change!
|
|
if (digitalRead(2) == LOW) {
|
|
//pushed
|
|
digitalWrite(led,HIGH);
|
|
ledTime = millis();
|
|
if (box->waiting == 0) {
|
|
if (currentDrink == box->maxDrink - 1) currentDrink = -1;
|
|
currentDrink++;
|
|
if(debug)Serial.println(box->drinks[currentDrink].name);
|
|
lcd.clear();
|
|
lcd.print("Drink:");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print(box->drinks[currentDrink].name);
|
|
}
|
|
else
|
|
{
|
|
//revert save
|
|
persons[lastPersonIndex].drinks_taken[currentDrink]--;
|
|
box->waiting = 0;
|
|
lcd.clear();
|
|
lcd.print("Abort!");
|
|
delay(500);
|
|
//reset to default
|
|
lcd.clear();
|
|
lcd.print("Drink:");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print(box->drinks[currentDrink].name);
|
|
}
|
|
|
|
}
|
|
else {//released
|
|
}
|
|
lastButtonState = digitalRead(2);
|
|
}
|
|
//}
|
|
}
|
|
|
|
|
|
bool checkFinger() {
|
|
|
|
uint8_t p = finger.getImage();
|
|
if (p != FINGERPRINT_OK) return -1;
|
|
|
|
p = finger.image2Tz();
|
|
if (p != FINGERPRINT_OK) return -1;
|
|
|
|
digitalWrite(led,HIGH);
|
|
ledTime = millis();
|
|
|
|
p = finger.fingerFastSearch();
|
|
if (p != FINGERPRINT_OK) return -1;
|
|
|
|
// found a match!
|
|
// if(debug)Serial.print("Found ID #"); if(debug)Serial.print(finger.fingerID);
|
|
// if(debug)Serial.print(" with confidence of "); if(debug)Serial.println(finger.confidence);
|
|
|
|
//ok now check which person that is!
|
|
|
|
if (getFingerIndex(finger.fingerID) != -1) {
|
|
if(debug)Serial.print("This is ");
|
|
if(debug)Serial.println(persons[getFingerIndex(finger.fingerID)].name);
|
|
countUp(getFingerIndex(finger.fingerID), 0);//for finger context
|
|
}
|
|
}
|
|
|
|
void checkRFID() {
|
|
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);
|
|
digitalWrite(led,HIGH);
|
|
ledTime = millis();
|
|
|
|
//if(debug)Serial.print("This is ");
|
|
//if(debug)Serial.println(persons[getRFIDIndex(persons, code)].name);
|
|
if(getRFIDIndex( code)!=-1)
|
|
countUp(getRFIDIndex( code), 1); // 1 for rfid context
|
|
else
|
|
if(debug)Serial.println("Error: Nonexisting Card");
|
|
|
|
zugang = "";
|
|
delay(1000); // debounce time
|
|
serial1_flush_buffer();
|
|
}
|
|
}
|
|
}
|
|
|
|
void serial1_flush_buffer()
|
|
{
|
|
while (Serial1.read() >= 0)
|
|
; // do nothing
|
|
}
|
|
|
|
|
|
//
|
|
//LB
|
|
//Funktion schreiben, welche ein Array vom struct Person (Beliebige Groesse) sowie eine rfid-kennung uebernimmt und den Index der entsprechenden Person im array (beginnend bei 0)zurueckgiebt.
|
|
int getRFIDIndex( char* rfid) {
|
|
|
|
for (int i = 0; i < personCount; i++) {
|
|
if (!strcmp(persons[i].rfid_uuid, rfid)) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
|
|
}
|
|
|
|
int getFingerIndex( uint8_t fingerID) {
|
|
for (int i = 0; i < personCount; i++) {
|
|
if (persons[i].finger_uuid == fingerID) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
void countUp(int personIndex, int context) {
|
|
lcd.clear();
|
|
lcd.print(persons[personIndex].name);
|
|
lcd.setCursor(0, 1);
|
|
persons[personIndex].drinks_taken[currentDrink]++;
|
|
lcd.print(persons[personIndex].drinks_taken[currentDrink]);
|
|
lcd.print(" Ok? ");
|
|
lcd.setCursor(7, 1);
|
|
lcd.print("3");
|
|
lastPersonIndex = personIndex;
|
|
box->waiting = 3;
|
|
oldTime = millis();
|
|
}
|
|
|
|
|
|
void boxTimer() {
|
|
if (box->waiting != 0) {
|
|
if ((millis() - oldTime) > 1000)
|
|
{
|
|
if (box->waiting == 3) {
|
|
lcd.setCursor(7, 1);
|
|
lcd.print("2");
|
|
box->waiting = 2;
|
|
}
|
|
else if (box->waiting == 2) {
|
|
lcd.setCursor(7, 1);
|
|
lcd.print("1");
|
|
box->waiting = 1;
|
|
} else if (box->waiting == 1) {
|
|
update_pers_file();
|
|
lcd.clear();
|
|
lcd.print("Saved!");
|
|
delay(500);
|
|
//reset to default
|
|
lcd.clear();
|
|
lcd.print("Drink:");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print(box->drinks[currentDrink].name);
|
|
box->waiting = 0;
|
|
digitalWrite(led,false);
|
|
}
|
|
oldTime = millis();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void ledTimer() {
|
|
if (ledTime != 0) {
|
|
if ((millis() - ledTime) > 5000)
|
|
{
|
|
digitalWrite(led,LOW);
|
|
ledTime = 0;
|
|
}
|
|
}
|
|
}
|
|
|