แก้ให้แล้ว

Dependencies:   NOKIA_5110 mbed

Fork of Lost-Found_BOX by FRA221:A

Committer:
mustwillza
Date:
Mon Dec 07 18:12:36 2015 +0000
Revision:
8:e683edc8a530
Parent:
7:725f5fb7e3a3
Child:
9:5944142f8b40
Completed without ; Solenoid & 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 7:725f5fb7e3a3 47
mustwillza 0:8b94afcb61eb 48 int main(void) {
mustwillza 7:725f5fb7e3a3 49 // Init. LCD Pin
kantapon501 1:568e35232180 50 LcdPins myPins;
kantapon501 1:568e35232180 51 myPins.sce = PB_4; //D5 ActiveLow SlaveSelect
mustwillza 0:8b94afcb61eb 52 myPins.rst = PB_10; //D6
kantapon501 1:568e35232180 53 myPins.dc = PA_8; //D7
kantapon501 1:568e35232180 54 myPins.mosi = PA_7; //SPI_MOSI;
mustwillza 0:8b94afcb61eb 55 myPins.miso = NC;
mustwillza 0:8b94afcb61eb 56 myPins.sclk = PA_5; //SPI_SCK;
mustwillza 7:725f5fb7e3a3 57
mustwillza 7:725f5fb7e3a3 58 // Init. LCD Chip
kantapon501 1:568e35232180 59 NokiaLcd myLcd( myPins );
mustwillza 0:8b94afcb61eb 60 myLcd.InitLcd(); // LCD is reset and DDRAM is cleared
mustwillza 7:725f5fb7e3a3 61 myLcd.DrawString("System Initializing...");
mustwillza 0:8b94afcb61eb 62 myLcd.stop();
kantapon501 1:568e35232180 63
mustwillza 7:725f5fb7e3a3 64 // Init. esp8266
mustwillza 7:725f5fb7e3a3 65 wifiInitial();
mustwillza 7:725f5fb7e3a3 66 char name[20];
mustwillza 7:725f5fb7e3a3 67 char sid[20];
mustwillza 7:725f5fb7e3a3 68 char tel[10];
mustwillza 7:725f5fb7e3a3 69 char stat_uid[3];
mustwillza 7:725f5fb7e3a3 70
mustwillza 7:725f5fb7e3a3 71 // Init.RFID Variable
mustwillza 7:725f5fb7e3a3 72 uint8_t RFID[10];
mustwillza 7:725f5fb7e3a3 73 int checker = 0;
mustwillza 7:725f5fb7e3a3 74 int checks = 0;
mustwillza 7:725f5fb7e3a3 75 int mode = 0;
mustwillza 7:725f5fb7e3a3 76 int submode = 0;
kantapon501 1:568e35232180 77 pc.printf("starting...\n");
mustwillza 7:725f5fb7e3a3 78
kantapon501 1:568e35232180 79 // Init. RC522 Chip
kantapon501 1:568e35232180 80 RfChip.PCD_Init();
kantapon501 1:568e35232180 81 pc.printf("Begin RFID!\n");
mustwillza 7:725f5fb7e3a3 82
mustwillza 7:725f5fb7e3a3 83 /* ===== System Initialized ===== */
mustwillza 7:725f5fb7e3a3 84 myLcd.InitLcd();
mustwillza 7:725f5fb7e3a3 85 myLcd.DrawString("Welcome to LOST & FOUND BOX V.1");
mustwillza 7:725f5fb7e3a3 86 myLcd.stop();
mustwillza 7:725f5fb7e3a3 87
mustwillza 8:e683edc8a530 88
mustwillza 8:e683edc8a530 89 while(true){//Loop around
mustwillza 8:e683edc8a530 90 wait(1);
mustwillza 8:e683edc8a530 91 getStatus("192.168.1.88","/l-f-box/getdata.php?check=1",stat_uid); //Recheck now status
mustwillza 8:e683edc8a530 92
mustwillza 8:e683edc8a530 93
mustwillza 8:e683edc8a530 94
mustwillza 8:e683edc8a530 95 if(isalnum((int)stat_uid[0])){
mustwillza 8:e683edc8a530 96 mode = 0; //It have an item
mustwillza 8:e683edc8a530 97 submode=-1;
mustwillza 8:e683edc8a530 98 }else{
mustwillza 8:e683edc8a530 99 mode = 1; //Doesn't have an item
mustwillza 8:e683edc8a530 100 submode=0;
mustwillza 8:e683edc8a530 101 }
mustwillza 8:e683edc8a530 102
mustwillza 7:725f5fb7e3a3 103
mustwillza 8:e683edc8a530 104
mustwillza 8:e683edc8a530 105 while(mode == 0){ //Withdraw Process (Item in the box!)
mustwillza 8:e683edc8a530 106 pc.printf("Withdraw process...");
mustwillza 8:e683edc8a530 107 if(stat_uid[0] == 'X'){ //Unlocked!
mustwillza 8:e683edc8a530 108 speak.speakRight();
mustwillza 8:e683edc8a530 109 wait(0.5);
mustwillza 8:e683edc8a530 110 myLcd.InitLcd();
mustwillza 8:e683edc8a530 111 myLcd.SetXY(20,2);
mustwillza 8:e683edc8a530 112 myLcd.DrawString("UNLOCKED!");
mustwillza 8:e683edc8a530 113 myLcd.SetXY(16,2);
mustwillza 8:e683edc8a530 114 myLcd.DrawString("TAP A CARD...");
mustwillza 8:e683edc8a530 115 myLcd.stop();
mustwillza 8:e683edc8a530 116 submode = 0;
mustwillza 8:e683edc8a530 117 }else{
mustwillza 8:e683edc8a530 118 wait(1);
mustwillza 8:e683edc8a530 119 getStatus("192.168.1.88","/l-f-box/getdata.php?check=1",stat_uid); //Recheck now status
mustwillza 8:e683edc8a530 120
mustwillza 8:e683edc8a530 121 }
mustwillza 8:e683edc8a530 122 if(submode == 0){ //Get RFID for update withdrawer
mustwillza 8:e683edc8a530 123 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 8:e683edc8a530 124 {
mustwillza 8:e683edc8a530 125 wait_ms(500);
mustwillza 8:e683edc8a530 126 continue;
mustwillza 8:e683edc8a530 127 }
mustwillza 8:e683edc8a530 128 // Select one of the cards
mustwillza 8:e683edc8a530 129 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 8:e683edc8a530 130 {
mustwillza 8:e683edc8a530 131 wait_ms(500);
mustwillza 8:e683edc8a530 132 continue;
mustwillza 8:e683edc8a530 133 }
mustwillza 8:e683edc8a530 134 speak.speak();
mustwillza 8:e683edc8a530 135 wait(0.5);
mustwillza 8:e683edc8a530 136 myLcd.InitLcd();
mustwillza 8:e683edc8a530 137 myLcd.DrawString("WAITING...");
mustwillza 8:e683edc8a530 138 myLcd.stop();
mustwillza 8:e683edc8a530 139 GetID(RFID);
mustwillza 8:e683edc8a530 140 getDataHTTP("192.168.1.88","/l-f-box/getdata.php?rfid=",IDs,sid,name,tel); // Data of withdrawer
mustwillza 8:e683edc8a530 141 submode ++;
mustwillza 8:e683edc8a530 142 }
mustwillza 8:e683edc8a530 143 if(submode == 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 8:e683edc8a530 159 if(submode == 0){ //Ask for deposit
mustwillza 8:e683edc8a530 160 myLcd.InitLcd();
mustwillza 8:e683edc8a530 161 myLcd.SetXY(20,1);
mustwillza 8:e683edc8a530 162 myLcd.DrawString("PLEASE");
mustwillza 8:e683edc8a530 163 myLcd.SetXY(8,3);
mustwillza 8:e683edc8a530 164 myLcd.DrawString("TAP A CARD");
mustwillza 8:e683edc8a530 165
mustwillza 8:e683edc8a530 166 myLcd.stop();
mustwillza 8:e683edc8a530 167 submode++;
mustwillza 8:e683edc8a530 168 }
mustwillza 8:e683edc8a530 169 if(submode == 1){ //Wait and Get Tap Card
mustwillza 8:e683edc8a530 170 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 8:e683edc8a530 171 {
mustwillza 8:e683edc8a530 172 wait_ms(500);
mustwillza 8:e683edc8a530 173 continue;
mustwillza 8:e683edc8a530 174 }
mustwillza 8:e683edc8a530 175 // Select one of the cards
mustwillza 8:e683edc8a530 176 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 8:e683edc8a530 177 {
mustwillza 8:e683edc8a530 178 wait_ms(500);
mustwillza 8:e683edc8a530 179 continue;
mustwillza 8:e683edc8a530 180 }
mustwillza 8:e683edc8a530 181 speak.speak();
mustwillza 8:e683edc8a530 182 submode ++;
mustwillza 8:e683edc8a530 183 }
mustwillza 8:e683edc8a530 184 if(submode == 2){ //Get depositor data. & Show depositor data
mustwillza 8:e683edc8a530 185 wait(0.5);
mustwillza 8:e683edc8a530 186 myLcd.InitLcd();
mustwillza 8:e683edc8a530 187 myLcd.DrawString("WAITING...");
mustwillza 8:e683edc8a530 188 myLcd.stop();
mustwillza 8:e683edc8a530 189 GetID(RFID);
mustwillza 8:e683edc8a530 190 getDataHTTP("192.168.1.88","/l-f-box/getdata.php?rfid=",IDs,sid,name,tel);
mustwillza 8:e683edc8a530 191 submode ++;
mustwillza 8:e683edc8a530 192
mustwillza 8:e683edc8a530 193 wait(0.5);
mustwillza 8:e683edc8a530 194 myLcd.InitLcd();
mustwillza 8:e683edc8a530 195 myLcd.DrawString("NAME : ");
mustwillza 8:e683edc8a530 196 myLcd.SetXY(5,1);
mustwillza 8:e683edc8a530 197
mustwillza 8:e683edc8a530 198 myLcd.DrawString(name);
mustwillza 8:e683edc8a530 199 myLcd.SetXY(0,3);
mustwillza 8:e683edc8a530 200 myLcd.DrawString("TEL : ");
mustwillza 8:e683edc8a530 201 myLcd.SetXY(5,4);
mustwillza 8:e683edc8a530 202
mustwillza 8:e683edc8a530 203 myLcd.DrawString(tel);
mustwillza 8:e683edc8a530 204 myLcd.stop();
mustwillza 8:e683edc8a530 205 }
mustwillza 8:e683edc8a530 206 if(submode == 3){ // Show depositor data on screen
mustwillza 8:e683edc8a530 207 newDepositor("192.168.1.88","/l-f-box/update.php",sid);
mustwillza 8:e683edc8a530 208 wait(0.5);
mustwillza 8:e683edc8a530 209 myLcd.InitLcd();
mustwillza 8:e683edc8a530 210 myLcd.SetXY(20,1);
mustwillza 8:e683edc8a530 211 myLcd.DrawString("PLEASE");
mustwillza 8:e683edc8a530 212 myLcd.SetXY(4,3);
mustwillza 8:e683edc8a530 213 myLcd.DrawString("CHECK ON WEB");
mustwillza 8:e683edc8a530 214 myLcd.stop();
mustwillza 8:e683edc8a530 215
mustwillza 8:e683edc8a530 216 wait(3);
mustwillza 8:e683edc8a530 217 myLcd.InitLcd();
mustwillza 8:e683edc8a530 218 myLcd.SetXY(10,0);
mustwillza 8:e683edc8a530 219 myLcd.DrawString("==CONTACT==");
mustwillza 8:e683edc8a530 220 myLcd.SetXY(5,2);
mustwillza 8:e683edc8a530 221 myLcd.DrawString("NAME : ");
mustwillza 8:e683edc8a530 222 myLcd.SetXY(5,3);
mustwillza 8:e683edc8a530 223
mustwillza 8:e683edc8a530 224 myLcd.DrawString(name);
mustwillza 8:e683edc8a530 225 myLcd.SetXY(0,4);
mustwillza 8:e683edc8a530 226 myLcd.DrawString("TEL : ");
mustwillza 8:e683edc8a530 227 myLcd.SetXY(5,5);
mustwillza 8:e683edc8a530 228
mustwillza 8:e683edc8a530 229 myLcd.DrawString(tel);
mustwillza 8:e683edc8a530 230 myLcd.stop();
mustwillza 8:e683edc8a530 231
mustwillza 8:e683edc8a530 232
mustwillza 8:e683edc8a530 233 submode=0;
mustwillza 8:e683edc8a530 234 mode = 0;
mustwillza 8:e683edc8a530 235 } // End Deposit Process
mustwillza 7:725f5fb7e3a3 236 }
mustwillza 8:e683edc8a530 237
mustwillza 7:725f5fb7e3a3 238 }
mustwillza 7:725f5fb7e3a3 239
mustwillza 7:725f5fb7e3a3 240
mustwillza 7:725f5fb7e3a3 241
mustwillza 7:725f5fb7e3a3 242 /*
kantapon501 1:568e35232180 243 while (true) {
mustwillza 0:8b94afcb61eb 244 LedGreen = 1;
mustwillza 0:8b94afcb61eb 245 // Look for new cards
mustwillza 0:8b94afcb61eb 246 if ( ! RfChip.PICC_IsNewCardPresent())
mustwillza 0:8b94afcb61eb 247 {
mustwillza 0:8b94afcb61eb 248 wait_ms(500);
mustwillza 0:8b94afcb61eb 249 continue;
mustwillza 0:8b94afcb61eb 250 }
mustwillza 0:8b94afcb61eb 251 // Select one of the cards
mustwillza 0:8b94afcb61eb 252 if ( ! RfChip.PICC_ReadCardSerial())
mustwillza 0:8b94afcb61eb 253 {
mustwillza 0:8b94afcb61eb 254 wait_ms(500);
mustwillza 0:8b94afcb61eb 255 continue;
mustwillza 0:8b94afcb61eb 256 }
mustwillza 0:8b94afcb61eb 257 LedGreen = 0;
kantapon501 5:8e3bd2501b17 258 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 259 myLcd.DrawString("Ready");
kantapon501 5:8e3bd2501b17 260 myLcd.stop();
kantapon501 5:8e3bd2501b17 261 checker = check(RFID);
kantapon501 5:8e3bd2501b17 262 if(checks == 1)
kantapon501 1:568e35232180 263 {
kantapon501 5:8e3bd2501b17 264 if (checker == 1)
kantapon501 1:568e35232180 265 {
kantapon501 5:8e3bd2501b17 266 pc.printf("Right\n");
kantapon501 5:8e3bd2501b17 267 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 268 myLcd.DrawString("Right");
kantapon501 5:8e3bd2501b17 269 myLcd.stop();
kantapon501 5:8e3bd2501b17 270 checks = 0;
kantapon501 5:8e3bd2501b17 271 speak.speakRight();
kantapon501 6:6635082215c7 272 strcpy(IDs,"");
kantapon501 5:8e3bd2501b17 273 continue;
kantapon501 1:568e35232180 274 }
kantapon501 5:8e3bd2501b17 275 else
kantapon501 5:8e3bd2501b17 276 {
kantapon501 5:8e3bd2501b17 277 pc.printf("Wrong!!\n");
kantapon501 5:8e3bd2501b17 278 myLcd.InitLcd();
kantapon501 5:8e3bd2501b17 279 myLcd.DrawString("Wrong!!");
kantapon501 5:8e3bd2501b17 280 myLcd.stop();
kantapon501 5:8e3bd2501b17 281 speak.speakWrong();
kantapon501 5:8e3bd2501b17 282 continue;
kantapon501 5:8e3bd2501b17 283 }
kantapon501 1:568e35232180 284 }
mustwillza 0:8b94afcb61eb 285 // Print Card UID
mustwillza 0:8b94afcb61eb 286 pc.printf("Card UID: ");
mustwillza 0:8b94afcb61eb 287 for (uint8_t i = 0; i < RfChip.uid.size; i++)
mustwillza 0:8b94afcb61eb 288 {
kantapon501 1:568e35232180 289 pc.printf(" %X", RfChip.uid.uidByte[i]);
mustwillza 0:8b94afcb61eb 290 }
kantapon501 5:8e3bd2501b17 291 checker = check(RFID);
mustwillza 4:75346bd905c0 292 speak.speak();
kantapon501 1:568e35232180 293 GetID(RFID);
kantapon501 3:c927196a726f 294 lock = 0;
kantapon501 6:6635082215c7 295 pc.printf("\n\r");
mustwillza 0:8b94afcb61eb 296 wait_ms(1000);
kantapon501 5:8e3bd2501b17 297 checks = 1;
kantapon501 1:568e35232180 298 }
mustwillza 7:725f5fb7e3a3 299 */
mustwillza 0:8b94afcb61eb 300 }