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 "mbed.h"
vincentrc 0:ad334aa4c7c4 2 #include <stdio.h>
vincentrc 0:ad334aa4c7c4 3 #include <iostream>
vincentrc 0:ad334aa4c7c4 4 #include <stdlib.h>
vincentrc 0:ad334aa4c7c4 5 #include <string.h>
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 "SDFileSystem.h"
vincentrc 0:ad334aa4c7c4 10 #include "Dht11.h"
vincentrc 0:ad334aa4c7c4 11 #include "MFRC522.h"
vincentrc 0:ad334aa4c7c4 12 #define SPI_MOSI D11
vincentrc 0:ad334aa4c7c4 13 #define SPI_MISO D12
vincentrc 0:ad334aa4c7c4 14 #define SPI_SCLK D13
vincentrc 0:ad334aa4c7c4 15 #define SPI_CS D10
vincentrc 0:ad334aa4c7c4 16 #define MF_RESET D9
vincentrc 0:ad334aa4c7c4 17
vincentrc 0:ad334aa4c7c4 18
vincentrc 0:ad334aa4c7c4 19 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
vincentrc 0:ad334aa4c7c4 20 MFRC522 RfChip(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
vincentrc 0:ad334aa4c7c4 21
vincentrc 0:ad334aa4c7c4 22 Ticker ticker;
vincentrc 0:ad334aa4c7c4 23 Ticker rfidtick;
vincentrc 0:ad334aa4c7c4 24
vincentrc 0:ad334aa4c7c4 25 void rfidsense();
vincentrc 0:ad334aa4c7c4 26 struct product *head = NULL;
vincentrc 0:ad334aa4c7c4 27 int id[10] = {0,0,0,0,0,0,0,0,0,0};
vincentrc 0:ad334aa4c7c4 28 int flag1 =1, flag2;
vincentrc 0:ad334aa4c7c4 29
vincentrc 0:ad334aa4c7c4 30 int main()
vincentrc 0:ad334aa4c7c4 31 {
vincentrc 0:ad334aa4c7c4 32 //Declarations and initializations
vincentrc 0:ad334aa4c7c4 33 char k[5];
vincentrc 0:ad334aa4c7c4 34 HX711 scale1(A0,A1);
vincentrc 0:ad334aa4c7c4 35 ticker.attach(&timer_temp_hum_isr, 2);
vincentrc 0:ad334aa4c7c4 36 rfidtick.attach(&rfidsense, .25);
vincentrc 0:ad334aa4c7c4 37 head = loadlist();
vincentrc 0:ad334aa4c7c4 38 RfChip.PCD_Init();
vincentrc 0:ad334aa4c7c4 39
vincentrc 0:ad334aa4c7c4 40
vincentrc 0:ad334aa4c7c4 41 while(1)
vincentrc 0:ad334aa4c7c4 42 {
vincentrc 0:ad334aa4c7c4 43 printf("\n\r1: Add product to database\n\r2: Check in product\n\r3: See inventory\n\r4: "
vincentrc 0:ad334aa4c7c4 44 "Check out product\n\r5: Cooler Status\n\r6: Set max temperature\n\r7: Quit\n\r\n\r");
vincentrc 0:ad334aa4c7c4 45 scanf("%5s", &k);
vincentrc 0:ad334aa4c7c4 46
vincentrc 0:ad334aa4c7c4 47
vincentrc 0:ad334aa4c7c4 48 //User choices
vincentrc 0:ad334aa4c7c4 49 if(strcmp(k, "1") == 0)
vincentrc 0:ad334aa4c7c4 50 head = addproduct(head);
vincentrc 0:ad334aa4c7c4 51
vincentrc 0:ad334aa4c7c4 52 else if(strcmp(k, "2") == 0)
vincentrc 0:ad334aa4c7c4 53 head = checkin(head);
vincentrc 0:ad334aa4c7c4 54
vincentrc 0:ad334aa4c7c4 55 else if(strcmp(k, "3") == 0)
vincentrc 0:ad334aa4c7c4 56 head = displaylist(head);
vincentrc 0:ad334aa4c7c4 57
vincentrc 0:ad334aa4c7c4 58 else if(strcmp(k, "4") == 0)
vincentrc 0:ad334aa4c7c4 59 head = checkout(head, scale1);
vincentrc 0:ad334aa4c7c4 60
vincentrc 0:ad334aa4c7c4 61 else if(strcmp(k, "5") == 0)
vincentrc 0:ad334aa4c7c4 62 getstatus();
vincentrc 0:ad334aa4c7c4 63
vincentrc 0:ad334aa4c7c4 64 else if(strcmp(k, "6") == 0)
vincentrc 0:ad334aa4c7c4 65 setmax();
vincentrc 0:ad334aa4c7c4 66
vincentrc 0:ad334aa4c7c4 67 else if(strcmp(k, "7") == 0)
vincentrc 0:ad334aa4c7c4 68 break;
vincentrc 0:ad334aa4c7c4 69
vincentrc 0:ad334aa4c7c4 70 //Clears input buffer
vincentrc 0:ad334aa4c7c4 71 fflush(stdin);
vincentrc 0:ad334aa4c7c4 72 }
vincentrc 0:ad334aa4c7c4 73
vincentrc 0:ad334aa4c7c4 74 if(head == NULL)
vincentrc 0:ad334aa4c7c4 75 return 0;
vincentrc 0:ad334aa4c7c4 76
vincentrc 0:ad334aa4c7c4 77
vincentrc 0:ad334aa4c7c4 78 savelist(head);
vincentrc 0:ad334aa4c7c4 79
vincentrc 0:ad334aa4c7c4 80 freelist(head);
vincentrc 0:ad334aa4c7c4 81 return 0;
vincentrc 0:ad334aa4c7c4 82 }
vincentrc 0:ad334aa4c7c4 83
vincentrc 0:ad334aa4c7c4 84 void rfidsense()
vincentrc 0:ad334aa4c7c4 85 {
vincentrc 0:ad334aa4c7c4 86
vincentrc 0:ad334aa4c7c4 87
vincentrc 0:ad334aa4c7c4 88 // Look for new cards
vincentrc 0:ad334aa4c7c4 89 if ( ! RfChip.PICC_IsNewCardPresent())
vincentrc 0:ad334aa4c7c4 90 {
vincentrc 0:ad334aa4c7c4 91 return;
vincentrc 0:ad334aa4c7c4 92 }
vincentrc 0:ad334aa4c7c4 93
vincentrc 0:ad334aa4c7c4 94 // Select one of the cards
vincentrc 0:ad334aa4c7c4 95 if ( ! RfChip.PICC_ReadCardSerial())
vincentrc 0:ad334aa4c7c4 96 {
vincentrc 0:ad334aa4c7c4 97 return;
vincentrc 0:ad334aa4c7c4 98 }
vincentrc 0:ad334aa4c7c4 99
vincentrc 0:ad334aa4c7c4 100
vincentrc 0:ad334aa4c7c4 101 for (uint8_t i = 0; i < RfChip.uid.size; i++)
vincentrc 0:ad334aa4c7c4 102 {
vincentrc 0:ad334aa4c7c4 103 id[i] = RfChip.uid.uidByte[i];
vincentrc 0:ad334aa4c7c4 104 printf(" %d ", RfChip.uid.uidByte[i]);
vincentrc 0:ad334aa4c7c4 105 }
vincentrc 0:ad334aa4c7c4 106
vincentrc 0:ad334aa4c7c4 107 //Add corresponding product to list based on rfid
vincentrc 0:ad334aa4c7c4 108 if(flag1 == 1)
vincentrc 0:ad334aa4c7c4 109 head = findrfid(id, head);
vincentrc 0:ad334aa4c7c4 110
vincentrc 0:ad334aa4c7c4 111 flag2 = 1;
vincentrc 0:ad334aa4c7c4 112
vincentrc 0:ad334aa4c7c4 113 printf("\n\r\n\rRFID Scanned!!\n\r\n\r");
vincentrc 0:ad334aa4c7c4 114 }
vincentrc 0:ad334aa4c7c4 115