diff --git a/beerbox.h b/beerbox.h index c83bc70..f9e32c3 100644 --- a/beerbox.h +++ b/beerbox.h @@ -1,4 +1,4 @@ -#define NUM_OF_PEOPLE 25 +#define NUM_OF_PEOPLE 25 // This is (thank myself) not used #define NUM_OF_DRINKS 10 #define DRINK_NAME_MAX_LENGTH 13 #define FILE_NAME_LEN 8 @@ -31,6 +31,8 @@ typedef struct{ typedef struct{ Drink drinks[NUM_OF_DRINKS]; int waiting; + int maxDrink=0; + int maxID=0; }Beerbox; //this shall always just exist in a short term! diff --git a/beerbox.ino b/beerbox.ino index 957ef0f..e5b285a 100644 --- a/beerbox.ino +++ b/beerbox.ino @@ -17,11 +17,10 @@ LiquidCrystal_I2C lcd(0x38, 8, 2); // 0x38 for PCF***A on address 000 File myFile; const int chipSelect = 53; -char toprint[255]; +char toprint[255]; // General print Buffer Beerbox *box; -int drinksMax = 1; // TODO add this to the box struct -int maxID = 0; +//int maxDrink = 1; // TODO add this to the box struct int lastButtonState = 1; int currentDrink = 0; @@ -31,12 +30,9 @@ Person* persons; int personCount; String rfID; - - unsigned long oldTime = 0; unsigned long ledTime = 0; - void setup() { //generall debugging Serial.begin(115200); @@ -106,70 +102,8 @@ void loop() { boxTimer(); ledTimer(); - - - - - if (Serial3.available() > 0) { - char incomingByte = Serial3.read(); - if (incomingByte == '!') { //2 createnew user - incomingByte = Serial3.read(); - String personName; - while (incomingByte != ';') - { - personName = String(personName + incomingByte); - incomingByte = Serial3.read(); - } - if(debug)Serial.println(personName); - lcd.clear(); - lcd.print(personName); - if(debug)Serial.println(maxID); - //lcd.setCursor(0,1); - //lcd.print("Fin pls"); - int fingerReturn = -1; - while (fingerReturn != 0) - { - fingerReturn = getFingerprintEnroll(maxID + 1); - } - lcd.clear(); - lcd.print(personName); - lcd.setCursor(0, 1); - lcd.print("RFID pls"); - - zugang = ""; - while (zugang == "") { - getRFIDEnroll(); - } - if(debug)Serial.println(zugang); - maxID++; - Person* newPerson = new Person; - personName.toCharArray(newPerson->name, personName.length()+1); - char tmp[FILE_NAME_LEN + 1]; - sprintf(tmp,"p%03d%s",maxID,FILE_EXTENSION); - strcpy(newPerson->file_name, tmp); - zugang.toCharArray(newPerson->rfid_uuid, zugang.length()+1); - newPerson->finger_uuid = maxID; - newPerson->credits_left = 1000; - for (int i = 0; i < drinksMax; i++) { - newPerson->drinks_taken[i]=0; - } - write_pers_file(newPerson); - - - zugang = ""; // reset here - lcd.clear(); - lcd.print(personName); - lcd.setCursor(0, 1); - lcd.print("Sucess!"); - delay(1000); - //and revert to normal: - lcd.clear(); - lcd.print("Drink:"); - lcd.setCursor(0, 1); - lcd.print(box->drinks[currentDrink].name); - - } - } + + bluetoothCommands(); }//end loop @@ -189,7 +123,7 @@ void check_for_file(String filename, String extension) { } } -//BEYOND THIS POINT IS THE LEYER OF BEERBOX -- ENTER AT YOUR OWN RISK +//BEYOND THIS POINT IS THE LEYER OF BEERBOX -- ENTER AT YOUR OWN RISK###################################### char tmp_filename[FILE_NAME_LEN + FILE_EXTENSION_LEN + 2]; @@ -239,7 +173,7 @@ Beerbox* read_beerbox(Beerbox *box) { if (i < NUM_OF_DRINKS) { sprintf(toprint, "Slots %d - %d are not in use!\n", i + 1, NUM_OF_DRINKS); - drinksMax = i; + box->maxDrink = i; if(debug)Serial.println(toprint); } @@ -304,7 +238,7 @@ Person read_person(Beerbox *box, char *filename) { aperson.drinks_taken[tmpDrink] = tmpCount; } } - + if (aperson.finger_uuid > box->maxID) box->maxID = aperson.finger_uuid; print_person(box, &aperson); //comment back in once it is fixed @@ -318,24 +252,23 @@ void print_person(Beerbox *box, Person *aperson) { int i = 0; sprintf(toprint, "\nPerson is called \"%s\" and has the filename \"%s\".\n", aperson->name, aperson->file_name); - Serial.write(toprint); + if(debug)Serial.write(toprint); sprintf(toprint, "rfid_uuid: %s\n", aperson->rfid_uuid); - Serial.write(toprint); + if(debug)Serial.write(toprint); sprintf(toprint, "finger_uuid: %u\n", aperson->finger_uuid); - if (aperson->finger_uuid > maxID) maxID = aperson->finger_uuid; if(debug)Serial.print(toprint); sprintf(toprint, "credits_left: %u\n", aperson->credits_left); if(debug)Serial.print(toprint); - for (i = 0; i < drinksMax; i++) { + for (i = 0; i < box->maxDrink; i++) { if (aperson->drinks_taken[i] != -1) { sprintf(toprint, "\nDrink: %s\n", box->drinks[i].name); - Serial.write(toprint); + if(debug)Serial.write(toprint); sprintf(toprint, "Drink %d: %d\n", i, aperson->drinks_taken[i]); - Serial.write(toprint); + if(debug)Serial.write(toprint); sprintf(toprint, "Total: %d.%02d Euro\n", aperson->drinks_taken[i]*box->drinks[i].price / 100, (aperson->drinks_taken[i]*box->drinks[i].price) % 100); - Serial.write(toprint); + if(debug)Serial.write(toprint); } } @@ -344,6 +277,7 @@ void print_person(Beerbox *box, Person *aperson) { } + int update_pers_file() { Person thisPerson = persons[lastPersonIndex]; File write; @@ -370,7 +304,7 @@ int update_pers_file() { sprintf(tmp, "credits_left: %u\n", thisPerson.credits_left); write.write(tmp, strlen(tmp)); - for (i = 0; i < drinksMax; i++) { + 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]); diff --git a/bluetooth.ino b/bluetooth.ino new file mode 100644 index 0000000..f2ef3c4 --- /dev/null +++ b/bluetooth.ino @@ -0,0 +1,123 @@ +void bluetoothCommands(){ +if (Serial3.available() > 0) { + char command = Serial3.read(); + char subCommand = Serial3.read(); + + if (command == '#') { //1 General Info Command + if(subCommand == '1'){ // Get All Drinks + char incomingByte = Serial3.read(); // ignore ; + + + + } else if(subCommand == '2'){ // Get All filenames + char incomingByte = Serial3.read(); // ignore ; + //while + //filenames_JSON(box,person) + + } + } else if (command == '!') { //2 User Managment Command + if(subCommand == '1'){ // Create new User + + + char incomingByte = Serial3.read(); + String personName; + + while (incomingByte != ';'){ + personName = String(personName + incomingByte); + incomingByte = Serial3.read(); + } + if(debug)Serial.println(personName); + lcd.clear(); + lcd.print(personName); + if(debug)Serial.println(box->maxID); + //lcd.setCursor(0,1); + //lcd.print("Fin pls"); + int fingerReturn = -1; + while (fingerReturn != 0) + { + fingerReturn = getFingerprintEnroll(box->maxID + 1); + } + lcd.clear(); + lcd.print(personName); + lcd.setCursor(0, 1); + lcd.print("RFID pls"); + + zugang = ""; + while (zugang == "") { + getRFIDEnroll(); + } + if(debug)Serial.println(zugang); + box->maxID++; + Person* newPerson = new Person; + personName.toCharArray(newPerson->name, personName.length()+1); + char tmp[FILE_NAME_LEN + 1]; + sprintf(tmp,"p%03d%s",box->maxID,FILE_EXTENSION); + strcpy(newPerson->file_name, tmp); + zugang.toCharArray(newPerson->rfid_uuid, zugang.length()+1); + newPerson->finger_uuid = box->maxID; + newPerson->credits_left = 1000; + for (int i = 0; i < box->maxDrink; i++) { + newPerson->drinks_taken[i]=0; + } + write_pers_file(newPerson); + + + zugang = ""; // reset here + lcd.clear(); + lcd.print(personName); + lcd.setCursor(0, 1); + lcd.print("Sucess!"); + delay(1000); + //and revert to normal: + lcd.clear(); + lcd.print("Drink:"); + lcd.setCursor(0, 1); + lcd.print(box->drinks[currentDrink].name); + }//new User + else if(subCommand == '2'){ //get user by filename + + }//get user + else if(subCommand == '3'){ //trigger user scan for ID + + //return filename + + }//user scan + else if(subCommand == '4'){ //revoke user finger by filename + + }//revoke finger + else if(subCommand == '5'){ //revoke user rfid by filename + + }//revoke rfid + else if(subCommand == '6'){ //delete user by filename + + }//delete user + else if(subCommand == '6'){ //set user credits + + }//set credits + else if(subCommand == '6'){ //set name by filename + + }//set name + } // User Managment Command + } //BLE available + + }//end function + + + + + + + void filenames_JSON(Beerbox *box, Person *aperson) { + + int i = 0; + sprintf(toprint, "{\"name\": \"%s\",\"filename\":\"%s\",\"creditsleft\":\"%s\",\"drinks\":[", aperson->name, aperson->file_name, aperson->credits_left); + Serial.write(toprint); + for (i = 0; i < box->maxDrink; i++) { + if (aperson->drinks_taken[i] != -1) { + if(i=0) sprintf(toprint, "{\"%s\":\"%s\"}", box->drinks[i].name,aperson->drinks_taken[i]); + else sprintf(toprint, ",{\"%s\":\"%s\"}", box->drinks[i].name,aperson->drinks_taken[i]); + Serial.write(toprint); + } + } + Serial.write("]}"); +} // end print JSON diff --git a/enroll.ino b/enroll.ino index e0294b6..a81082e 100644 --- a/enroll.ino +++ b/enroll.ino @@ -221,9 +221,6 @@ void getRFIDEnroll() { delay(1000); // debounce time serial1_flush_buffer(); } - - - } } @@ -255,7 +252,7 @@ int write_pers_file(Person* thisPerson) { sprintf(tmp, "credits_left: %u\n", thisPerson->credits_left); write.write(tmp, strlen(tmp)); - for (i = 0; i < drinksMax; i++) { + 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)); diff --git a/inputs.ino b/inputs.ino index 334b0cb..3412432 100644 --- a/inputs.ino +++ b/inputs.ino @@ -11,7 +11,7 @@ void checkButton() { digitalWrite(led,HIGH); ledTime = millis(); if (box->waiting == 0) { - if (currentDrink == drinksMax - 1) currentDrink = -1; + if (currentDrink == box->maxDrink - 1) currentDrink = -1; currentDrink++; if(debug)Serial.println(box->drinks[currentDrink].name); lcd.clear();