This is a cost effective alert system that uses radio frequency identification. RC522 module and 13.56MHz RFID tags are used. Differentiates between registered and unregistered users based on UID of the tag, then displays alerts in serial terminal. The code presently has two registered users; can be easily expanded to have more registered users.

Dependencies:   MFRC522 mbed

Committer:
nivmukka
Date:
Sun Mar 27 03:28:08 2016 +0000
Revision:
0:1026a98e87f4
Differentiates between registered and unregistered users based on UID of the tag, then displays alerts in serial terminal.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nivmukka 0:1026a98e87f4 1 #include "mbed.h"
nivmukka 0:1026a98e87f4 2 #include "MFRC522.h"
nivmukka 0:1026a98e87f4 3
nivmukka 0:1026a98e87f4 4 // FRDM-K64F (Freescale) Pin for MFRC522 reset
nivmukka 0:1026a98e87f4 5 #define MF_RESET PTD0
nivmukka 0:1026a98e87f4 6
nivmukka 0:1026a98e87f4 7 // Defining the serial ports for PC and Bluetooth
nivmukka 0:1026a98e87f4 8 #define SERIAL_1
nivmukka 0:1026a98e87f4 9 Serial pc(USBTX, USBRX);
nivmukka 0:1026a98e87f4 10 #ifdef SERIAL_1
nivmukka 0:1026a98e87f4 11 Serial blue(PTC15,PTC14);
nivmukka 0:1026a98e87f4 12 #endif
nivmukka 0:1026a98e87f4 13 #ifdef SERIAL_2
nivmukka 0:1026a98e87f4 14 Serial blue(PTC17,PTC16); // TX = P14 RX = P13
nivmukka 0:1026a98e87f4 15 #endif
nivmukka 0:1026a98e87f4 16
nivmukka 0:1026a98e87f4 17 DigitalOut LedGreen(LED2), LedRed(LED1);
nivmukka 0:1026a98e87f4 18
nivmukka 0:1026a98e87f4 19 Timer timeBetweenCards;
nivmukka 0:1026a98e87f4 20 char tagname;
nivmukka 0:1026a98e87f4 21 char * cardtypetest;
nivmukka 0:1026a98e87f4 22 char cardid;
nivmukka 0:1026a98e87f4 23
nivmukka 0:1026a98e87f4 24 //MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
nivmukka 0:1026a98e87f4 25 MFRC522 RfChip (PTD2, PTD3, PTD1, PTE25, PTD0);
nivmukka 0:1026a98e87f4 26
nivmukka 0:1026a98e87f4 27 int main(void) {
nivmukka 0:1026a98e87f4 28
nivmukka 0:1026a98e87f4 29 blue.baud(9600);
nivmukka 0:1026a98e87f4 30 pc.baud(9600);
nivmukka 0:1026a98e87f4 31 LedRed= 0;
nivmukka 0:1026a98e87f4 32 pc.printf("RFID based Alert System Started\r\n");
nivmukka 0:1026a98e87f4 33 printf("-------------------------------------------------------------\r\n");
nivmukka 0:1026a98e87f4 34
nivmukka 0:1026a98e87f4 35 // Init. RC522 Chip
nivmukka 0:1026a98e87f4 36 RfChip.PCD_Init();
nivmukka 0:1026a98e87f4 37
nivmukka 0:1026a98e87f4 38 while (true) {
nivmukka 0:1026a98e87f4 39
nivmukka 0:1026a98e87f4 40 tagname = '\0';
nivmukka 0:1026a98e87f4 41 LedRed= 1;
nivmukka 0:1026a98e87f4 42 LedGreen = 1;
nivmukka 0:1026a98e87f4 43
nivmukka 0:1026a98e87f4 44 // Look for new cards
nivmukka 0:1026a98e87f4 45 if ( ! RfChip.PICC_IsNewCardPresent())
nivmukka 0:1026a98e87f4 46 {
nivmukka 0:1026a98e87f4 47 wait_ms(100);
nivmukka 0:1026a98e87f4 48 continue;
nivmukka 0:1026a98e87f4 49 }
nivmukka 0:1026a98e87f4 50
nivmukka 0:1026a98e87f4 51 // Select one of the cards
nivmukka 0:1026a98e87f4 52 if ( ! RfChip.PICC_ReadCardSerial())
nivmukka 0:1026a98e87f4 53 {
nivmukka 0:1026a98e87f4 54 wait_ms(100);
nivmukka 0:1026a98e87f4 55
nivmukka 0:1026a98e87f4 56 continue;
nivmukka 0:1026a98e87f4 57
nivmukka 0:1026a98e87f4 58 }
nivmukka 0:1026a98e87f4 59
nivmukka 0:1026a98e87f4 60 // When a card is detected, a Green Led flashes!
nivmukka 0:1026a98e87f4 61 blue.printf("%f seconds \n", timeBetweenCards.read());
nivmukka 0:1026a98e87f4 62 timeBetweenCards.start();
nivmukka 0:1026a98e87f4 63 LedGreen = 0;
nivmukka 0:1026a98e87f4 64
nivmukka 0:1026a98e87f4 65 for (uint8_t i = 0; i < RfChip.uid.size; i++)
nivmukka 0:1026a98e87f4 66 {
nivmukka 0:1026a98e87f4 67 // printf(" %X02", RfChip.uid.uidByte[i]);
nivmukka 0:1026a98e87f4 68 cardid= RfChip.uid.uidByte[i];
nivmukka 0:1026a98e87f4 69 blue.printf(" %X02 ", (char *) cardid);
nivmukka 0:1026a98e87f4 70 tagname= RfChip.uid.uidByte[i]+ tagname;
nivmukka 0:1026a98e87f4 71 blue.putc(tagname);
nivmukka 0:1026a98e87f4 72 }
nivmukka 0:1026a98e87f4 73 printf("\n\r");
nivmukka 0:1026a98e87f4 74 if (tagname == 206) {
nivmukka 0:1026a98e87f4 75
nivmukka 0:1026a98e87f4 76 printf ("Blue Keychain detected: Welcome, Nivedita!");
nivmukka 0:1026a98e87f4 77 printf("\n\r");
nivmukka 0:1026a98e87f4 78 printf("------------------------------------------------");
nivmukka 0:1026a98e87f4 79
nivmukka 0:1026a98e87f4 80 }
nivmukka 0:1026a98e87f4 81 else if (tagname == 124) {
nivmukka 0:1026a98e87f4 82 printf ("White Card detected: Welcome, Apoorva!");
nivmukka 0:1026a98e87f4 83 printf("\n\r");
nivmukka 0:1026a98e87f4 84 printf("------------------------------------------------");
nivmukka 0:1026a98e87f4 85 }
nivmukka 0:1026a98e87f4 86 else if (tagname == 76) {
nivmukka 0:1026a98e87f4 87 printf ("Unknown person (White card): sending alert!! ");
nivmukka 0:1026a98e87f4 88 printf("\n\r");
nivmukka 0:1026a98e87f4 89 printf("------------------------------------------------");
nivmukka 0:1026a98e87f4 90 }
nivmukka 0:1026a98e87f4 91 else if (tagname == 58) {
nivmukka 0:1026a98e87f4 92 printf ("Unknown person (Blue keychain): sending alert!! ");
nivmukka 0:1026a98e87f4 93 printf("\n\r");
nivmukka 0:1026a98e87f4 94 printf("------------------------------------------------");
nivmukka 0:1026a98e87f4 95 }
nivmukka 0:1026a98e87f4 96 else {
nivmukka 0:1026a98e87f4 97 printf("--------------------!!!!!!!!!---------------------\n\r");
nivmukka 0:1026a98e87f4 98 printf("Unknown card/keychain detected; sending alert!!!");
nivmukka 0:1026a98e87f4 99 printf("\n\r");
nivmukka 0:1026a98e87f4 100 printf("------------------------------------------------");
nivmukka 0:1026a98e87f4 101 }
nivmukka 0:1026a98e87f4 102
nivmukka 0:1026a98e87f4 103 // Print Card UID
nivmukka 0:1026a98e87f4 104 printf("\n\r");
nivmukka 0:1026a98e87f4 105 printf("Card UID: ");
nivmukka 0:1026a98e87f4 106
nivmukka 0:1026a98e87f4 107 for (uint8_t i = 0; i < RfChip.uid.size; i++)
nivmukka 0:1026a98e87f4 108 {
nivmukka 0:1026a98e87f4 109 printf(" %X02", RfChip.uid.uidByte[i]);
nivmukka 0:1026a98e87f4 110 cardid= RfChip.uid.uidByte[i];
nivmukka 0:1026a98e87f4 111 blue.printf(" %X02 ", (char *) cardid);
nivmukka 0:1026a98e87f4 112 tagname= RfChip.uid.uidByte[i]+ tagname;
nivmukka 0:1026a98e87f4 113 blue.putc(tagname);
nivmukka 0:1026a98e87f4 114 }
nivmukka 0:1026a98e87f4 115 printf("\n\r");
nivmukka 0:1026a98e87f4 116
nivmukka 0:1026a98e87f4 117 printf("Decimal tagname: %d \n\r", tagname);
nivmukka 0:1026a98e87f4 118 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
nivmukka 0:1026a98e87f4 119 printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
nivmukka 0:1026a98e87f4 120 cardtypetest= RfChip.PICC_GetTypeName(piccType);
nivmukka 0:1026a98e87f4 121 blue.printf("PICC Type: %s \n\r",(char *) cardtypetest);
nivmukka 0:1026a98e87f4 122 printf("________________________________________________");
nivmukka 0:1026a98e87f4 123 //wait_ms(100);
nivmukka 0:1026a98e87f4 124 }
nivmukka 0:1026a98e87f4 125 }