forked from Wien60Pioneers/beerbox
Fixed Wrong files getting detected as persons
Added HardwareSerial* as parameter to print person Fixed bug in check for file Added RFID and Finger revoke mechanisms Added user scan Added set user credits Enabled creditsystem
This commit is contained in:
parent
df94ff0654
commit
1bb6704d6e
@ -1,4 +1,3 @@
|
|||||||
#define NUM_OF_PEOPLE 25 // This is (thank myself) not used
|
|
||||||
#define NUM_OF_DRINKS 10
|
#define NUM_OF_DRINKS 10
|
||||||
#define DRINK_NAME_MAX_LENGTH 13
|
#define DRINK_NAME_MAX_LENGTH 13
|
||||||
#define FILE_NAME_LEN 8
|
#define FILE_NAME_LEN 8
|
||||||
@ -31,8 +30,10 @@ typedef struct{
|
|||||||
typedef struct{
|
typedef struct{
|
||||||
Drink drinks[NUM_OF_DRINKS];
|
Drink drinks[NUM_OF_DRINKS];
|
||||||
int waiting;
|
int waiting;
|
||||||
|
int scanning=0;
|
||||||
int maxDrink=0;
|
int maxDrink=0;
|
||||||
int maxID=0;
|
int maxID=0;
|
||||||
|
int personCount=0;
|
||||||
}Beerbox;
|
}Beerbox;
|
||||||
|
|
||||||
//this shall always just exist in a short term!
|
//this shall always just exist in a short term!
|
||||||
@ -42,7 +43,7 @@ typedef struct{
|
|||||||
char name[NAME_LEN + 1];
|
char name[NAME_LEN + 1];
|
||||||
char rfid_uuid[13];
|
char rfid_uuid[13];
|
||||||
uint8_t finger_uuid;
|
uint8_t finger_uuid;
|
||||||
uint8_t credits_left;
|
int credits_left;
|
||||||
}Person;
|
}Person;
|
||||||
|
|
||||||
|
|
||||||
|
53
beerbox.ino
53
beerbox.ino
@ -12,7 +12,7 @@ Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);
|
|||||||
LiquidCrystal_I2C lcd(0x38, 8, 2); // 0x38 for PCF***A on address 000
|
LiquidCrystal_I2C lcd(0x38, 8, 2); // 0x38 for PCF***A on address 000
|
||||||
|
|
||||||
|
|
||||||
#define debug 0 //General debug out on/off
|
#define debug 1 //General debug out on/off
|
||||||
|
|
||||||
File myFile;
|
File myFile;
|
||||||
const int chipSelect = 53;
|
const int chipSelect = 53;
|
||||||
@ -27,7 +27,6 @@ int currentDrink = 0;
|
|||||||
int lastPersonIndex = -1;
|
int lastPersonIndex = -1;
|
||||||
|
|
||||||
Person* persons;
|
Person* persons;
|
||||||
int personCount;
|
|
||||||
String rfID;
|
String rfID;
|
||||||
|
|
||||||
unsigned long oldTime = 0;
|
unsigned long oldTime = 0;
|
||||||
@ -115,7 +114,7 @@ void check_for_file(String filename, String extension) {
|
|||||||
char* buf = NULL;
|
char* buf = NULL;
|
||||||
str.toCharArray(buf, str.length() + 1);
|
str.toCharArray(buf, str.length() + 1);
|
||||||
|
|
||||||
if (SD.exists("p001.per")) {
|
if (SD.exists(str)) {
|
||||||
if(debug)Serial.println(str + " exists.");
|
if(debug)Serial.println(str + " exists.");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -182,6 +181,14 @@ Beerbox* read_beerbox(Beerbox *box) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool personExists(char *filename){
|
||||||
|
if((strcmp(strlwr(filename + (strlen(filename) - 4)), ".per")==0)&&(filename[0]=='P')){
|
||||||
|
//valid person name
|
||||||
|
if(SD.exists(filename))return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Person read_person(Beerbox *box, char *filename) {
|
Person read_person(Beerbox *box, char *filename) {
|
||||||
|
|
||||||
Person aperson;
|
Person aperson;
|
||||||
@ -217,7 +224,7 @@ Person read_person(Beerbox *box, char *filename) {
|
|||||||
memset(aperson.rfid_uuid, 0, 13);
|
memset(aperson.rfid_uuid, 0, 13);
|
||||||
read_line_from_file(read, tmp, sizeof(tmp));
|
read_line_from_file(read, tmp, sizeof(tmp));
|
||||||
sscanf(tmp, "rfid_uuid: %12s", &aperson.rfid_uuid);
|
sscanf(tmp, "rfid_uuid: %12s", &aperson.rfid_uuid);
|
||||||
if(debug)Serial.println(aperson.rfid_uuid);
|
//if(debug)Serial.println(aperson.rfid_uuid);
|
||||||
read_line_from_file(read, tmp, sizeof(tmp));
|
read_line_from_file(read, tmp, sizeof(tmp));
|
||||||
sscanf(tmp, "finger_uuid: %d", &aperson.finger_uuid);
|
sscanf(tmp, "finger_uuid: %d", &aperson.finger_uuid);
|
||||||
//if(debug)Serial.println(aperson.finger_uuid);
|
//if(debug)Serial.println(aperson.finger_uuid);
|
||||||
@ -240,35 +247,33 @@ Person read_person(Beerbox *box, char *filename) {
|
|||||||
}
|
}
|
||||||
if (aperson.finger_uuid > box->maxID) box->maxID = aperson.finger_uuid;
|
if (aperson.finger_uuid > box->maxID) box->maxID = aperson.finger_uuid;
|
||||||
|
|
||||||
print_person(box, &aperson);
|
//if(debug)print_person(box, &aperson,&Serial);
|
||||||
//comment back in once it is fixed
|
print_person_JSON(box,&aperson,&Serial);
|
||||||
//update_pers_file(box, &aperson);
|
|
||||||
|
|
||||||
read.close();
|
read.close();
|
||||||
return aperson;
|
return aperson;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_person(Beerbox *box, Person *aperson) {
|
void print_person(Beerbox *box, Person *aperson, HardwareSerial* com) {
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
sprintf(toprint, "\nPerson is called \"%s\" and has the filename \"%s\".\n", aperson->name, aperson->file_name);
|
sprintf(toprint, "\nPerson is called \"%s\" and has the filename \"%s\".\n", aperson->name, aperson->file_name);
|
||||||
if(debug)Serial.write(toprint);
|
com->write(toprint);
|
||||||
sprintf(toprint, "rfid_uuid: %s\n", aperson->rfid_uuid);
|
sprintf(toprint, "rfid_uuid: %s\n", aperson->rfid_uuid);
|
||||||
if(debug)Serial.write(toprint);
|
com->write(toprint);
|
||||||
sprintf(toprint, "finger_uuid: %u\n", aperson->finger_uuid);
|
sprintf(toprint, "finger_uuid: %u\n", aperson->finger_uuid);
|
||||||
if(debug)Serial.print(toprint);
|
com->print(toprint);
|
||||||
sprintf(toprint, "credits_left: %u\n", aperson->credits_left);
|
sprintf(toprint, "credits_left: %u\n", aperson->credits_left);
|
||||||
if(debug)Serial.print(toprint);
|
com->print(toprint);
|
||||||
|
|
||||||
for (i = 0; i < box->maxDrink; i++) {
|
for (int i = 0; i < box->maxDrink; i++) {
|
||||||
|
|
||||||
if (aperson->drinks_taken[i] != -1) {
|
if (aperson->drinks_taken[i] != -1) {
|
||||||
sprintf(toprint, "\nDrink: %s\n", box->drinks[i].name);
|
sprintf(toprint, "\nDrink: %s\n", box->drinks[i].name);
|
||||||
if(debug)Serial.write(toprint);
|
com->write(toprint);
|
||||||
sprintf(toprint, "Drink %d: %d\n", i, aperson->drinks_taken[i]);
|
sprintf(toprint, "Drink %d: %d\n", i, aperson->drinks_taken[i]);
|
||||||
if(debug)Serial.write(toprint);
|
com->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);
|
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);
|
||||||
if(debug)Serial.write(toprint);
|
com->write(toprint);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -368,7 +373,7 @@ Person* readAllPersons () {
|
|||||||
File dir = SD.open("/");
|
File dir = SD.open("/");
|
||||||
dir.rewindDirectory();
|
dir.rewindDirectory();
|
||||||
|
|
||||||
personCount = 0;
|
box->personCount = 0;
|
||||||
//count the valid persons:
|
//count the valid persons:
|
||||||
while (true) {
|
while (true) {
|
||||||
File entry = dir.openNextFile();
|
File entry = dir.openNextFile();
|
||||||
@ -376,9 +381,9 @@ Person* readAllPersons () {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!entry.isDirectory()) {
|
if (!entry.isDirectory()) {
|
||||||
if (strcmp(strlwr(entry.name() + (strlen(entry.name()) - 4)), ".per")==0)
|
if ((strcmp(strlwr(entry.name() + (strlen(entry.name()) - 4)), ".per")==0)&&(entry.name()[0]=='P'))
|
||||||
{
|
{
|
||||||
personCount++; //Yeah it is a person!
|
box->personCount++; //Yeah it is a person!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -387,8 +392,8 @@ Person* readAllPersons () {
|
|||||||
}
|
}
|
||||||
//now store them
|
//now store them
|
||||||
//if(debug)Serial.print("count:");
|
//if(debug)Serial.print("count:");
|
||||||
//if(debug)Serial.print(personCount);
|
//if(debug)Serial.print(box->personCount);
|
||||||
Person* readPersons = new Person[personCount];
|
Person* readPersons = new Person[box->personCount];
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
dir.rewindDirectory();
|
dir.rewindDirectory();
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -398,7 +403,7 @@ Person* readAllPersons () {
|
|||||||
}
|
}
|
||||||
if (!entry.isDirectory()) {
|
if (!entry.isDirectory()) {
|
||||||
int8_t len = strlen(entry.name());
|
int8_t len = strlen(entry.name());
|
||||||
if (strstr(strlwr(entry.name() + (len - 4)), ".per"))
|
if ((strstr(strlwr(entry.name() + (len - 4)), ".per"))&&(entry.name()[0]=='P'))
|
||||||
{
|
{
|
||||||
//Yeah it is a person!
|
//Yeah it is a person!
|
||||||
//if(debug)Serial.print("Person: ");
|
//if(debug)Serial.print("Person: ");
|
||||||
@ -411,7 +416,7 @@ Person* readAllPersons () {
|
|||||||
entry.close();
|
entry.close();
|
||||||
}
|
}
|
||||||
dir.close();
|
dir.close();
|
||||||
if(debug)Serial.println("Read all!");
|
if(debug)Serial.println("Read all Persons!");
|
||||||
return readPersons;
|
return readPersons;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
302
bluetooth.ino
302
bluetooth.ino
@ -1,123 +1,243 @@
|
|||||||
void bluetoothCommands(){
|
void bluetoothCommands() {
|
||||||
if (Serial3.available() > 0) {
|
if (Serial3.available() > 0) {
|
||||||
char command = Serial3.read();
|
char command = Serial3.read();
|
||||||
char subCommand = Serial3.read();
|
char subCommand = Serial3.read();
|
||||||
|
|
||||||
|
char incomingByte = Serial3.read();
|
||||||
|
String data;
|
||||||
|
while (incomingByte != ';') {
|
||||||
|
data = String(data + incomingByte);
|
||||||
|
incomingByte = Serial3.read();
|
||||||
|
}
|
||||||
|
|
||||||
if (command == '#') { //1 General Info Command
|
if (command == '#') { //1 General Info Command
|
||||||
if(subCommand == '1'){ // Get All Drinks
|
if (subCommand == '1') { // Get All Drinks
|
||||||
char incomingByte = Serial3.read(); // ignore ;
|
print_drinks_JSON(box, &Serial3);
|
||||||
|
} else if (subCommand == '2') { // Get All persons
|
||||||
|
Serial3.print("{\"persons\":[");
|
||||||
|
for (int i = 0; i < box->personCount; i++) {
|
||||||
} else if(subCommand == '2'){ // Get All filenames
|
if (i != 0)Serial3.print(",");
|
||||||
char incomingByte = Serial3.read(); // ignore ;
|
print_person_JSON(box, &persons[i], &Serial3);
|
||||||
//while
|
}
|
||||||
//filenames_JSON(box,person)
|
Serial3.println("]}");
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (command == '!') { //2 User Managment Command
|
} else if (command == '!') { //2 User Managment Command
|
||||||
if(subCommand == '1'){ // Create new User
|
if (subCommand == '1') { // Create new User
|
||||||
|
char incomingByte = Serial3.read();
|
||||||
|
String personName = data;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
||||||
char incomingByte = Serial3.read();
|
zugang = ""; // reset here
|
||||||
String personName;
|
lcd.clear();
|
||||||
|
lcd.print(personName);
|
||||||
while (incomingByte != ';'){
|
lcd.setCursor(0, 1);
|
||||||
personName = String(personName + incomingByte);
|
lcd.print("Sucess!");
|
||||||
incomingByte = Serial3.read();
|
delay(1000);
|
||||||
}
|
//and revert to normal:
|
||||||
if(debug)Serial.println(personName);
|
lcd.clear();
|
||||||
lcd.clear();
|
lcd.print("Drink:");
|
||||||
lcd.print(personName);
|
lcd.setCursor(0, 1);
|
||||||
if(debug)Serial.println(box->maxID);
|
lcd.print(box->drinks[currentDrink].name);
|
||||||
//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
|
}//new User
|
||||||
else if(subCommand == '2'){ //get user by filename
|
else if (subCommand == '2') { //get user by filename
|
||||||
|
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
Person* aperson = &persons[getFileIndex(filename)];
|
||||||
|
print_person_JSON(box, aperson, &Serial3);
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
|
|
||||||
}//get user
|
}//get user
|
||||||
else if(subCommand == '3'){ //trigger user scan for ID
|
else if (subCommand == '3') { //trigger user scan
|
||||||
|
lcd.clear();
|
||||||
//return filename
|
lcd.print("Scanning");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print("...");
|
||||||
|
box->scanning = true;
|
||||||
|
while (box->scanning) {
|
||||||
|
checkFinger();
|
||||||
|
checkRFID();
|
||||||
|
}
|
||||||
|
//After scan reset display
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print("Drink:");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(box->drinks[currentDrink].name);
|
||||||
|
|
||||||
}//user scan
|
}//user scan
|
||||||
else if(subCommand == '4'){ //revoke user finger by filename
|
else if (subCommand == '4') { //revoke user finger by filename
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
Person* changePerson = &persons[getFileIndex(filename)];
|
||||||
|
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print(changePerson->name);
|
||||||
|
int fingerReturn = -1;
|
||||||
|
while (fingerReturn != 0)
|
||||||
|
{
|
||||||
|
fingerReturn = getFingerprintEnroll(changePerson->finger_uuid);
|
||||||
|
}
|
||||||
|
Serial3.println("{\"Success\"}");
|
||||||
|
//No need to save finger since id is not changed in the process
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
|
//reset display
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print("Drink:");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(box->drinks[currentDrink].name);
|
||||||
|
|
||||||
}//revoke finger
|
}//revoke finger
|
||||||
else if(subCommand == '5'){ //revoke user rfid by filename
|
else if (subCommand == '5') { //revoke user rfid by filename
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
lastPersonIndex = getFileIndex(filename);
|
||||||
|
Person* changePerson = &persons[lastPersonIndex];
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print(changePerson->name);
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print("RFID pls");
|
||||||
|
|
||||||
|
zugang = "";
|
||||||
|
while (zugang == "") {
|
||||||
|
getRFIDEnroll();
|
||||||
|
}
|
||||||
|
if (debug)Serial.println(zugang);
|
||||||
|
//save zugang
|
||||||
|
zugang.toCharArray(changePerson->rfid_uuid, zugang.length() + 1);
|
||||||
|
//lastPersonIndex is set in the beginning
|
||||||
|
update_pers_file();
|
||||||
|
Serial3.println("{\"Success\"}");
|
||||||
|
//reset display
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print("Drink:");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(box->drinks[currentDrink].name);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
}//revoke rfid
|
}//revoke rfid
|
||||||
else if(subCommand == '6'){ //delete user by filename
|
else if (subCommand == '6') { //delete user by filename
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
Serial3.println("{\"Error\":\"not implemented yet\"}");
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
}//delete user
|
}//delete user
|
||||||
else if(subCommand == '6'){ //set user credits
|
else if (subCommand == '7') { //set user credits
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
//Scann second time for credits
|
||||||
|
char incomingByte = Serial3.read();
|
||||||
|
String data2;
|
||||||
|
while (incomingByte != ';') {
|
||||||
|
data2 = String(data2 + incomingByte);
|
||||||
|
incomingByte = Serial3.read();
|
||||||
|
}
|
||||||
|
char credits_string[data2.length() + 1];
|
||||||
|
data2.toCharArray(credits_string, data2.length() + 1);
|
||||||
|
lastPersonIndex = getFileIndex(filename);
|
||||||
|
Person* setPerson = &persons[lastPersonIndex];
|
||||||
|
setPerson->credits_left = atoi(credits_string);
|
||||||
|
update_pers_file();
|
||||||
|
print_person_JSON(box,setPerson,&Serial3);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
|
|
||||||
}//set credits
|
}//set credits
|
||||||
else if(subCommand == '6'){ //set name by filename
|
else if (subCommand == '8') { //set name by filename
|
||||||
|
char filename[data.length() + 1];
|
||||||
|
Serial.println(data);
|
||||||
|
data.toCharArray(filename, data.length() + 1);
|
||||||
|
if (personExists(filename)) {
|
||||||
|
Serial3.println("{\"Error\":\"not implemented yet\"}");
|
||||||
|
} else {
|
||||||
|
Serial3.println("{\"Error\":\"no such file\"}");
|
||||||
|
}
|
||||||
}//set name
|
}//set name
|
||||||
} // User Managment Command
|
} // User Managment Command
|
||||||
} //BLE available
|
} //BLE available
|
||||||
|
|
||||||
}//end function
|
}//end function
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void print_person_JSON(Beerbox *box, Person *aperson, HardwareSerial* com) {
|
||||||
|
|
||||||
|
sprintf(toprint, "{\"name\": \"%s\",\"filename\":\"%s\",\"creditsleft\":\"%i\",\"drinks\":[", aperson->name, aperson->file_name, aperson->credits_left);
|
||||||
|
com->write(toprint);
|
||||||
void filenames_JSON(Beerbox *box, Person *aperson) {
|
for (int i = 0; i < box->maxDrink; i++) {
|
||||||
|
|
||||||
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 (aperson->drinks_taken[i] != -1) {
|
||||||
if(i=0) sprintf(toprint, "{\"%s\":\"%s\"}", box->drinks[i].name,aperson->drinks_taken[i]);
|
if (i == 0) sprintf(toprint, "{\"%s\":\"%i\"}", box->drinks[i].name, aperson->drinks_taken[i]);
|
||||||
else sprintf(toprint, ",{\"%s\":\"%s\"}", box->drinks[i].name,aperson->drinks_taken[i]);
|
else sprintf(toprint, ",{\"%s\":\"%i\"}", box->drinks[i].name, aperson->drinks_taken[i]);
|
||||||
Serial.write(toprint);
|
com->write(toprint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.write("]}");
|
com->println("]}");
|
||||||
|
box->scanning = false;
|
||||||
} // end print JSON
|
} // end print JSON
|
||||||
|
|
||||||
|
void print_drinks_JSON(Beerbox *box, HardwareSerial* com) {
|
||||||
|
com->print("{\"drinks\":[");
|
||||||
|
for (int i = 0; i < box->maxDrink; i++) {
|
||||||
|
if (box->drinks[i].price != -1) {
|
||||||
|
if (i == 0) sprintf(toprint, "{\"id\":\"%i\",\"name\":\"%s\",\"price\":\"%i\"}", i, box->drinks[i].name, box->drinks[i].price);
|
||||||
|
else sprintf(toprint, ",{\"id\":\"%i\",\"name\":\"%s\",\"price\":\"%i\"}", i, box->drinks[i].name, box->drinks[i].price);
|
||||||
|
com->write(toprint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
com->print("]}");
|
||||||
|
|
||||||
|
}
|
||||||
|
32
inputs.ino
32
inputs.ino
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
void checkButton() {
|
void checkButton() {
|
||||||
//one change per click to make seleting drinks easier for the drunken
|
//one change per click to make seleting drinks easier for the drunken
|
||||||
//if (digitalRead(2) != lastButtonState) {
|
//if (digitalRead(2) != lastButtonState) {
|
||||||
@ -66,11 +64,13 @@ bool checkFinger() {
|
|||||||
if (getFingerIndex(finger.fingerID) != -1) {
|
if (getFingerIndex(finger.fingerID) != -1) {
|
||||||
if(debug)Serial.print("This is ");
|
if(debug)Serial.print("This is ");
|
||||||
if(debug)Serial.println(persons[getFingerIndex(finger.fingerID)].name);
|
if(debug)Serial.println(persons[getFingerIndex(finger.fingerID)].name);
|
||||||
countUp(getFingerIndex(finger.fingerID), 0);//for finger context
|
if(!box->scanning) countUp(getFingerIndex(finger.fingerID), 0);//for finger context
|
||||||
|
else print_person_JSON(box,&persons[getFingerIndex(finger.fingerID)],&Serial3);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkRFID() {
|
bool checkRFID() {
|
||||||
Serial1.flush();
|
Serial1.flush();
|
||||||
if (Serial1.available() >= gesamtKennungLaenge) // wenn genug Zeichen eingegangen ...
|
if (Serial1.available() >= gesamtKennungLaenge) // wenn genug Zeichen eingegangen ...
|
||||||
{
|
{
|
||||||
@ -99,10 +99,13 @@ void checkRFID() {
|
|||||||
|
|
||||||
//if(debug)Serial.print("This is ");
|
//if(debug)Serial.print("This is ");
|
||||||
//if(debug)Serial.println(persons[getRFIDIndex(persons, code)].name);
|
//if(debug)Serial.println(persons[getRFIDIndex(persons, code)].name);
|
||||||
if(getRFIDIndex( code)!=-1)
|
if(getRFIDIndex( code)!=-1){
|
||||||
|
if(!box->scanning)
|
||||||
countUp(getRFIDIndex( code), 1); // 1 for rfid context
|
countUp(getRFIDIndex( code), 1); // 1 for rfid context
|
||||||
else
|
else print_person_JSON(box,&persons[getRFIDIndex( code)],&Serial3);
|
||||||
|
}else{
|
||||||
if(debug)Serial.println("Error: Nonexisting Card");
|
if(debug)Serial.println("Error: Nonexisting Card");
|
||||||
|
}
|
||||||
|
|
||||||
zugang = "";
|
zugang = "";
|
||||||
delay(1000); // debounce time
|
delay(1000); // debounce time
|
||||||
@ -123,7 +126,7 @@ void serial1_flush_buffer()
|
|||||||
//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.
|
//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) {
|
int getRFIDIndex( char* rfid) {
|
||||||
|
|
||||||
for (int i = 0; i < personCount; i++) {
|
for (int i = 0; i < box->personCount; i++) {
|
||||||
if (!strcmp(persons[i].rfid_uuid, rfid)) {
|
if (!strcmp(persons[i].rfid_uuid, rfid)) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@ -133,7 +136,7 @@ int getRFIDIndex( char* rfid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getFingerIndex( uint8_t fingerID) {
|
int getFingerIndex( uint8_t fingerID) {
|
||||||
for (int i = 0; i < personCount; i++) {
|
for (int i = 0; i < box->personCount; i++) {
|
||||||
if (persons[i].finger_uuid == fingerID) {
|
if (persons[i].finger_uuid == fingerID) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@ -141,13 +144,24 @@ int getFingerIndex( uint8_t fingerID) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getFileIndex( char* filename) {
|
||||||
|
for (int i = 0; i < box->personCount; i++) {
|
||||||
|
if(!strcmp(persons[i].file_name,filename)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void countUp(int personIndex, int context) {
|
void countUp(int personIndex, int context) {
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
lcd.print(persons[personIndex].name);
|
lcd.print(persons[personIndex].name);
|
||||||
lcd.setCursor(0, 1);
|
lcd.setCursor(0, 1);
|
||||||
persons[personIndex].drinks_taken[currentDrink]++;
|
persons[personIndex].drinks_taken[currentDrink]++;
|
||||||
lcd.print(persons[personIndex].drinks_taken[currentDrink]);
|
//now care about credits
|
||||||
|
persons[personIndex].credits_left = persons[personIndex].credits_left - box->drinks[currentDrink].price ;
|
||||||
|
lcd.print(persons[personIndex].drinks_taken[currentDrink]); // Todo this can be changed with the credits left later...
|
||||||
lcd.print(" Ok? ");
|
lcd.print(" Ok? ");
|
||||||
lcd.setCursor(7, 1);
|
lcd.setCursor(7, 1);
|
||||||
lcd.print("3");
|
lcd.print("3");
|
||||||
|
Loading…
Reference in New Issue
Block a user