System to manage inventory for a cooler. Allows real time check in of products via RFID, as well as check out. Also includes a scale to weigh products upon check out, and has a real time temperature tracking system that sounds an alert if the cooler gets too hot.

Dependencies:   DHT11 HX711 MFRC522 SDFileSystemEditied mbed

Committer:
vincentrc
Date:
Wed Mar 07 17:52:23 2018 +0000
Revision:
0:ad334aa4c7c4
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vincentrc 0:ad334aa4c7c4 1 #include <stdio.h>
vincentrc 0:ad334aa4c7c4 2 #include <iostream>
vincentrc 0:ad334aa4c7c4 3 #include <stdlib.h>
vincentrc 0:ad334aa4c7c4 4 #include <string.h>
vincentrc 0:ad334aa4c7c4 5 #include <string>
vincentrc 0:ad334aa4c7c4 6 #include "functions.h"
vincentrc 0:ad334aa4c7c4 7 #include "product.h"
vincentrc 0:ad334aa4c7c4 8 #include "HX711.h"
vincentrc 0:ad334aa4c7c4 9 #include "Dht11.h"
vincentrc 0:ad334aa4c7c4 10
vincentrc 0:ad334aa4c7c4 11 Dht11 sensor(D7);
vincentrc 0:ad334aa4c7c4 12 float maxtemp = 80;
vincentrc 0:ad334aa4c7c4 13 DigitalOut buzzer(D2);
vincentrc 0:ad334aa4c7c4 14 DigitalOut LED(PTB22);
vincentrc 0:ad334aa4c7c4 15
vincentrc 0:ad334aa4c7c4 16 volatile float Farenheit;
vincentrc 0:ad334aa4c7c4 17 volatile int Humidity;
vincentrc 0:ad334aa4c7c4 18 extern int id[10];
vincentrc 0:ad334aa4c7c4 19 extern int flag1;
vincentrc 0:ad334aa4c7c4 20 extern int flag2;
vincentrc 0:ad334aa4c7c4 21
vincentrc 0:ad334aa4c7c4 22 //Adds a new product type to the database
vincentrc 0:ad334aa4c7c4 23 struct product *addproduct(struct product *head)
vincentrc 0:ad334aa4c7c4 24 {
vincentrc 0:ad334aa4c7c4 25 struct product *newp = (struct product*)malloc(sizeof( struct product));
vincentrc 0:ad334aa4c7c4 26 char name[20];
vincentrc 0:ad334aa4c7c4 27 unsigned int pid1, pid2, pid3, pid4;
vincentrc 0:ad334aa4c7c4 28 float weight, priceper;
vincentrc 0:ad334aa4c7c4 29
vincentrc 0:ad334aa4c7c4 30 fflush(stdin);
vincentrc 0:ad334aa4c7c4 31
vincentrc 0:ad334aa4c7c4 32 printf("\n\rName:\n\r");
vincentrc 0:ad334aa4c7c4 33 scanf("%20s", &name);
vincentrc 0:ad334aa4c7c4 34 fflush(stdin);
vincentrc 0:ad334aa4c7c4 35 printf("\n\rpid(1):\n\r");
vincentrc 0:ad334aa4c7c4 36 scanf("%d", &pid1);
vincentrc 0:ad334aa4c7c4 37 printf("\n\rpid(2):\n\r");
vincentrc 0:ad334aa4c7c4 38 scanf("%d", &pid2);
vincentrc 0:ad334aa4c7c4 39 printf("\n\rpid(3):\n\r");
vincentrc 0:ad334aa4c7c4 40 scanf("%d", &pid3);
vincentrc 0:ad334aa4c7c4 41 printf("\n\rpid(4):\n\r");
vincentrc 0:ad334aa4c7c4 42 scanf("%d", &pid4);
vincentrc 0:ad334aa4c7c4 43 printf("\n\rPriceper:\n\r");
vincentrc 0:ad334aa4c7c4 44 scanf("%f", &priceper);
vincentrc 0:ad334aa4c7c4 45
vincentrc 0:ad334aa4c7c4 46 strcpy(newp->pname, name);
vincentrc 0:ad334aa4c7c4 47 newp->pid[0] = pid1;
vincentrc 0:ad334aa4c7c4 48 newp->pid[1] = pid2;
vincentrc 0:ad334aa4c7c4 49 newp->pid[2] = pid3;
vincentrc 0:ad334aa4c7c4 50 newp->pid[3] = pid4;
vincentrc 0:ad334aa4c7c4 51 newp->count = 1;
vincentrc 0:ad334aa4c7c4 52 newp->priceper = priceper;
vincentrc 0:ad334aa4c7c4 53
vincentrc 0:ad334aa4c7c4 54
vincentrc 0:ad334aa4c7c4 55 newp->next = head;
vincentrc 0:ad334aa4c7c4 56 head = newp;
vincentrc 0:ad334aa4c7c4 57
vincentrc 0:ad334aa4c7c4 58 std::cout << "\n\r\n\r";
vincentrc 0:ad334aa4c7c4 59
vincentrc 0:ad334aa4c7c4 60 return head;
vincentrc 0:ad334aa4c7c4 61 }
vincentrc 0:ad334aa4c7c4 62
vincentrc 0:ad334aa4c7c4 63 //Sorts the list by product name alphabetical order
vincentrc 0:ad334aa4c7c4 64 struct product *sortlist(struct product *head)
vincentrc 0:ad334aa4c7c4 65 {
vincentrc 0:ad334aa4c7c4 66 struct product *temp, *ptr, *prev;
vincentrc 0:ad334aa4c7c4 67 int x, check;
vincentrc 0:ad334aa4c7c4 68
vincentrc 0:ad334aa4c7c4 69 while(1)
vincentrc 0:ad334aa4c7c4 70 {
vincentrc 0:ad334aa4c7c4 71 check = 0;
vincentrc 0:ad334aa4c7c4 72 ptr = head;
vincentrc 0:ad334aa4c7c4 73 prev = head;
vincentrc 0:ad334aa4c7c4 74
vincentrc 0:ad334aa4c7c4 75 while((ptr->next != NULL) && (ptr != NULL))
vincentrc 0:ad334aa4c7c4 76 {
vincentrc 0:ad334aa4c7c4 77 if(strcmp(ptr->pname, ptr->next->pname) > 0)
vincentrc 0:ad334aa4c7c4 78 {
vincentrc 0:ad334aa4c7c4 79 if(ptr == head)
vincentrc 0:ad334aa4c7c4 80 {
vincentrc 0:ad334aa4c7c4 81 temp = ptr->next->next;
vincentrc 0:ad334aa4c7c4 82 ptr->next->next = ptr;
vincentrc 0:ad334aa4c7c4 83 head = ptr->next;
vincentrc 0:ad334aa4c7c4 84 ptr->next = temp;
vincentrc 0:ad334aa4c7c4 85 check = 1;
vincentrc 0:ad334aa4c7c4 86
vincentrc 0:ad334aa4c7c4 87 }
vincentrc 0:ad334aa4c7c4 88
vincentrc 0:ad334aa4c7c4 89 else
vincentrc 0:ad334aa4c7c4 90 {
vincentrc 0:ad334aa4c7c4 91 temp = ptr->next->next;
vincentrc 0:ad334aa4c7c4 92 prev->next = ptr->next;
vincentrc 0:ad334aa4c7c4 93 ptr->next->next = ptr;
vincentrc 0:ad334aa4c7c4 94 ptr->next = temp;
vincentrc 0:ad334aa4c7c4 95 check = 1;
vincentrc 0:ad334aa4c7c4 96 }
vincentrc 0:ad334aa4c7c4 97 }
vincentrc 0:ad334aa4c7c4 98
vincentrc 0:ad334aa4c7c4 99 if(ptr->next == NULL)
vincentrc 0:ad334aa4c7c4 100 break;
vincentrc 0:ad334aa4c7c4 101 else
vincentrc 0:ad334aa4c7c4 102 {
vincentrc 0:ad334aa4c7c4 103 prev = ptr;
vincentrc 0:ad334aa4c7c4 104 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 105 }
vincentrc 0:ad334aa4c7c4 106 }
vincentrc 0:ad334aa4c7c4 107
vincentrc 0:ad334aa4c7c4 108 //Breaks if no swap occured
vincentrc 0:ad334aa4c7c4 109 if(check == 0)
vincentrc 0:ad334aa4c7c4 110 break;
vincentrc 0:ad334aa4c7c4 111 }
vincentrc 0:ad334aa4c7c4 112
vincentrc 0:ad334aa4c7c4 113 return head;
vincentrc 0:ad334aa4c7c4 114 }
vincentrc 0:ad334aa4c7c4 115
vincentrc 0:ad334aa4c7c4 116 //Displays the inventory list to the user
vincentrc 0:ad334aa4c7c4 117 struct product* displaylist(struct product *head)
vincentrc 0:ad334aa4c7c4 118 {
vincentrc 0:ad334aa4c7c4 119 struct product *ptr;
vincentrc 0:ad334aa4c7c4 120
vincentrc 0:ad334aa4c7c4 121 if(head == NULL)
vincentrc 0:ad334aa4c7c4 122 {
vincentrc 0:ad334aa4c7c4 123 printf("\n\r\n\rNothing in stock!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 124 return head;
vincentrc 0:ad334aa4c7c4 125 }
vincentrc 0:ad334aa4c7c4 126
vincentrc 0:ad334aa4c7c4 127 head = sortlist(head);
vincentrc 0:ad334aa4c7c4 128
vincentrc 0:ad334aa4c7c4 129 ptr = head;
vincentrc 0:ad334aa4c7c4 130
vincentrc 0:ad334aa4c7c4 131 while(ptr != NULL)
vincentrc 0:ad334aa4c7c4 132 {
vincentrc 0:ad334aa4c7c4 133 //Doesn't print out of stock items
vincentrc 0:ad334aa4c7c4 134 if(ptr->count <= 0)
vincentrc 0:ad334aa4c7c4 135 {
vincentrc 0:ad334aa4c7c4 136 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 137 continue;
vincentrc 0:ad334aa4c7c4 138 }
vincentrc 0:ad334aa4c7c4 139
vincentrc 0:ad334aa4c7c4 140 //Clears input buffer
vincentrc 0:ad334aa4c7c4 141 fflush(stdin);
vincentrc 0:ad334aa4c7c4 142
vincentrc 0:ad334aa4c7c4 143 printf("\n\r%15s: ID: %4d%4d%4d%4d Price/lb: %6.2f In Stock: %d\n\r", ptr->pname, ptr->pid[0], ptr->pid[1],
vincentrc 0:ad334aa4c7c4 144 ptr->pid[2], ptr->pid[3], ptr->priceper, ptr->count);
vincentrc 0:ad334aa4c7c4 145 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 146 }
vincentrc 0:ad334aa4c7c4 147
vincentrc 0:ad334aa4c7c4 148 printf("\n\r\n\r");
vincentrc 0:ad334aa4c7c4 149 return head;
vincentrc 0:ad334aa4c7c4 150 }
vincentrc 0:ad334aa4c7c4 151
vincentrc 0:ad334aa4c7c4 152 //Frees the memory allocated for the inventory list
vincentrc 0:ad334aa4c7c4 153 void freelist(struct product *head)
vincentrc 0:ad334aa4c7c4 154 {
vincentrc 0:ad334aa4c7c4 155 struct product *ptr, *temp;
vincentrc 0:ad334aa4c7c4 156
vincentrc 0:ad334aa4c7c4 157 ptr = head;
vincentrc 0:ad334aa4c7c4 158
vincentrc 0:ad334aa4c7c4 159 while(ptr != NULL)
vincentrc 0:ad334aa4c7c4 160 {
vincentrc 0:ad334aa4c7c4 161 temp = ptr;
vincentrc 0:ad334aa4c7c4 162 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 163 free(temp);
vincentrc 0:ad334aa4c7c4 164 }
vincentrc 0:ad334aa4c7c4 165 }
vincentrc 0:ad334aa4c7c4 166
vincentrc 0:ad334aa4c7c4 167 //Saves the inventory list to a csv file
vincentrc 0:ad334aa4c7c4 168 void savelist(struct product *head)
vincentrc 0:ad334aa4c7c4 169 {
vincentrc 0:ad334aa4c7c4 170 FILE *fp;
vincentrc 0:ad334aa4c7c4 171 struct product *ptr;
vincentrc 0:ad334aa4c7c4 172
vincentrc 0:ad334aa4c7c4 173 ptr = head;
vincentrc 0:ad334aa4c7c4 174
vincentrc 0:ad334aa4c7c4 175 //Open file pointer to output file
vincentrc 0:ad334aa4c7c4 176 if((fp = fopen("/sd/inventory.txt", "w")) == NULL)
vincentrc 0:ad334aa4c7c4 177 perror("Error");
vincentrc 0:ad334aa4c7c4 178
vincentrc 0:ad334aa4c7c4 179 while(ptr != NULL)
vincentrc 0:ad334aa4c7c4 180 {
vincentrc 0:ad334aa4c7c4 181 //Outputs attributes
vincentrc 0:ad334aa4c7c4 182 fprintf(fp, "%s,%d,%d,%d,%d,%d,%.3f,\n", ptr->pname,
vincentrc 0:ad334aa4c7c4 183 ptr->pid[0], ptr->pid[1], ptr->pid[2], ptr->pid[3], ptr->count, ptr->priceper);
vincentrc 0:ad334aa4c7c4 184
vincentrc 0:ad334aa4c7c4 185 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 186 }
vincentrc 0:ad334aa4c7c4 187
vincentrc 0:ad334aa4c7c4 188 fclose(fp);
vincentrc 0:ad334aa4c7c4 189 }
vincentrc 0:ad334aa4c7c4 190
vincentrc 0:ad334aa4c7c4 191 //Loads the inventory list from the csv file
vincentrc 0:ad334aa4c7c4 192 struct product* loadlist()
vincentrc 0:ad334aa4c7c4 193 {
vincentrc 0:ad334aa4c7c4 194 FILE *fp;
vincentrc 0:ad334aa4c7c4 195 char line[512], *token;
vincentrc 0:ad334aa4c7c4 196 int x, flag = 0;
vincentrc 0:ad334aa4c7c4 197 struct product *newprod, *head, *prev;
vincentrc 0:ad334aa4c7c4 198
vincentrc 0:ad334aa4c7c4 199
vincentrc 0:ad334aa4c7c4 200 //Opens file pointer to input file
vincentrc 0:ad334aa4c7c4 201 if((fp = fopen("/sd/inventory.txt", "r")) == NULL)
vincentrc 0:ad334aa4c7c4 202 {
vincentrc 0:ad334aa4c7c4 203 printf("\n\r\n\rInventory is empty:\n\r\n\r");
vincentrc 0:ad334aa4c7c4 204 return NULL;
vincentrc 0:ad334aa4c7c4 205 }
vincentrc 0:ad334aa4c7c4 206
vincentrc 0:ad334aa4c7c4 207
vincentrc 0:ad334aa4c7c4 208 //Reads in next line of file
vincentrc 0:ad334aa4c7c4 209 while(fgets(line, 512, fp) != NULL)
vincentrc 0:ad334aa4c7c4 210 {
vincentrc 0:ad334aa4c7c4 211 //Breaks when end of file is reached
vincentrc 0:ad334aa4c7c4 212 if(feof(fp))
vincentrc 0:ad334aa4c7c4 213 break;
vincentrc 0:ad334aa4c7c4 214
vincentrc 0:ad334aa4c7c4 215 //Allocates memory for the product
vincentrc 0:ad334aa4c7c4 216 newprod = (struct product*)malloc(sizeof(struct product));
vincentrc 0:ad334aa4c7c4 217
vincentrc 0:ad334aa4c7c4 218 //Adds the product to the list in order (flag is 0 for the first product only)
vincentrc 0:ad334aa4c7c4 219 if(flag == 0)
vincentrc 0:ad334aa4c7c4 220 head = newprod;
vincentrc 0:ad334aa4c7c4 221 else
vincentrc 0:ad334aa4c7c4 222 prev->next = newprod;
vincentrc 0:ad334aa4c7c4 223
vincentrc 0:ad334aa4c7c4 224 //Moves prev up
vincentrc 0:ad334aa4c7c4 225 prev = newprod;
vincentrc 0:ad334aa4c7c4 226 newprod->next = NULL;
vincentrc 0:ad334aa4c7c4 227
vincentrc 0:ad334aa4c7c4 228 //Breaks csv line into tokens with comma as the delimiter
vincentrc 0:ad334aa4c7c4 229 token = strtok(line, ",");
vincentrc 0:ad334aa4c7c4 230
vincentrc 0:ad334aa4c7c4 231 //Iterates once for each attribute in the product structure
vincentrc 0:ad334aa4c7c4 232 for(x=0;x<7;x++)
vincentrc 0:ad334aa4c7c4 233 {
vincentrc 0:ad334aa4c7c4 234 if(x == 0)
vincentrc 0:ad334aa4c7c4 235 strcpy(newprod->pname, token);
vincentrc 0:ad334aa4c7c4 236
vincentrc 0:ad334aa4c7c4 237 else if(x == 1)
vincentrc 0:ad334aa4c7c4 238 newprod->pid[0] = atoi(token);
vincentrc 0:ad334aa4c7c4 239
vincentrc 0:ad334aa4c7c4 240 else if(x == 2)
vincentrc 0:ad334aa4c7c4 241 newprod->pid[1] = atoi(token);
vincentrc 0:ad334aa4c7c4 242
vincentrc 0:ad334aa4c7c4 243 else if(x == 3)
vincentrc 0:ad334aa4c7c4 244 newprod->pid[2] = atoi(token);
vincentrc 0:ad334aa4c7c4 245
vincentrc 0:ad334aa4c7c4 246 else if(x == 4)
vincentrc 0:ad334aa4c7c4 247 newprod->pid[3] = atoi(token);
vincentrc 0:ad334aa4c7c4 248
vincentrc 0:ad334aa4c7c4 249 else if(x == 5)
vincentrc 0:ad334aa4c7c4 250 newprod->count = atoi(token);
vincentrc 0:ad334aa4c7c4 251
vincentrc 0:ad334aa4c7c4 252 else
vincentrc 0:ad334aa4c7c4 253 newprod->priceper = atof(token);
vincentrc 0:ad334aa4c7c4 254
vincentrc 0:ad334aa4c7c4 255 //Goes to next token
vincentrc 0:ad334aa4c7c4 256 token = strtok(NULL, ",");
vincentrc 0:ad334aa4c7c4 257 }
vincentrc 0:ad334aa4c7c4 258
vincentrc 0:ad334aa4c7c4 259 //Sets flag so it's 1 for all iterations except the first
vincentrc 0:ad334aa4c7c4 260 flag = 1;
vincentrc 0:ad334aa4c7c4 261
vincentrc 0:ad334aa4c7c4 262 }
vincentrc 0:ad334aa4c7c4 263
vincentrc 0:ad334aa4c7c4 264 fclose(fp);
vincentrc 0:ad334aa4c7c4 265 return head;
vincentrc 0:ad334aa4c7c4 266 }
vincentrc 0:ad334aa4c7c4 267
vincentrc 0:ad334aa4c7c4 268 //Finds a product by its name and returns it or NULL if not found
vincentrc 0:ad334aa4c7c4 269 struct product* findbyname(char name[50], struct product *head)
vincentrc 0:ad334aa4c7c4 270 {
vincentrc 0:ad334aa4c7c4 271 struct product *ptr;
vincentrc 0:ad334aa4c7c4 272
vincentrc 0:ad334aa4c7c4 273 ptr = head;
vincentrc 0:ad334aa4c7c4 274
vincentrc 0:ad334aa4c7c4 275 while(ptr != NULL)
vincentrc 0:ad334aa4c7c4 276 {
vincentrc 0:ad334aa4c7c4 277 if(strcmp(ptr->pname, name) == 0)
vincentrc 0:ad334aa4c7c4 278 return ptr;
vincentrc 0:ad334aa4c7c4 279
vincentrc 0:ad334aa4c7c4 280 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 281 }
vincentrc 0:ad334aa4c7c4 282
vincentrc 0:ad334aa4c7c4 283 return NULL;
vincentrc 0:ad334aa4c7c4 284
vincentrc 0:ad334aa4c7c4 285 }
vincentrc 0:ad334aa4c7c4 286
vincentrc 0:ad334aa4c7c4 287 struct product* findbyid(int id[10], struct product *head)
vincentrc 0:ad334aa4c7c4 288 {
vincentrc 0:ad334aa4c7c4 289 struct product *ptr;
vincentrc 0:ad334aa4c7c4 290 int x;
vincentrc 0:ad334aa4c7c4 291
vincentrc 0:ad334aa4c7c4 292 ptr = head;
vincentrc 0:ad334aa4c7c4 293
vincentrc 0:ad334aa4c7c4 294 while(ptr != NULL)
vincentrc 0:ad334aa4c7c4 295 {
vincentrc 0:ad334aa4c7c4 296 for(x=0;x<4;x++)
vincentrc 0:ad334aa4c7c4 297 {
vincentrc 0:ad334aa4c7c4 298 if(id[x] != ptr->pid[x])
vincentrc 0:ad334aa4c7c4 299 break;
vincentrc 0:ad334aa4c7c4 300
vincentrc 0:ad334aa4c7c4 301 if(x == 3)
vincentrc 0:ad334aa4c7c4 302 return ptr;
vincentrc 0:ad334aa4c7c4 303 }
vincentrc 0:ad334aa4c7c4 304
vincentrc 0:ad334aa4c7c4 305
vincentrc 0:ad334aa4c7c4 306 ptr = ptr->next;
vincentrc 0:ad334aa4c7c4 307 }
vincentrc 0:ad334aa4c7c4 308
vincentrc 0:ad334aa4c7c4 309 return NULL;
vincentrc 0:ad334aa4c7c4 310 }
vincentrc 0:ad334aa4c7c4 311
vincentrc 0:ad334aa4c7c4 312 //Checks in an item of given name by incrementing that product's count attribute
vincentrc 0:ad334aa4c7c4 313 struct product* checkin(struct product *head)
vincentrc 0:ad334aa4c7c4 314 {
vincentrc 0:ad334aa4c7c4 315 struct product *ptr;
vincentrc 0:ad334aa4c7c4 316
vincentrc 0:ad334aa4c7c4 317 char entry[20];
vincentrc 0:ad334aa4c7c4 318
vincentrc 0:ad334aa4c7c4 319 printf("\n\r\n\rPlease enter product name:\n\r\n\r");
vincentrc 0:ad334aa4c7c4 320
vincentrc 0:ad334aa4c7c4 321 fflush(stdin);
vincentrc 0:ad334aa4c7c4 322 scanf("%20s", &entry);
vincentrc 0:ad334aa4c7c4 323 fflush(stdin);
vincentrc 0:ad334aa4c7c4 324 if((ptr = findbyname(entry, head)) == NULL)
vincentrc 0:ad334aa4c7c4 325 printf("\n\r\n\rNo such product!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 326 else
vincentrc 0:ad334aa4c7c4 327 ptr->count++;
vincentrc 0:ad334aa4c7c4 328
vincentrc 0:ad334aa4c7c4 329 return head;
vincentrc 0:ad334aa4c7c4 330 }
vincentrc 0:ad334aa4c7c4 331
vincentrc 0:ad334aa4c7c4 332 //Checks a product out of inventory, and gives a price
vincentrc 0:ad334aa4c7c4 333 struct product* checkout(struct product *head, HX711 scale1)
vincentrc 0:ad334aa4c7c4 334 {
vincentrc 0:ad334aa4c7c4 335 struct product *ptr;
vincentrc 0:ad334aa4c7c4 336 char entry[20];
vincentrc 0:ad334aa4c7c4 337 float weight = 3.5, price;
vincentrc 0:ad334aa4c7c4 338 int x, y;
vincentrc 0:ad334aa4c7c4 339
vincentrc 0:ad334aa4c7c4 340
vincentrc 0:ad334aa4c7c4 341 printf("\n\r\n\rPress:\n\r1: rfid\n\r2: manual\n\r\n\r");
vincentrc 0:ad334aa4c7c4 342
vincentrc 0:ad334aa4c7c4 343 scanf("%20s", &entry);
vincentrc 0:ad334aa4c7c4 344
vincentrc 0:ad334aa4c7c4 345 if(strcmp("1", entry) == 0)
vincentrc 0:ad334aa4c7c4 346 {
vincentrc 0:ad334aa4c7c4 347 printf("\n\r\n\rPlease scan rfid:\n\r\n\r");
vincentrc 0:ad334aa4c7c4 348
vincentrc 0:ad334aa4c7c4 349 flag1 = 0;
vincentrc 0:ad334aa4c7c4 350 flag2 = 0;
vincentrc 0:ad334aa4c7c4 351
vincentrc 0:ad334aa4c7c4 352 //Waits for rfid interrupt
vincentrc 0:ad334aa4c7c4 353 while(flag2 == 0)
vincentrc 0:ad334aa4c7c4 354 {
vincentrc 0:ad334aa4c7c4 355 wait(0.5);
vincentrc 0:ad334aa4c7c4 356 continue;
vincentrc 0:ad334aa4c7c4 357 }
vincentrc 0:ad334aa4c7c4 358
vincentrc 0:ad334aa4c7c4 359 if((ptr = findbyid(id, head)) == NULL)
vincentrc 0:ad334aa4c7c4 360 {
vincentrc 0:ad334aa4c7c4 361 printf("\n\r\n\rNo such item!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 362 flag1 = 1;
vincentrc 0:ad334aa4c7c4 363 return head;
vincentrc 0:ad334aa4c7c4 364 }
vincentrc 0:ad334aa4c7c4 365
vincentrc 0:ad334aa4c7c4 366 else if(ptr->count <= 0)
vincentrc 0:ad334aa4c7c4 367 {
vincentrc 0:ad334aa4c7c4 368 printf("\n\r\n\rOut of stock!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 369 flag1 = 1;
vincentrc 0:ad334aa4c7c4 370 return head;
vincentrc 0:ad334aa4c7c4 371 }
vincentrc 0:ad334aa4c7c4 372
vincentrc 0:ad334aa4c7c4 373 }
vincentrc 0:ad334aa4c7c4 374
vincentrc 0:ad334aa4c7c4 375 else if(strcmp("2", entry) == 0)
vincentrc 0:ad334aa4c7c4 376 {
vincentrc 0:ad334aa4c7c4 377 printf("\n\r\n\rPlease enter product name:\n\r\n\r");
vincentrc 0:ad334aa4c7c4 378 fflush(stdin);
vincentrc 0:ad334aa4c7c4 379 scanf("%20s", &entry);
vincentrc 0:ad334aa4c7c4 380 fflush(stdin);
vincentrc 0:ad334aa4c7c4 381
vincentrc 0:ad334aa4c7c4 382
vincentrc 0:ad334aa4c7c4 383 if((ptr = findbyname(entry, head)) == NULL)
vincentrc 0:ad334aa4c7c4 384 {
vincentrc 0:ad334aa4c7c4 385 printf("\n\r\n\rNo such item!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 386 return head;
vincentrc 0:ad334aa4c7c4 387 }
vincentrc 0:ad334aa4c7c4 388
vincentrc 0:ad334aa4c7c4 389 else if(ptr->count <= 0)
vincentrc 0:ad334aa4c7c4 390 {
vincentrc 0:ad334aa4c7c4 391 printf("\n\r\n\rOut of stock!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 392 return head;
vincentrc 0:ad334aa4c7c4 393 }
vincentrc 0:ad334aa4c7c4 394 }
vincentrc 0:ad334aa4c7c4 395 else
vincentrc 0:ad334aa4c7c4 396 {
vincentrc 0:ad334aa4c7c4 397 printf("\n\r\n\rIncorrect entry\n\r\n\r");
vincentrc 0:ad334aa4c7c4 398 return head;
vincentrc 0:ad334aa4c7c4 399 }
vincentrc 0:ad334aa4c7c4 400
vincentrc 0:ad334aa4c7c4 401
vincentrc 0:ad334aa4c7c4 402 weight = scale(scale1);
vincentrc 0:ad334aa4c7c4 403 price = ptr->priceper * weight;
vincentrc 0:ad334aa4c7c4 404 printf("\n\r\n\rPrice: %f\n\r\n\r", price);
vincentrc 0:ad334aa4c7c4 405 ptr->count--;
vincentrc 0:ad334aa4c7c4 406
vincentrc 0:ad334aa4c7c4 407
vincentrc 0:ad334aa4c7c4 408 flag1 = 1;
vincentrc 0:ad334aa4c7c4 409 return head;
vincentrc 0:ad334aa4c7c4 410 }
vincentrc 0:ad334aa4c7c4 411
vincentrc 0:ad334aa4c7c4 412 //Temperature sensor rti isr
vincentrc 0:ad334aa4c7c4 413 void timer_temp_hum_isr()
vincentrc 0:ad334aa4c7c4 414 {
vincentrc 0:ad334aa4c7c4 415 sensor.read();
vincentrc 0:ad334aa4c7c4 416 Farenheit = sensor.getFahrenheit();
vincentrc 0:ad334aa4c7c4 417 Humidity = sensor.getHumidity();
vincentrc 0:ad334aa4c7c4 418
vincentrc 0:ad334aa4c7c4 419 if(Farenheit > maxtemp)
vincentrc 0:ad334aa4c7c4 420 {
vincentrc 0:ad334aa4c7c4 421 buzzer = 1;
vincentrc 0:ad334aa4c7c4 422 LED = 0;
vincentrc 0:ad334aa4c7c4 423 }
vincentrc 0:ad334aa4c7c4 424 else
vincentrc 0:ad334aa4c7c4 425 {
vincentrc 0:ad334aa4c7c4 426 buzzer = 0;
vincentrc 0:ad334aa4c7c4 427 LED = 1;
vincentrc 0:ad334aa4c7c4 428 }
vincentrc 0:ad334aa4c7c4 429 }
vincentrc 0:ad334aa4c7c4 430
vincentrc 0:ad334aa4c7c4 431 //Prints the current teperature
vincentrc 0:ad334aa4c7c4 432 void getstatus()
vincentrc 0:ad334aa4c7c4 433 {
vincentrc 0:ad334aa4c7c4 434 printf("\n\rCurrent Temperature: %.2f F\n\r", Farenheit);
vincentrc 0:ad334aa4c7c4 435 }
vincentrc 0:ad334aa4c7c4 436
vincentrc 0:ad334aa4c7c4 437 //Sets max alowable temperature
vincentrc 0:ad334aa4c7c4 438 void setmax()
vincentrc 0:ad334aa4c7c4 439 {
vincentrc 0:ad334aa4c7c4 440 printf("\n\r\n\rEnter max temperature: ");
vincentrc 0:ad334aa4c7c4 441 scanf("%f", &maxtemp);
vincentrc 0:ad334aa4c7c4 442 printf("\n\r\n\r");
vincentrc 0:ad334aa4c7c4 443 }
vincentrc 0:ad334aa4c7c4 444
vincentrc 0:ad334aa4c7c4 445 struct product* findrfid(int rfid[4], struct product *head)
vincentrc 0:ad334aa4c7c4 446 {
vincentrc 0:ad334aa4c7c4 447 FILE *fp;
vincentrc 0:ad334aa4c7c4 448 char line[512], *token;
vincentrc 0:ad334aa4c7c4 449 int x, flag = 0, match = 0;
vincentrc 0:ad334aa4c7c4 450 struct product *newprod, *ptr;
vincentrc 0:ad334aa4c7c4 451 uint8_t temp;
vincentrc 0:ad334aa4c7c4 452
vincentrc 0:ad334aa4c7c4 453 //Opens file pointer to input file
vincentrc 0:ad334aa4c7c4 454 if((fp = fopen("/sd/rfiddata.txt", "r")) == NULL)
vincentrc 0:ad334aa4c7c4 455 perror("Error");
vincentrc 0:ad334aa4c7c4 456
vincentrc 0:ad334aa4c7c4 457
vincentrc 0:ad334aa4c7c4 458 //Reads in next line of file
vincentrc 0:ad334aa4c7c4 459 while(fgets(line, 512, fp) != NULL)
vincentrc 0:ad334aa4c7c4 460 {
vincentrc 0:ad334aa4c7c4 461 match = 0;
vincentrc 0:ad334aa4c7c4 462
vincentrc 0:ad334aa4c7c4 463 //Breaks csv line into tokens with comma as the delimiter
vincentrc 0:ad334aa4c7c4 464 token = strtok(line, ",");
vincentrc 0:ad334aa4c7c4 465
vincentrc 0:ad334aa4c7c4 466 for(x=0;x<4;x++)
vincentrc 0:ad334aa4c7c4 467 {
vincentrc 0:ad334aa4c7c4 468 if(rfid[x] != atoi(token))
vincentrc 0:ad334aa4c7c4 469 break;
vincentrc 0:ad334aa4c7c4 470
vincentrc 0:ad334aa4c7c4 471 //Goes to next token
vincentrc 0:ad334aa4c7c4 472 token = strtok(NULL, ",");
vincentrc 0:ad334aa4c7c4 473
vincentrc 0:ad334aa4c7c4 474 if(x == 3)
vincentrc 0:ad334aa4c7c4 475 match = 1;
vincentrc 0:ad334aa4c7c4 476 }
vincentrc 0:ad334aa4c7c4 477
vincentrc 0:ad334aa4c7c4 478 if(match == 1)
vincentrc 0:ad334aa4c7c4 479 {
vincentrc 0:ad334aa4c7c4 480
vincentrc 0:ad334aa4c7c4 481 if((ptr = findbyname(token, head)) != NULL)
vincentrc 0:ad334aa4c7c4 482 {
vincentrc 0:ad334aa4c7c4 483 ptr->count++;
vincentrc 0:ad334aa4c7c4 484 fclose(fp);
vincentrc 0:ad334aa4c7c4 485 return head;
vincentrc 0:ad334aa4c7c4 486 }
vincentrc 0:ad334aa4c7c4 487
vincentrc 0:ad334aa4c7c4 488 //Allocates memory for the product
vincentrc 0:ad334aa4c7c4 489 newprod = (struct product*)malloc(sizeof(struct product));
vincentrc 0:ad334aa4c7c4 490
vincentrc 0:ad334aa4c7c4 491 //Fills in new product attributes
vincentrc 0:ad334aa4c7c4 492 strcpy(newprod->pname, token);
vincentrc 0:ad334aa4c7c4 493 newprod->count = 1;
vincentrc 0:ad334aa4c7c4 494
vincentrc 0:ad334aa4c7c4 495 //Goes to next token
vincentrc 0:ad334aa4c7c4 496 token = strtok(NULL, ",");
vincentrc 0:ad334aa4c7c4 497 newprod->priceper = atof(token);
vincentrc 0:ad334aa4c7c4 498
vincentrc 0:ad334aa4c7c4 499 //Fills id
vincentrc 0:ad334aa4c7c4 500 newprod->pid[0] = rfid[0];
vincentrc 0:ad334aa4c7c4 501 newprod->pid[1] = rfid[1];
vincentrc 0:ad334aa4c7c4 502 newprod->pid[2] = rfid[2];
vincentrc 0:ad334aa4c7c4 503 newprod->pid[3] = rfid[3];
vincentrc 0:ad334aa4c7c4 504
vincentrc 0:ad334aa4c7c4 505 //Adds to list
vincentrc 0:ad334aa4c7c4 506 newprod->next = head;
vincentrc 0:ad334aa4c7c4 507 head = newprod;
vincentrc 0:ad334aa4c7c4 508 break;
vincentrc 0:ad334aa4c7c4 509 }
vincentrc 0:ad334aa4c7c4 510
vincentrc 0:ad334aa4c7c4 511 else
vincentrc 0:ad334aa4c7c4 512 {
vincentrc 0:ad334aa4c7c4 513 continue;
vincentrc 0:ad334aa4c7c4 514 }
vincentrc 0:ad334aa4c7c4 515
vincentrc 0:ad334aa4c7c4 516 }
vincentrc 0:ad334aa4c7c4 517
vincentrc 0:ad334aa4c7c4 518 fclose(fp);
vincentrc 0:ad334aa4c7c4 519 return head;
vincentrc 0:ad334aa4c7c4 520 }