forked from Wien60Pioneers/beerbox
moved maxID to beerbox struct and update in readPerson
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
This commit is contained in:
parent
bed4087886
commit
df94ff0654
@ -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 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,6 +31,8 @@ typedef struct{
|
|||||||
typedef struct{
|
typedef struct{
|
||||||
Drink drinks[NUM_OF_DRINKS];
|
Drink drinks[NUM_OF_DRINKS];
|
||||||
int waiting;
|
int waiting;
|
||||||
|
int maxDrink=0;
|
||||||
|
int maxID=0;
|
||||||
}Beerbox;
|
}Beerbox;
|
||||||
|
|
||||||
//this shall always just exist in a short term!
|
//this shall always just exist in a short term!
|
||||||
|
94
beerbox.ino
94
beerbox.ino
@ -17,11 +17,10 @@ LiquidCrystal_I2C lcd(0x38, 8, 2); // 0x38 for PCF***A on address 000
|
|||||||
File myFile;
|
File myFile;
|
||||||
const int chipSelect = 53;
|
const int chipSelect = 53;
|
||||||
|
|
||||||
char toprint[255];
|
char toprint[255]; // General print Buffer
|
||||||
Beerbox *box;
|
Beerbox *box;
|
||||||
|
|
||||||
int drinksMax = 1; // TODO add this to the box struct
|
//int maxDrink = 1; // TODO add this to the box struct
|
||||||
int maxID = 0;
|
|
||||||
int lastButtonState = 1;
|
int lastButtonState = 1;
|
||||||
|
|
||||||
int currentDrink = 0;
|
int currentDrink = 0;
|
||||||
@ -31,12 +30,9 @@ Person* persons;
|
|||||||
int personCount;
|
int personCount;
|
||||||
String rfID;
|
String rfID;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned long oldTime = 0;
|
unsigned long oldTime = 0;
|
||||||
unsigned long ledTime = 0;
|
unsigned long ledTime = 0;
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
//generall debugging
|
//generall debugging
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
@ -107,69 +103,7 @@ void loop() {
|
|||||||
boxTimer();
|
boxTimer();
|
||||||
ledTimer();
|
ledTimer();
|
||||||
|
|
||||||
|
bluetoothCommands();
|
||||||
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}//end loop
|
}//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];
|
char tmp_filename[FILE_NAME_LEN + FILE_EXTENSION_LEN + 2];
|
||||||
|
|
||||||
@ -239,7 +173,7 @@ Beerbox* read_beerbox(Beerbox *box) {
|
|||||||
|
|
||||||
if (i < NUM_OF_DRINKS) {
|
if (i < NUM_OF_DRINKS) {
|
||||||
sprintf(toprint, "Slots %d - %d are not in use!\n", i + 1, 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);
|
if(debug)Serial.println(toprint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,7 +238,7 @@ Person read_person(Beerbox *box, char *filename) {
|
|||||||
aperson.drinks_taken[tmpDrink] = tmpCount;
|
aperson.drinks_taken[tmpDrink] = tmpCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (aperson.finger_uuid > box->maxID) box->maxID = aperson.finger_uuid;
|
||||||
|
|
||||||
print_person(box, &aperson);
|
print_person(box, &aperson);
|
||||||
//comment back in once it is fixed
|
//comment back in once it is fixed
|
||||||
@ -318,24 +252,23 @@ void print_person(Beerbox *box, Person *aperson) {
|
|||||||
|
|
||||||
int i = 0;
|
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);
|
||||||
Serial.write(toprint);
|
if(debug)Serial.write(toprint);
|
||||||
sprintf(toprint, "rfid_uuid: %s\n", aperson->rfid_uuid);
|
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);
|
sprintf(toprint, "finger_uuid: %u\n", aperson->finger_uuid);
|
||||||
if (aperson->finger_uuid > maxID) maxID = aperson->finger_uuid;
|
|
||||||
if(debug)Serial.print(toprint);
|
if(debug)Serial.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);
|
if(debug)Serial.print(toprint);
|
||||||
|
|
||||||
for (i = 0; i < drinksMax; i++) {
|
for (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);
|
||||||
Serial.write(toprint);
|
if(debug)Serial.write(toprint);
|
||||||
sprintf(toprint, "Drink %d: %d\n", i, aperson->drinks_taken[i]);
|
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);
|
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() {
|
int update_pers_file() {
|
||||||
Person thisPerson = persons[lastPersonIndex];
|
Person thisPerson = persons[lastPersonIndex];
|
||||||
File write;
|
File write;
|
||||||
@ -370,7 +304,7 @@ int update_pers_file() {
|
|||||||
sprintf(tmp, "credits_left: %u\n", thisPerson.credits_left);
|
sprintf(tmp, "credits_left: %u\n", thisPerson.credits_left);
|
||||||
write.write(tmp, strlen(tmp));
|
write.write(tmp, strlen(tmp));
|
||||||
|
|
||||||
for (i = 0; i < drinksMax; i++) {
|
for (i = 0; i < box->maxDrink; i++) {
|
||||||
|
|
||||||
if (thisPerson.drinks_taken[i] != -1) {
|
if (thisPerson.drinks_taken[i] != -1) {
|
||||||
sprintf(tmp, "\ndrink_Count_%d: %d\n", i, thisPerson.drinks_taken[i]);
|
sprintf(tmp, "\ndrink_Count_%d: %d\n", i, thisPerson.drinks_taken[i]);
|
||||||
|
123
bluetooth.ino
Normal file
123
bluetooth.ino
Normal file
@ -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
|
@ -221,9 +221,6 @@ void getRFIDEnroll() {
|
|||||||
delay(1000); // debounce time
|
delay(1000); // debounce time
|
||||||
serial1_flush_buffer();
|
serial1_flush_buffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +252,7 @@ int write_pers_file(Person* thisPerson) {
|
|||||||
sprintf(tmp, "credits_left: %u\n", thisPerson->credits_left);
|
sprintf(tmp, "credits_left: %u\n", thisPerson->credits_left);
|
||||||
write.write(tmp, strlen(tmp));
|
write.write(tmp, strlen(tmp));
|
||||||
|
|
||||||
for (i = 0; i < drinksMax; i++) {
|
for (i = 0; i < box->maxDrink; i++) {
|
||||||
if (thisPerson->drinks_taken[i] != -1) {
|
if (thisPerson->drinks_taken[i] != -1) {
|
||||||
sprintf(tmp, "\ndrink_Count_%d: %d\n", i, thisPerson->drinks_taken[i]);
|
sprintf(tmp, "\ndrink_Count_%d: %d\n", i, thisPerson->drinks_taken[i]);
|
||||||
write.write(tmp, strlen(tmp));
|
write.write(tmp, strlen(tmp));
|
||||||
|
@ -11,7 +11,7 @@ void checkButton() {
|
|||||||
digitalWrite(led,HIGH);
|
digitalWrite(led,HIGH);
|
||||||
ledTime = millis();
|
ledTime = millis();
|
||||||
if (box->waiting == 0) {
|
if (box->waiting == 0) {
|
||||||
if (currentDrink == drinksMax - 1) currentDrink = -1;
|
if (currentDrink == box->maxDrink - 1) currentDrink = -1;
|
||||||
currentDrink++;
|
currentDrink++;
|
||||||
if(debug)Serial.println(box->drinks[currentDrink].name);
|
if(debug)Serial.println(box->drinks[currentDrink].name);
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user