แก้ให้แล้ว

Dependencies:   NOKIA_5110 mbed

Fork of Lost-Found_BOX by FRA221:A

Committer:
mustwillza
Date:
Mon Dec 07 19:31:30 2015 +0000
Revision:
9:5944142f8b40
Parent:
8:e683edc8a530
Child:
10:323219f2a084
Well done.; Without similar rfid on deposit and ldr

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mustwillza 0:8b94afcb61eb 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
mustwillza 0:8b94afcb61eb 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
mustwillza 0:8b94afcb61eb 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
mustwillza 0:8b94afcb61eb 4 //Connect as follows:
mustwillza 0:8b94afcb61eb 5 //RFID pins -> Nucleo header CN5 (Arduino-compatible header)
mustwillza 0:8b94afcb61eb 6 //----------------------------------------
mustwillza 0:8b94afcb61eb 7 //RFID IRQ=pin5 -> Not used. Leave open
mustwillza 0:8b94afcb61eb 8 //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12
mustwillza 0:8b94afcb61eb 9 //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11
mustwillza 0:8b94afcb61eb 10 //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13
kantapon501 1:568e35232180 11 //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10 SlaveSelect
mustwillza 0:8b94afcb61eb 12 //RFID RST=pin7 -> Nucleo =PA_9=D8
kantapon501 5:8e3bd2501b17 13 //3.3V and Gnd to the respective pins
mustwillza 0:8b94afcb61eb 14 #include "mbed.h"
mustwillza 0:8b94afcb61eb 15 #include "MFRC522.h"
kantapon501 1:568e35232180 16 #include "NOKIA_5110.h" // Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
kantapon501 2:5764ad3214cd 17 #define MF_RESET D9
mustwillza 4:75346bd905c0 18 #include "speaker.h"
mustwillza 7:725f5fb7e3a3 19 #include "myESP.h"
mustwillza 7:725f5fb7e3a3 20 #include "myRFID.h"
mustwillza 7:725f5fb7e3a3 21 #include "myLCD4884.h"
mustwillza 8:e683edc8a530 22 #include <ctype.h>
mustwillza 0:8b94afcb61eb 23 DigitalOut LedGreen(LED1);
kantapon501 1:568e35232180 24 DigitalOut spi_address[2] = {SPI_CS,PB_4};
mustwillza 0:8b94afcb61eb 25 //Serial connection to PC for output
mustwillza 7:725f5fb7e3a3 26 Serial esp(D8, D2); //tx rx
mustwillza 0:8b94afcb61eb 27 Serial pc(SERIAL_TX, SERIAL_RX);
mustwillza 4:75346bd905c0 28 Speakers speak(D3);
mustwillza 4:75346bd905c0 29 DigitalOut lock(PB_13);
mustwillza 0:8b94afcb61eb 30 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
kantapon501 6:6635082215c7 31 char buffers[5]={'\0'};
kantapon501 6:6635082215c7 32 char IDs[17]={'\0'};
mustwillza 7:725f5fb7e3a3 33
mustwillza 7:725f5fb7e3a3 34 void wifiInitial(){
mustwillza 7:725f5fb7e3a3 35 pc.baud(115200);
mustwillza 7:725f5fb7e3a3 36 esp.baud(9600);
mustwillza 7:725f5fb7e3a3 37 string ssid = "1544_2G";
mustwillza 7:725f5fb7e3a3 38 string pass = "fiborobot" ;
mustwillza 7:725f5fb7e3a3 39
mustwillza 7:725f5fb7e3a3 40 if(setupESP(ssid,pass) == 1) {
mustwillza 7:725f5fb7e3a3 41 pc.printf("System connected to %s with %s as password\n",ssid.c_str(),pass.c_str());
mustwillza 7:725f5fb7e3a3 42 pc.printf("System Initialized :: ESP8266 Module Ready!\n");
mustwillza 7:725f5fb7e3a3 43 wait(2);
mustwillza 7:725f5fb7e3a3 44 }
kantapon501 1:568e35232180 45 }
mustwillza 7:725f5fb7e3a3 46
mustwillza 0:8b94afcb61eb 47 int main(void) {
mustwillza 7:725f5fb7e3a3 48 // Init. LCD Pin
kantapon501 1:568e35232180 49 LcdPins myPins;
kantapon501 1:568e35232180 50 myPins.sce = PB_4; //D5 ActiveLow SlaveSelect
mustwillza 0:8b94afcb61eb 51 myPins.rst = PB_10; //D6
kantapon501 1:568e35232180 52 myPins.dc = PA_8; //D7
kantapon501 1:568e35232180 53 myPins.mosi = PA_7; //SPI_MOSI;
mustwillza 0:8b94afcb61eb 54 myPins.miso = NC;
mustwillza 0:8b94afcb61eb 55 myPins.sclk = PA_5; //SPI_SCK;
mustwillza 7:725f5fb7e3a3 56
mustwillza 7:725f5fb7e3a3 57 // Init. LCD Chip
kantapon501 1:568e35232180 58 NokiaLcd myLcd( myPins );
mustwillza 0:8b94afcb61eb 59 myLcd.InitLcd(); // LCD is reset and DDRAM is cleared
mustwillza 7:725f5fb7e3a3 60 myLcd.DrawString("System Initializing...");
mustwillza 0:8b94afcb61eb 61 myLcd.stop();
kantapon501 1:568e35232180 62
mustwillza 7:725f5fb7e3a3 63 // Init. esp8266
mustwillza 7:725f5fb7e3a3 64 wifiInitial();
mustwillza 7:725f5fb7e3a3 65 char name[20];
mustwillza 7:725f5fb7e3a3 66 char sid[20];
mustwillza 7:725f5fb7e3a3 67 char tel[10];
mustwillza 7:725f5fb7e3a3 68 char stat_uid[3];
mustwillza 7:725f5fb7e3a3 69
mustwillza 7:725f5fb7e3a3 70 // Init.RFID Variable
mustwillza 7:725f5fb7e3a3 71 uint8_t RFID[10];
mustwillza 7:725f5fb7e3a3 72 int checker = 0;
mustwillza 7:725f5fb7e3a3 73 int checks = 0;
mustwillza 7:725f5fb7e3a3 74 int mode = 0;
mustwillza 7:725f5fb7e3a3 75 int submode = 0;
kantapon501 1:568e35232180 76 pc.printf("starting...\n");
mustwillza 7:725f5fb7e3a3 77
kantapon501 1:568e35232180 78 // Init. RC522 Chip
kantapon501 1:568e35232180 79 RfChip.PCD_Init();
kantapon501 1:568e35232180 80 pc.printf("Begin RFID!\n");
mustwillza 7:725f5fb7e3a3 81
mustwillza 7:725f5fb7e3a3 82 /* ===== System Initialized ===== */
mustwillza 7:725f5fb7e3a3 83 myLcd.InitLcd();
mustwillza 7:725f5fb7e3a3 84 myLcd.DrawString("Welcome to LOST & FOUND BOX V.1");
mustwillza 7:725f5fb7e3a3 85 myLcd.stop();
mustwillza 7:725f5fb7e3a3 86
mustwillza 8:e683edc8a530 87
mustwillza 8:e683edc8a530 88 while(true){//Loop around
mustwillza 8:e683edc8a530 89 wait(1);
mustwillza 8:e683edc8a530 90 getStatus("192.168.1.88","/l-f-box/getdata.php?check=1",stat_uid); //Recheck now status
mustwillza 9:5944142f8b40 91 lock = 0;
mustwillza 8:e683edc8a530 92
mustwillza 8:e683edc8a530 93
mustwillza 8:e683edc8a530 94 if(isalnum((int)stat_uid[0])){
mustwillza 8:e683edc8a530 95 mode = 0; //It have an item
mustwillza 8:e683edc8a530 96 submode=-1;
mustwillza 8:e683edc8a530 97 }else{
mustwillza 8:e683edc8a530 98 mode = 1; //Doesn't have an item
mustwillza 8:e683edc8a530 99 submode=0;
mustwillza 8:e683edc8a530 100 }
mustwillza 8:e683edc8a530 101
mustwillza 7:725f5fb7e3a3 102
mustwillza 8:e683edc8a530 103
mustwillza 8:e683edc8a530 104 while(mode == 0){ //Withdraw Process (Item in the box!)
mustwillza 8:e683edc8a530 105 pc.printf("Withdraw process...");
mustwillza 8:e683edc8a530 106 if(stat_uid[0] == 'X'){ //Unlocked!
mustwillza 8:e683edc8a530 107 speak.speakRight();
mustwillza 8:e683edc8a530 108 wait(0.5);
mustwillza 8:e683edc8a530 109 myLcd.InitLcd();
mustwillza 8:e683edc8a530 110 myLcd.SetXY(20,2);
mustwillza 8:e683edc8a530 111 myLcd.DrawString("UNLOCKED!");
mustwillza 8:e683edc8a530 112 myLcd.SetXY(16,2);
mustwillza 8:e683edc8a530 113 myLcd.DrawString("TAP A CARD...");
mustwillza 8:e683edc8a530 114 myLcd.stop();
mustwillza 8:e683edc8a530 115 submode = 0;
mustwillza 8:e683edc8a530 116 }else{
mustwillza 8:e683edc8a530 117 wait(1);
mustwillza 8:e683edc8a530 118 getStatus("192.168.1.88","/l-f-box/getdata.php?check=1",stat_uid); //Recheck now status
mustwillza 8:e683edc8a530 119
mustwillza 8:e683edc8a530 120 }
mustwillza 8:e683edc8a530 121 if(submode == 0){ //Get RFID for update withdrawer
mustwillza 8:e683edc8a530 122 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 8:e683edc8a530 123 {
mustwillza 8:e683edc8a530 124 wait_ms(500);
mustwillza 8:e683edc8a530 125 continue;
mustwillza 8:e683edc8a530 126 }
mustwillza 8:e683edc8a530 127 // Select one of the cards
mustwillza 8:e683edc8a530 128 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 8:e683edc8a530 129 {
mustwillza 8:e683edc8a530 130 wait_ms(500);
mustwillza 8:e683edc8a530 131 continue;
mustwillza 8:e683edc8a530 132 }
mustwillza 8:e683edc8a530 133 speak.speak();
mustwillza 8:e683edc8a530 134 wait(0.5);
mustwillza 8:e683edc8a530 135 myLcd.InitLcd();
mustwillza 8:e683edc8a530 136 myLcd.DrawString("WAITING...");
mustwillza 8:e683edc8a530 137 myLcd.stop();
mustwillza 8:e683edc8a530 138 GetID(RFID);
mustwillza 8:e683edc8a530 139 getDataHTTP("192.168.1.88","/l-f-box/getdata.php?rfid=",IDs,sid,name,tel); // Data of withdrawer
mustwillza 8:e683edc8a530 140 submode ++;
mustwillza 8:e683edc8a530 141 }
mustwillza 8:e683edc8a530 142 if(submode == 1){
mustwillza 9:5944142f8b40 143 lock=1;
mustwillza 8:e683edc8a530 144 updateWithdrawer("192.168.1.88","/l-f-box/update.php",sid);
mustwillza 8:e683edc8a530 145 wait(0.5);
mustwillza 8:e683edc8a530 146 myLcd.InitLcd();
mustwillza 8:e683edc8a530 147 myLcd.SetXY(20,2);
mustwillza 8:e683edc8a530 148 myLcd.DrawString("WITHDRAW");
mustwillza 8:e683edc8a530 149 myLcd.SetXY(16,2);
mustwillza 8:e683edc8a530 150 myLcd.DrawString("SUCCESSFUL");
mustwillza 8:e683edc8a530 151 myLcd.stop();
mustwillza 8:e683edc8a530 152 submode++;
mustwillza 8:e683edc8a530 153 }
mustwillza 8:e683edc8a530 154 if(submode == 2){//Check for item & return to empty position
mustwillza 8:e683edc8a530 155 mode = -1;
mustwillza 7:725f5fb7e3a3 156 }
mustwillza 7:725f5fb7e3a3 157 }
mustwillza 8:e683edc8a530 158 while(mode == 1){ //Deposit Process (No item in the box)
mustwillza 9:5944142f8b40 159 pc.printf("Deposition process \n");
mustwillza 8:e683edc8a530 160 if(submode == 0){ //Ask for deposit
mustwillza 8:e683edc8a530 161 myLcd.InitLcd();
mustwillza 8:e683edc8a530 162 myLcd.SetXY(20,1);
mustwillza 8:e683edc8a530 163 myLcd.DrawString("PLEASE");
mustwillza 8:e683edc8a530 164 myLcd.SetXY(8,3);
mustwillza 8:e683edc8a530 165 myLcd.DrawString("TAP A CARD");
mustwillza 9:5944142f8b40 166 myLcd.SetXY(9,5);
mustwillza 9:5944142f8b40 167 myLcd.DrawString("TO DEPOSIT");
mustwillza 8:e683edc8a530 168 myLcd.stop();
mustwillza 8:e683edc8a530 169 submode++;
mustwillza 8:e683edc8a530 170 }
mustwillza 8:e683edc8a530 171 if(submode == 1){ //Wait and Get Tap Card
mustwillza 8:e683edc8a530 172 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 8:e683edc8a530 173 {
mustwillza 8:e683edc8a530 174 wait_ms(500);
mustwillza 8:e683edc8a530 175 continue;
mustwillza 8:e683edc8a530 176 }
mustwillza 8:e683edc8a530 177 // Select one of the cards
mustwillza 8:e683edc8a530 178 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 8:e683edc8a530 179 {
mustwillza 8:e683edc8a530 180 wait_ms(500);
mustwillza 8:e683edc8a530 181 continue;
mustwillza 8:e683edc8a530 182 }
mustwillza 8:e683edc8a530 183 speak.speak();
mustwillza 8:e683edc8a530 184 submode ++;
mustwillza 8:e683edc8a530 185 }
mustwillza 8:e683edc8a530 186 if(submode == 2){ //Get depositor data. & Show depositor data
mustwillza 9:5944142f8b40 187 lock=1;
mustwillza 8:e683edc8a530 188 wait(0.5);
mustwillza 8:e683edc8a530 189 myLcd.InitLcd();
mustwillza 8:e683edc8a530 190 myLcd.DrawString("WAITING...");
mustwillza 8:e683edc8a530 191 myLcd.stop();
mustwillza 8:e683edc8a530 192 GetID(RFID);
mustwillza 8:e683edc8a530 193 getDataHTTP("192.168.1.88","/l-f-box/getdata.php?rfid=",IDs,sid,name,tel);
mustwillza 8:e683edc8a530 194 submode ++;
mustwillza 8:e683edc8a530 195
mustwillza 8:e683edc8a530 196 wait(0.5);
mustwillza 8:e683edc8a530 197 myLcd.InitLcd();
mustwillza 8:e683edc8a530 198 myLcd.DrawString("NAME : ");
mustwillza 8:e683edc8a530 199 myLcd.SetXY(5,1);
mustwillza 8:e683edc8a530 200
mustwillza 8:e683edc8a530 201 myLcd.DrawString(name);
mustwillza 8:e683edc8a530 202 myLcd.SetXY(0,3);
mustwillza 8:e683edc8a530 203 myLcd.DrawString("TEL : ");
mustwillza 8:e683edc8a530 204 myLcd.SetXY(5,4);
mustwillza 8:e683edc8a530 205
mustwillza 8:e683edc8a530 206 myLcd.DrawString(tel);
mustwillza 8:e683edc8a530 207 myLcd.stop();
mustwillza 8:e683edc8a530 208 }
mustwillza 8:e683edc8a530 209 if(submode == 3){ // Show depositor data on screen
mustwillza 8:e683edc8a530 210 newDepositor("192.168.1.88","/l-f-box/update.php",sid);
mustwillza 8:e683edc8a530 211 wait(0.5);
mustwillza 8:e683edc8a530 212 myLcd.InitLcd();
mustwillza 8:e683edc8a530 213 myLcd.SetXY(20,1);
mustwillza 8:e683edc8a530 214 myLcd.DrawString("PLEASE");
mustwillza 8:e683edc8a530 215 myLcd.SetXY(4,3);
mustwillza 8:e683edc8a530 216 myLcd.DrawString("CHECK ON WEB");
mustwillza 8:e683edc8a530 217 myLcd.stop();
mustwillza 8:e683edc8a530 218
mustwillza 8:e683edc8a530 219 wait(3);
mustwillza 8:e683edc8a530 220 myLcd.InitLcd();
mustwillza 8:e683edc8a530 221 myLcd.SetXY(10,0);
mustwillza 8:e683edc8a530 222 myLcd.DrawString("==CONTACT==");
mustwillza 8:e683edc8a530 223 myLcd.SetXY(5,2);
mustwillza 8:e683edc8a530 224 myLcd.DrawString("NAME : ");
mustwillza 8:e683edc8a530 225 myLcd.SetXY(5,3);
mustwillza 8:e683edc8a530 226
mustwillza 8:e683edc8a530 227 myLcd.DrawString(name);
mustwillza 8:e683edc8a530 228 myLcd.SetXY(0,4);
mustwillza 8:e683edc8a530 229 myLcd.DrawString("TEL : ");
mustwillza 8:e683edc8a530 230 myLcd.SetXY(5,5);
mustwillza 8:e683edc8a530 231
mustwillza 8:e683edc8a530 232 myLcd.DrawString(tel);
mustwillza 8:e683edc8a530 233 myLcd.stop();
mustwillza 8:e683edc8a530 234
mustwillza 8:e683edc8a530 235
mustwillza 8:e683edc8a530 236 submode=0;
mustwillza 8:e683edc8a530 237 mode = 0;
mustwillza 9:5944142f8b40 238 lock = 0;
mustwillza 8:e683edc8a530 239 } // End Deposit Process
mustwillza 7:725f5fb7e3a3 240 }
mustwillza 8:e683edc8a530 241
mustwillza 7:725f5fb7e3a3 242 }
mustwillza 7:725f5fb7e3a3 243
mustwillza 7:725f5fb7e3a3 244
mustwillza 7:725f5fb7e3a3 245
mustwillza 7:725f5fb7e3a3 246 /*
kantapon501 1:568e35232180 247 while (true) {
mustwillza 0:8b94afcb61eb 248 LedGreen = 1;
mustwillza 0:8b94afcb61eb 249 // Look for new cards
mustwillza 0:8b94afcb61eb 250 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 0:8b94afcb61eb 251 {
mustwillza 0:8b94afcb61eb 252 wait_ms(500);
mustwillza 0:8b94afcb61eb 253 continue;
mustwillza 0:8b94afcb61eb 254 }
mustwillza 0:8b94afcb61eb 255 // Select one of the cards
mustwillza 0:8b94afcb61eb 256 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 0:8b94afcb61eb 257 {
mustwillza 0:8b94afcb61eb 258 wait_ms(500);
mustwillza 0:8b94afcb61eb 259 continue;
mustwillza 0:8b94afcb61eb 260 }
mustwillza 0:8b94afcb61eb 261 LedGreen = 0;
kantapon501 5:8e3bd2501b17 262 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 263 myLcd.DrawString("Ready");
kantapon501 5:8e3bd2501b17 264 myLcd.stop();
kantapon501 5:8e3bd2501b17 265 checker = check(RFID);
kantapon501 5:8e3bd2501b17 266 if(checks == 1)
kantapon501 1:568e35232180 267 {
kantapon501 5:8e3bd2501b17 268 if (checker == 1)
kantapon501 1:568e35232180 269 {
kantapon501 5:8e3bd2501b17 270 pc.printf("Right\n");
kantapon501 5:8e3bd2501b17 271 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 272 myLcd.DrawString("Right");
kantapon501 5:8e3bd2501b17 273 myLcd.stop();
kantapon501 5:8e3bd2501b17 274 checks = 0;
kantapon501 5:8e3bd2501b17 275 speak.speakRight();
kantapon501 6:6635082215c7 276 strcpy(IDs,"");
kantapon501 5:8e3bd2501b17 277 continue;
kantapon501 1:568e35232180 278 }
kantapon501 5:8e3bd2501b17 279 else
kantapon501 5:8e3bd2501b17 280 {
kantapon501 5:8e3bd2501b17 281 pc.printf("Wrong!!\n");
kantapon501 5:8e3bd2501b17 282 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 283 myLcd.DrawString("Wrong!!");
kantapon501 5:8e3bd2501b17 284 myLcd.stop();
kantapon501 5:8e3bd2501b17 285 speak.speakWrong();
kantapon501 5:8e3bd2501b17 286 continue;
kantapon501 5:8e3bd2501b17 287 }
kantapon501 1:568e35232180 288 }
mustwillza 0:8b94afcb61eb 289 // Print Card UID
mustwillza 0:8b94afcb61eb 290 pc.printf("Card UID: ");
mustwillza 0:8b94afcb61eb 291 for (uint8_t i = 0; i < RfChip.uid.size; i++)
mustwillza 0:8b94afcb61eb 292 {
kantapon501 1:568e35232180 293 pc.printf(" %X", RfChip.uid.uidByte[i]);
mustwillza 0:8b94afcb61eb 294 }
kantapon501 5:8e3bd2501b17 295 checker = check(RFID);
mustwillza 4:75346bd905c0 296 speak.speak();
kantapon501 1:568e35232180 297 GetID(RFID);
kantapon501 3:c927196a726f 298 lock = 0;
kantapon501 6:6635082215c7 299 pc.printf("\n\r");
mustwillza 0:8b94afcb61eb 300 wait_ms(1000);
kantapon501 5:8e3bd2501b17 301 checks = 1;
kantapon501 1:568e35232180 302 }
mustwillza 7:725f5fb7e3a3 303 */
mustwillza 0:8b94afcb61eb 304 }