This is a RFID based attendance system. The current program is only for two users but can be easily scaled for more users. Apart from FRDM-K64F board, we have MFRC522, Nokia 5110 LCD and SD card as external hardware. Each time a legitimate card is flashed the name of the person will be displayed on the LCD and his information will be stored in SD card if it's already not there. I have used existing libraries for all the harware. Here is the list. MFRC522 - By Martin Olejar SDFileSystem - By Andrew Lindsay NOKIA_5110 - By Chris Yan.

Dependencies:   MFRC522 NOKIA_5110 SDFileSystem mbed

Fork of FTF2014_lab4 by Freescale

Committer:
abhishekgoyanka
Date:
Sun May 03 15:40:55 2015 +0000
Revision:
7:caeacf521320
Parent:
6:bc2ca526022f
Child:
8:ea7d0c9a35c4
BY ABHI

Who changed what in which revision?

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