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
main.cpp@0:ad334aa4c7c4, 2018-03-07 (annotated)
- Committer:
- vincentrc
- Date:
- Wed Mar 07 17:52:23 2018 +0000
- Revision:
- 0:ad334aa4c7c4
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New 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 |