diff --git a/beerbox.ino b/beerbox.ino index 9d94524..4491af4 100644 --- a/beerbox.ino +++ b/beerbox.ino @@ -57,6 +57,7 @@ void setup() { Serial1.begin(9600); // BLE Com init + //Serial3.begin(115200); Serial3.begin(115200); @@ -248,7 +249,7 @@ Person read_person(Beerbox *box, char *filename) { if (aperson.finger_uuid > box->maxID) box->maxID = aperson.finger_uuid; //if(debug)print_person(box, &aperson,&Serial); - print_person_JSON(box,&aperson,&Serial); + print_person_JSON(box,&aperson,&Serial,false); read.close(); return aperson; diff --git a/bluetooth.ino b/bluetooth.ino index 9b87592..53b95b1 100644 --- a/bluetooth.ino +++ b/bluetooth.ino @@ -17,10 +17,21 @@ void bluetoothCommands() { Serial3.print("{\"persons\":["); for (int i = 0; i < box->personCount; i++) { if (i != 0)Serial3.print(","); - print_person_JSON(box, &persons[i], &Serial3); + print_person_JSON(box, &persons[i], &Serial3, true); + print_person_JSON(box, &persons[i], &Serial, false); + delay(100); } + Serial3.println("]}"); } + else if (subCommand == '3') { //reset all counts + + for (int i = 0; i < box->personCount; i++) { + reset_person_drinks(box, &persons[i], i); + print_person_JSON(box, &persons[i], &Serial, false); + } + Serial3.println("{\"Success\"}"); + } } else if (command == '!') { //2 User Managment Command if (subCommand == '1') { // Create new User char incomingByte = Serial3.read(); @@ -81,7 +92,7 @@ void bluetoothCommands() { data.toCharArray(filename, data.length() + 1); if (personExists(filename)) { Person* aperson = &persons[getFileIndex(filename)]; - print_person_JSON(box, aperson, &Serial3); + print_person_JSON(box, aperson, &Serial3, false); } else { Serial3.println("{\"Error\":\"no such file\"}"); } @@ -167,7 +178,13 @@ void bluetoothCommands() { Serial.println(data); data.toCharArray(filename, data.length() + 1); if (personExists(filename)) { - Serial3.println("{\"Error\":\"not implemented yet\"}"); + //Delete file + SD.remove(filename); + //rescan it! + delete [] persons; // When done, free memory pointed to + persons = NULL; + persons = readAllPersons(); + if (debug)Serial.println(sizeof(persons)); } else { Serial3.println("{\"Error\":\"no such file\"}"); } @@ -190,7 +207,7 @@ void bluetoothCommands() { Person* setPerson = &persons[lastPersonIndex]; setPerson->credits_left = atoi(credits_string); update_pers_file(); - print_person_JSON(box,setPerson,&Serial3); + print_person_JSON(box, setPerson, &Serial3, false); } else { Serial3.println("{\"Error\":\"no such file\"}"); @@ -198,11 +215,25 @@ void bluetoothCommands() { }//set credits else if (subCommand == '8') { //set name by filename + //TODO: Better namechecking char filename[data.length() + 1]; Serial.println(data); data.toCharArray(filename, data.length() + 1); if (personExists(filename)) { - Serial3.println("{\"Error\":\"not implemented yet\"}"); + //Scann second time for newName + char incomingByte = Serial3.read(); + String data2; + while (incomingByte != ';') { + data2 = String(data2 + incomingByte); + incomingByte = Serial3.read(); + } + char name_string[11]; + data2.toCharArray(name_string, data2.length() + 1); + lastPersonIndex = getFileIndex(filename); + Person* setPerson = &persons[lastPersonIndex]; + strcpy(setPerson->name, name_string); + update_pers_file(); + print_person_JSON(box, setPerson, &Serial3, false); } else { Serial3.println("{\"Error\":\"no such file\"}"); } @@ -214,8 +245,13 @@ void bluetoothCommands() { -void print_person_JSON(Beerbox *box, Person *aperson, HardwareSerial* com) { +void print_person_JSON(Beerbox *box, Person *aperson, HardwareSerial* com, bool less) { + if (less) { + sprintf(toprint, "{\"name\": \"%s\",\"filename\":\"%s\"}", aperson->name, aperson->file_name); + com->write(toprint); + } else { + sprintf(toprint, "{\"name\": \"%s\",\"filename\":\"%s\",\"creditsleft\":\"%i\",\"drinks\":[", aperson->name, aperson->file_name, aperson->credits_left); com->write(toprint); for (int i = 0; i < box->maxDrink; i++) { @@ -227,6 +263,7 @@ void print_person_JSON(Beerbox *box, Person *aperson, HardwareSerial* com) { } com->println("]}"); box->scanning = false; + } } // end print JSON void print_drinks_JSON(Beerbox *box, HardwareSerial* com) { @@ -241,3 +278,14 @@ void print_drinks_JSON(Beerbox *box, HardwareSerial* com) { com->print("]}"); } + +void reset_person_drinks(Beerbox *box,Person *aperson,int personIndex){ + for (int i = 0; i < box->maxDrink; i++) { + if (box->drinks[i].price != -1) { + aperson->drinks_taken[i] = 0; + lastPersonIndex = personIndex; + update_pers_file(); + } + } + + } diff --git a/inputs.ino b/inputs.ino index 0e76c81..49fd778 100644 --- a/inputs.ino +++ b/inputs.ino @@ -21,6 +21,8 @@ void checkButton() { { //revert save persons[lastPersonIndex].drinks_taken[currentDrink]--; + persons[personIndex].credits_left = persons[personIndex].credits_left + box->drinks[currentDrink].price; + box->waiting = 0; lcd.clear(); lcd.print("Abort!"); @@ -65,7 +67,7 @@ bool checkFinger() { if(debug)Serial.print("This is "); if(debug)Serial.println(persons[getFingerIndex(finger.fingerID)].name); if(!box->scanning) countUp(getFingerIndex(finger.fingerID), 0);//for finger context - else print_person_JSON(box,&persons[getFingerIndex(finger.fingerID)],&Serial3); + else print_person_JSON(box,&persons[getFingerIndex(finger.fingerID)],&Serial3, false); } } @@ -102,7 +104,7 @@ bool checkRFID() { if(getRFIDIndex( code)!=-1){ if(!box->scanning) countUp(getRFIDIndex( code), 1); // 1 for rfid context - else print_person_JSON(box,&persons[getRFIDIndex( code)],&Serial3); + else print_person_JSON(box,&persons[getRFIDIndex( code)],&Serial3, false); }else{ if(debug)Serial.println("Error: Nonexisting Card"); }