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.
main.cpp@0:1026a98e87f4, 2016-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |