A cost-effective alert system using FRDM-K64F based on RFID that can: 1. Differentiate between registered and unregistered users. 2. Detect and send alerts when cards are flashed 3. Display alerts on LCD screen 4. Log and store all the alerts in SD card (in desired file format) 5. Easily add new registered users

Dependencies:   MFRC522 NOKIA_5110 SDFileSystem mbed

Committer:
nivmukka
Date:
Sat Apr 30 20:23:05 2016 +0000
Revision:
0:7a46e9e77d32
Alert System using FRDM-K64F development based on cost-effective RFID technology.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nivmukka 0:7a46e9e77d32 1 #include "mbed.h"
nivmukka 0:7a46e9e77d32 2 #include "MFRC522.h"
nivmukka 0:7a46e9e77d32 3 #include "SDFileSystem.h"
nivmukka 0:7a46e9e77d32 4 #include "NOKIA_5110.h"
nivmukka 0:7a46e9e77d32 5 #include <stdio.h>
nivmukka 0:7a46e9e77d32 6
nivmukka 0:7a46e9e77d32 7 // FRDM-K64F (Freescale) Pin for MFRC522 reset
nivmukka 0:7a46e9e77d32 8 #define MF_RESET PTD0
nivmukka 0:7a46e9e77d32 9 FILE *fp;
nivmukka 0:7a46e9e77d32 10
nivmukka 0:7a46e9e77d32 11 DigitalOut LedGreen(LED2);
nivmukka 0:7a46e9e77d32 12
nivmukka 0:7a46e9e77d32 13 //Serial connection to PC for output
nivmukka 0:7a46e9e77d32 14 Serial pc(USBTX, USBRX); // serial comm on the FRDM board
nivmukka 0:7a46e9e77d32 15
nivmukka 0:7a46e9e77d32 16 //MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
nivmukka 0:7a46e9e77d32 17 MFRC522 RfChip (PTD2, PTD3, PTD1, PTE25, PTD0);
nivmukka 0:7a46e9e77d32 18
nivmukka 0:7a46e9e77d32 19 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
nivmukka 0:7a46e9e77d32 20 char buffer[1024];
nivmukka 0:7a46e9e77d32 21 uint8_t user[10];
nivmukka 0:7a46e9e77d32 22 char Nivedita[17]="7A023C0293028502";
nivmukka 0:7a46e9e77d32 23 char Apoorva[17]="76029E02C302A502";
nivmukka 0:7a46e9e77d32 24 char temp[17];
nivmukka 0:7a46e9e77d32 25 int flag1=0;
nivmukka 0:7a46e9e77d32 26 int flag2=0; //checks if the card scanner is run for the first time
nivmukka 0:7a46e9e77d32 27
nivmukka 0:7a46e9e77d32 28 int main()
nivmukka 0:7a46e9e77d32 29
nivmukka 0:7a46e9e77d32 30 {
nivmukka 0:7a46e9e77d32 31 pc.printf("Starting Alert System 2.0 by nivmukka... \n");
nivmukka 0:7a46e9e77d32 32
nivmukka 0:7a46e9e77d32 33 LcdPins myPins;
nivmukka 0:7a46e9e77d32 34 myPins.sce = PTC12;
nivmukka 0:7a46e9e77d32 35 myPins.rst = PTC4;
nivmukka 0:7a46e9e77d32 36 myPins.dc = PTB3;
nivmukka 0:7a46e9e77d32 37 myPins.mosi = PTD6;
nivmukka 0:7a46e9e77d32 38 myPins.miso = NC;
nivmukka 0:7a46e9e77d32 39 myPins.sclk = PTD5;
nivmukka 0:7a46e9e77d32 40
nivmukka 0:7a46e9e77d32 41 NokiaLcd myLcd( myPins );
nivmukka 0:7a46e9e77d32 42
nivmukka 0:7a46e9e77d32 43 // Start the LCD
nivmukka 0:7a46e9e77d32 44 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 45 myLcd.DrawString("Alert System by nivmukka");
nivmukka 0:7a46e9e77d32 46 wait( 3 );
nivmukka 0:7a46e9e77d32 47 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 48
nivmukka 0:7a46e9e77d32 49 // Init. RC522 Chip
nivmukka 0:7a46e9e77d32 50 RfChip.PCD_Init();
nivmukka 0:7a46e9e77d32 51
nivmukka 0:7a46e9e77d32 52 fp = fopen("/sd/niv_alert_log.txt", "r");
nivmukka 0:7a46e9e77d32 53 if (fp != NULL)
nivmukka 0:7a46e9e77d32 54 {
nivmukka 0:7a46e9e77d32 55 fclose(fp);
nivmukka 0:7a46e9e77d32 56 remove("/sd/niv_alert_log.txt");
nivmukka 0:7a46e9e77d32 57 pc.printf("Removing an existing file with the same name \n");
nivmukka 0:7a46e9e77d32 58 }
nivmukka 0:7a46e9e77d32 59
nivmukka 0:7a46e9e77d32 60 while (true)
nivmukka 0:7a46e9e77d32 61 {
nivmukka 0:7a46e9e77d32 62 LedGreen = 1;
nivmukka 0:7a46e9e77d32 63
nivmukka 0:7a46e9e77d32 64 // Look for new cards
nivmukka 0:7a46e9e77d32 65 if ( ! RfChip.PICC_IsNewCardPresent())
nivmukka 0:7a46e9e77d32 66 {
nivmukka 0:7a46e9e77d32 67 RfChip.PCD_Init();
nivmukka 0:7a46e9e77d32 68 wait_ms(300);
nivmukka 0:7a46e9e77d32 69 // continue;
nivmukka 0:7a46e9e77d32 70 }
nivmukka 0:7a46e9e77d32 71
nivmukka 0:7a46e9e77d32 72 // Select one of the cards
nivmukka 0:7a46e9e77d32 73 if ( ! RfChip.PICC_ReadCardSerial())
nivmukka 0:7a46e9e77d32 74 {
nivmukka 0:7a46e9e77d32 75 wait_ms(200);
nivmukka 0:7a46e9e77d32 76 continue;
nivmukka 0:7a46e9e77d32 77 }
nivmukka 0:7a46e9e77d32 78
nivmukka 0:7a46e9e77d32 79 LedGreen = 0;
nivmukka 0:7a46e9e77d32 80
nivmukka 0:7a46e9e77d32 81 // Print Card UID
nivmukka 0:7a46e9e77d32 82 printf("\n\r");
nivmukka 0:7a46e9e77d32 83 printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-READY FOR SCAN-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
nivmukka 0:7a46e9e77d32 84 printf("\nCard UID: ");
nivmukka 0:7a46e9e77d32 85 for (uint8_t i = 0; i < RfChip.uid.size; i++)
nivmukka 0:7a46e9e77d32 86 {
nivmukka 0:7a46e9e77d32 87 printf("%X02", RfChip.uid.uidByte[i]);
nivmukka 0:7a46e9e77d32 88 user[i]=RfChip.uid.uidByte[i];
nivmukka 0:7a46e9e77d32 89 }
nivmukka 0:7a46e9e77d32 90 //printf("\n");
nivmukka 0:7a46e9e77d32 91
nivmukka 0:7a46e9e77d32 92 sprintf(temp,"%X02%X02%X02%X02",user[0],user[1],user[2],user[3]);
nivmukka 0:7a46e9e77d32 93 //printf("temp is %s",temp);
nivmukka 0:7a46e9e77d32 94
nivmukka 0:7a46e9e77d32 95 if(strcmp(temp, Apoorva)==0)
nivmukka 0:7a46e9e77d32 96 {
nivmukka 0:7a46e9e77d32 97 printf("\nWelcome! Apoorva\n");
nivmukka 0:7a46e9e77d32 98 if (flag2==1)
nivmukka 0:7a46e9e77d32 99 {
nivmukka 0:7a46e9e77d32 100 printf("Already logged in!\n");
nivmukka 0:7a46e9e77d32 101
nivmukka 0:7a46e9e77d32 102 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 103 myLcd.DrawString("Welcome! Apoorva");
nivmukka 0:7a46e9e77d32 104 wait( 3 );
nivmukka 0:7a46e9e77d32 105 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 106
nivmukka 0:7a46e9e77d32 107 }
nivmukka 0:7a46e9e77d32 108 else if (flag2==0)
nivmukka 0:7a46e9e77d32 109 {
nivmukka 0:7a46e9e77d32 110 printf("\nWriting data to the SD card log...\n");
nivmukka 0:7a46e9e77d32 111 printf("Data successfully logged.\n");
nivmukka 0:7a46e9e77d32 112 fp = fopen("/sd/niv_alert_log.txt", "a+");
nivmukka 0:7a46e9e77d32 113 if (fp == NULL)
nivmukka 0:7a46e9e77d32 114 {
nivmukka 0:7a46e9e77d32 115 pc.printf("Unable to write the file \n");
nivmukka 0:7a46e9e77d32 116 }
nivmukka 0:7a46e9e77d32 117 else
nivmukka 0:7a46e9e77d32 118 {
nivmukka 0:7a46e9e77d32 119 fprintf(fp, "\nApoorva logged in. \n");
nivmukka 0:7a46e9e77d32 120 fclose(fp);
nivmukka 0:7a46e9e77d32 121 }
nivmukka 0:7a46e9e77d32 122 flag2=1;
nivmukka 0:7a46e9e77d32 123
nivmukka 0:7a46e9e77d32 124 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 125 myLcd.DrawString("Welcome! Apoorva");
nivmukka 0:7a46e9e77d32 126 wait( 3 );
nivmukka 0:7a46e9e77d32 127 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 128 }
nivmukka 0:7a46e9e77d32 129 }
nivmukka 0:7a46e9e77d32 130 else if(strcmp(temp,Nivedita)==0)
nivmukka 0:7a46e9e77d32 131 {
nivmukka 0:7a46e9e77d32 132 printf("\nWelcome! Nivedita\n");
nivmukka 0:7a46e9e77d32 133 if (flag1==1)
nivmukka 0:7a46e9e77d32 134 {
nivmukka 0:7a46e9e77d32 135 printf("Already logged in!\n");
nivmukka 0:7a46e9e77d32 136
nivmukka 0:7a46e9e77d32 137 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 138 myLcd.DrawString("Welcome! Nivedita");
nivmukka 0:7a46e9e77d32 139 wait( 3 );
nivmukka 0:7a46e9e77d32 140 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 141
nivmukka 0:7a46e9e77d32 142 }
nivmukka 0:7a46e9e77d32 143 else if (flag1==0)
nivmukka 0:7a46e9e77d32 144 {
nivmukka 0:7a46e9e77d32 145 printf("\nWriting data to the SD card log...\n");
nivmukka 0:7a46e9e77d32 146 printf("Data successfully logged.\n");
nivmukka 0:7a46e9e77d32 147 fp = fopen("/sd/niv_alert_log.txt", "a+");
nivmukka 0:7a46e9e77d32 148 if (fp == NULL)
nivmukka 0:7a46e9e77d32 149 {
nivmukka 0:7a46e9e77d32 150 pc.printf("Unable to write the file \n");
nivmukka 0:7a46e9e77d32 151 }
nivmukka 0:7a46e9e77d32 152 else
nivmukka 0:7a46e9e77d32 153 {
nivmukka 0:7a46e9e77d32 154 fprintf(fp, "\nNivedita logged in. \n");
nivmukka 0:7a46e9e77d32 155 fclose(fp);
nivmukka 0:7a46e9e77d32 156 }
nivmukka 0:7a46e9e77d32 157 flag1=1;
nivmukka 0:7a46e9e77d32 158 //printf("flag1=%i\n",flag1);
nivmukka 0:7a46e9e77d32 159
nivmukka 0:7a46e9e77d32 160 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 161 myLcd.DrawString("Welcome! Nivedita");
nivmukka 0:7a46e9e77d32 162 wait( 3 );
nivmukka 0:7a46e9e77d32 163 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 164
nivmukka 0:7a46e9e77d32 165 }
nivmukka 0:7a46e9e77d32 166
nivmukka 0:7a46e9e77d32 167 //printf("Just after continue\n");
nivmukka 0:7a46e9e77d32 168 }
nivmukka 0:7a46e9e77d32 169 else if (strcmp(temp,Nivedita) || strcmp(temp,Apoorva) != 0)
nivmukka 0:7a46e9e77d32 170 {
nivmukka 0:7a46e9e77d32 171 printf("\nUnregistered User Detected!!!\n");
nivmukka 0:7a46e9e77d32 172
nivmukka 0:7a46e9e77d32 173 myLcd.InitLcd();
nivmukka 0:7a46e9e77d32 174 myLcd.DrawString("Unregistered User! Alert!!");
nivmukka 0:7a46e9e77d32 175 wait(3);
nivmukka 0:7a46e9e77d32 176 myLcd.ShutdownLcd();
nivmukka 0:7a46e9e77d32 177
nivmukka 0:7a46e9e77d32 178 printf("\nWriting data to the sd card log...\n");
nivmukka 0:7a46e9e77d32 179 printf("Data successfully logged.\n");
nivmukka 0:7a46e9e77d32 180 fp = fopen("/sd/niv_alert_log.txt", "a+");
nivmukka 0:7a46e9e77d32 181 if (fp == NULL)
nivmukka 0:7a46e9e77d32 182 {
nivmukka 0:7a46e9e77d32 183 pc.printf("Unable to write the file \n");
nivmukka 0:7a46e9e77d32 184 }
nivmukka 0:7a46e9e77d32 185 else
nivmukka 0:7a46e9e77d32 186 {
nivmukka 0:7a46e9e77d32 187 fprintf(fp, "\nUnknown user found. Alert!! \n");
nivmukka 0:7a46e9e77d32 188 fclose(fp);
nivmukka 0:7a46e9e77d32 189 }
nivmukka 0:7a46e9e77d32 190 }
nivmukka 0:7a46e9e77d32 191 else
nivmukka 0:7a46e9e77d32 192 {
nivmukka 0:7a46e9e77d32 193 continue;
nivmukka 0:7a46e9e77d32 194 }
nivmukka 0:7a46e9e77d32 195 printf("\n\r");
nivmukka 0:7a46e9e77d32 196 printf("------------------------------------------------");
nivmukka 0:7a46e9e77d32 197 printf("\nReading data from the SD card log... \n");
nivmukka 0:7a46e9e77d32 198 fp = fopen("/sd/niv_alert_log.txt", "r");
nivmukka 0:7a46e9e77d32 199 if (fp != NULL)
nivmukka 0:7a46e9e77d32 200 {
nivmukka 0:7a46e9e77d32 201 int size = fread(buffer, sizeof(char), 1024, fp);
nivmukka 0:7a46e9e77d32 202 printf("Size of data: %d, Displaying text from log file: %s\n", size, buffer);
nivmukka 0:7a46e9e77d32 203 fclose(fp);
nivmukka 0:7a46e9e77d32 204 }
nivmukka 0:7a46e9e77d32 205 }
nivmukka 0:7a46e9e77d32 206 }