Device controller using RFID

Dependencies:   MFRC522 mbed

Committer:
sheralikhan
Date:
Fri Jun 09 06:03:03 2017 +0000
Revision:
0:28a157482b70
Device controller

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sheralikhan 0:28a157482b70 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
sheralikhan 0:28a157482b70 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
sheralikhan 0:28a157482b70 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
sheralikhan 0:28a157482b70 4
sheralikhan 0:28a157482b70 5 //Connect as follows:
sheralikhan 0:28a157482b70 6 //RFID pins -> Nucleo header CN5 (Arduino-compatible header)
sheralikhan 0:28a157482b70 7 //----------------------------------------
sheralikhan 0:28a157482b70 8 //RFID IRQ=pin5 -> Not used. Leave open
sheralikhan 0:28a157482b70 9 //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12
sheralikhan 0:28a157482b70 10 //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11
sheralikhan 0:28a157482b70 11 //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13
sheralikhan 0:28a157482b70 12 //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10
sheralikhan 0:28a157482b70 13 //RFID RST=pin7 -> Nucleo =PA_9=D8
sheralikhan 0:28a157482b70 14 //3.3V and Gnd to the respective pins
sheralikhan 0:28a157482b70 15
sheralikhan 0:28a157482b70 16 #include "mbed.h"
sheralikhan 0:28a157482b70 17 #include "MFRC522.h"
sheralikhan 0:28a157482b70 18 #include <sstream>
sheralikhan 0:28a157482b70 19 #include <string>
sheralikhan 0:28a157482b70 20
sheralikhan 0:28a157482b70 21 // CARD number
sheralikhan 0:28a157482b70 22 uint8_t CARD_1 = 0x10;
sheralikhan 0:28a157482b70 23 uint8_t CARD_2 = 0xA0;
sheralikhan 0:28a157482b70 24 uint8_t CARD_3 = 0x26;
sheralikhan 0:28a157482b70 25 uint8_t CARD_4 = 0x83;
sheralikhan 0:28a157482b70 26
sheralikhan 0:28a157482b70 27 uint8_t CARD_5 = 0x50;
sheralikhan 0:28a157482b70 28 uint8_t CARD_6 = 0x4C;
sheralikhan 0:28a157482b70 29 uint8_t CARD_7 = 0x33;
sheralikhan 0:28a157482b70 30 uint8_t CARD_8 = 0x83;
sheralikhan 0:28a157482b70 31
sheralikhan 0:28a157482b70 32 uint8_t CARD_9 = 0x10;
sheralikhan 0:28a157482b70 33 uint8_t CARD_10 = 0x70;
sheralikhan 0:28a157482b70 34 uint8_t CARD_11 = 0xFD;
sheralikhan 0:28a157482b70 35 uint8_t CARD_12 = 0x73;
sheralikhan 0:28a157482b70 36
sheralikhan 0:28a157482b70 37 #define SPI_MOSI D11
sheralikhan 0:28a157482b70 38 #define SPI_MISO D12
sheralikhan 0:28a157482b70 39 #define SPI_SCLK D13
sheralikhan 0:28a157482b70 40 #define SPI_CS D10
sheralikhan 0:28a157482b70 41
sheralikhan 0:28a157482b70 42 // WIZWiki-W7500 Pin for MFRC522 reset(pick another D pin if you need D8)
sheralikhan 0:28a157482b70 43 #define MF_RESET D9
sheralikhan 0:28a157482b70 44 #define VOLUME 0.08
sheralikhan 0:28a157482b70 45
sheralikhan 0:28a157482b70 46
sheralikhan 0:28a157482b70 47 Serial pc(USBTX, USBRX);
sheralikhan 0:28a157482b70 48
sheralikhan 0:28a157482b70 49 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET); // Init MFRC522 card
sheralikhan 0:28a157482b70 50
sheralikhan 0:28a157482b70 51 DigitalOut LedGreen(D7);
sheralikhan 0:28a157482b70 52 DigitalOut LedYellow(D6);
sheralikhan 0:28a157482b70 53 PwmOut Buzzer(D5);
sheralikhan 0:28a157482b70 54 float beat_duration;
sheralikhan 0:28a157482b70 55
sheralikhan 0:28a157482b70 56 // Plays a sound with the defined frequency, duration, and volume
sheralikhan 0:28a157482b70 57 void playNote(float frequency, float volume)
sheralikhan 0:28a157482b70 58 {
sheralikhan 0:28a157482b70 59 Buzzer.period(1.0/(double)frequency);
sheralikhan 0:28a157482b70 60 Buzzer = ((double)volume/2.0);
sheralikhan 0:28a157482b70 61 }
sheralikhan 0:28a157482b70 62 char* store_buf;
sheralikhan 0:28a157482b70 63 char data2[8];
sheralikhan 0:28a157482b70 64
sheralikhan 0:28a157482b70 65 int main(void)
sheralikhan 0:28a157482b70 66 {
sheralikhan 0:28a157482b70 67 printf("Welcome to My Smart Home.... ");
sheralikhan 0:28a157482b70 68 wait_ms(50);
sheralikhan 0:28a157482b70 69 printf("\n\r");
sheralikhan 0:28a157482b70 70 printf("Please swipe card.. Here ");
sheralikhan 0:28a157482b70 71 wait_ms(50);
sheralikhan 0:28a157482b70 72 printf("\n\r");
sheralikhan 0:28a157482b70 73 // Init. RC522 Chip
sheralikhan 0:28a157482b70 74 RfChip.PCD_Init();
sheralikhan 0:28a157482b70 75
sheralikhan 0:28a157482b70 76 while (true) {
sheralikhan 0:28a157482b70 77 LedGreen = 1;
sheralikhan 0:28a157482b70 78 // Look for new cards
sheralikhan 0:28a157482b70 79 if ( ! RfChip.PICC_IsNewCardPresent()) {
sheralikhan 0:28a157482b70 80 wait_ms(50);
sheralikhan 0:28a157482b70 81 continue;
sheralikhan 0:28a157482b70 82 }
sheralikhan 0:28a157482b70 83 LedGreen = 0;
sheralikhan 0:28a157482b70 84 wait_ms(50);
sheralikhan 0:28a157482b70 85 // Select one of the cards
sheralikhan 0:28a157482b70 86 if ( ! RfChip.PICC_ReadCardSerial()) {
sheralikhan 0:28a157482b70 87 wait_ms(50);
sheralikhan 0:28a157482b70 88 continue;
sheralikhan 0:28a157482b70 89 }
sheralikhan 0:28a157482b70 90 LedGreen = 1;
sheralikhan 0:28a157482b70 91 wait_ms(50);
sheralikhan 0:28a157482b70 92
sheralikhan 0:28a157482b70 93 // Print Card UID
sheralikhan 0:28a157482b70 94 for (uint8_t i = 0; i < RfChip.uid.size; i++) {
sheralikhan 0:28a157482b70 95 store_buf+= sprintf(store_buf,"%X",RfChip.uid.uidByte[i]);
sheralikhan 0:28a157482b70 96 }
sheralikhan 0:28a157482b70 97 printf("\n\r");
sheralikhan 0:28a157482b70 98 // Print Card type
sheralikhan 0:28a157482b70 99 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
sheralikhan 0:28a157482b70 100 LedGreen = 0;
sheralikhan 0:28a157482b70 101 wait_ms(50);
sheralikhan 0:28a157482b70 102
sheralikhan 0:28a157482b70 103 // store_buf=data2;
sheralikhan 0:28a157482b70 104 if((RfChip.uid.uidByte[0] == CARD_1) && (RfChip.uid.uidByte[1] == CARD_2) && (RfChip.uid.uidByte[2] == CARD_3) && (RfChip.uid.uidByte[3] == CARD_4)) {
sheralikhan 0:28a157482b70 105 LedYellow=1;
sheralikhan 0:28a157482b70 106 // wait_ms(1000);
sheralikhan 0:28a157482b70 107 pc.printf("Yello Led is On.....");
sheralikhan 0:28a157482b70 108 printf("\n\r");
sheralikhan 0:28a157482b70 109
sheralikhan 0:28a157482b70 110 } else if((RfChip.uid.uidByte[0] == CARD_5) && (RfChip.uid.uidByte[1] == CARD_6) && (RfChip.uid.uidByte[2] == CARD_7) && (RfChip.uid.uidByte[3] == CARD_8)) {
sheralikhan 0:28a157482b70 111 playNote(999.999, VOLUME);
sheralikhan 0:28a157482b70 112 pc.printf("Buzzer is On.....");
sheralikhan 0:28a157482b70 113 printf("\n\r");
sheralikhan 0:28a157482b70 114
sheralikhan 0:28a157482b70 115 } else if((RfChip.uid.uidByte[0] == CARD_9) && (RfChip.uid.uidByte[1] == CARD_10) && (RfChip.uid.uidByte[2] == CARD_11) && (RfChip.uid.uidByte[3] == CARD_12)) {
sheralikhan 0:28a157482b70 116 pc.printf("This is a master Card: ");
sheralikhan 0:28a157482b70 117 printf("\n\r");
sheralikhan 0:28a157482b70 118 LedYellow=0;
sheralikhan 0:28a157482b70 119 Buzzer=0;
sheralikhan 0:28a157482b70 120 pc.printf("ALL Device off.....");
sheralikhan 0:28a157482b70 121 printf("\n\r");
sheralikhan 0:28a157482b70 122 pc.printf("Thank you.....");
sheralikhan 0:28a157482b70 123 }
sheralikhan 0:28a157482b70 124 printf("\n\r");
sheralikhan 0:28a157482b70 125
sheralikhan 0:28a157482b70 126
sheralikhan 0:28a157482b70 127
sheralikhan 0:28a157482b70 128 }
sheralikhan 0:28a157482b70 129 }