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

Revision:
3:ade6c26d1b90
Parent:
0:a83db87be46c
Child:
4:6ba6c4be9dde
--- a/main.cpp	Mon Apr 07 19:36:26 2014 +0000
+++ b/main.cpp	Sat May 02 18:19:18 2015 +0000
@@ -1,38 +1,204 @@
 #include "mbed.h"
 #include "SDFileSystem.h"
+#include "MFRC522.h"
+#include <stdio.h>
+#include "N5110.h"
+// FRDM-K64F (Freescale) Pin for MFRC522 reset
+#define MF_RESET    PTD0
+FILE *fp;
+
+DigitalOut LedGreen(LED2);
+
+//Serial connection to PC for output
+Serial pc(USBTX, USBRX); // serial comm on the FRDM board
+//Serial uart(PTC17, PTC16);
+
+//    VCC,SCE,RST,D/C,MOSI,SCLK,LED
+//N5110 lcd(PTB2, PTC12, PTD0, PTB3, PTD6, PTD5, PTC12);
+N5110 lcd(PTB2, PTC12, PTD0, PTB3, PTD6, PTD5, PTA0);
+
+//MFRC522    RfChip   (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
+MFRC522    RfChip   (PTD2, PTD3, PTD1, PTE25, PTD0);
 
 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
-Serial pc(USBTX, USBRX);
-FILE *fp;
-char buffer[1024];
+char buffer[1024];   //UNKNOWN foe now
+//uint8_t line[100];
+uint8_t user[10];
+uint8_t userlist[2][10];
+char sam[16]="BC02CD022B02702";
+char tempsam[16];
+char abhishek[17]="6902BC029C021A02";
+char abhishektemp[17];
 
-int main() {
+int usercount=0;
+int found=0;
+int flag=0; //checks if the card scanner is run for the first time
+int m=0;
+
+int main() 
+
+{
     pc.printf("Initializing \n");
-    wait(2);
+    //wait(2);
+    
+     // initialise display 
+    lcd.init();
+    
+    // Init. RC522 Chip
+    RfChip.PCD_Init();
 
-    fp = fopen("/sd/hello.txt", "r");
-    if (fp != NULL) {
+   fp = fopen("/sd/attendance.txt", "r");
+    if (fp != NULL) 
+    {
         fclose(fp);
-        remove("/sd/hello.txt");
+        remove("/sd/attendance.txt");
         pc.printf("Remove an existing file with the same name \n");
     }
+   
 
+while (true) 
+{
+    LedGreen = 1;
+
+    // Look for new cards
+    if ( ! RfChip.PICC_IsNewCardPresent())
+    {
+      wait_ms(200);
+      continue;
+    }
+
+    // Select one of the cards
+    if ( ! RfChip.PICC_ReadCardSerial())
+    {
+      wait_ms(200);
+      continue;
+    }
+
+    LedGreen = 0;
+
+
+    
+    // Print Card UID
+    printf("Card UID: ");
+    for (uint8_t i = 0; i < RfChip.uid.size; i++)
+    {
+      printf(" %X02 ", RfChip.uid.uidByte[i]);
+     user[i]=RfChip.uid.uidByte[i];
+    }
+    
+    if(flag)
+    {   found=0;
+        for(uint8_t i = 0; i < usercount; i++)
+        {
+            for (uint8_t j = 0; j < RfChip.uid.size; j++)
+            {
+               if(userlist[i][j]==user[i])
+               {
+               found++;
+               printf("Found=%d\n",found);
+               }
+              //set some flag to not write name to sd card or array
+            }
+        }
+        if(found==9)
+        {
+                       printf("user already present");
+
+        }
+        else
+        {
+               //userlist[i][j]==user[i];
+               for (uint8_t j = 0; j < RfChip.uid.size; j++)
+                {
+                userlist[usercount][j]==user[j];
+                usercount++;
+                }
+           //     printf("\n user added");
+        }
+        }
+    else
+    {
+    for (uint8_t i = 0; i < RfChip.uid.size; i++)     //make it size of user
+            {
+              userlist[m][i]==user[i];
+              usercount++;
+              //set some flag to not write name to sd card or array
+            }
+         //     printf("\n user added");
+    }
+    flag=1;
+    found=0;
+
+    for(uint8_t i = 0; i < RfChip.uid.size; i++)
+    {
+        abhishektemp[i]=user[i];
+        
+      } 
+if(strcmp(abhishektemp, abhishek))
+{ 
+ printf("\n found abhishek");
+lcd.printString("ABHISHEK",0,0);
+continue;
+}
+else if(strcmp(abhishektemp,sam))
+{ 
+printf("\n found sam");
+lcd.printString("SAM",0,0);
+continue;
+}
+else
+{
+    continue;
+}
+}
+
+        
+       // Print Card type
+    uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
+    printf("\n PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
+    wait_ms(100);
+    
     printf("\nWriting data to the sd card \n");
-    fp = fopen("/sd/hello.txt", "w");
-    if (fp == NULL) {
+    fp = fopen("/sd/attendance.txt", "w");
+    if (fp == NULL) 
+    {
         pc.printf("Unable to write the file \n");
-    } else {
-        fprintf(fp, "mbed SDCard application!");
+    } 
+    else 
+    {
+        fprintf(fp, "\n ATTENDANCE RECORD \n ABHISHEK PRESENT \n");
+        for(uint8_t i = 0; i < usercount; i++)
+        {
+            for (uint8_t j = 0; j < RfChip.uid.size; j++)
+            {
+            /* if(userlist[i][j]==sam[j])
+               {
+            
+            fprintf(fp, "\n SAM PRESENT \n");
+
+               }
+               else if(userlist[i][j]==abhishek[j])
+               {
+                   fprintf(fp, "\n ABHISHEK PRESENT \n");
+
+               } */
+                    
+              //  std::fputc(userlist[i][j],fp);
+            fprintf(fp,"%s",userlist[i][j]);
+        // uint8_t fwrite(userlist[i][j],100,sizeof(userlist[i][j]),fp);
+            }
+         }
         fclose(fp);
         pc.printf("File successfully written! \n");
     }
 
     printf("\nReading data from the SD card. \n");
-    fp = fopen("/sd/hello.txt", "r");
-    if (fp != NULL) {
+    fp = fopen("/sd/attendance.txt", "r");
+    if (fp != NULL) 
+    {
         int size = fread(buffer, sizeof(char), 1024, fp);
-        printf("Number of data read: %d, text from hello.txt file: %s \n", size, buffer);
+        printf("Number of data read: %d, text from attendance.txt file: %s \n", size, buffer);
         fclose(fp);
     }
-    printf("End of Lab 4. \n");
 }
+