David Bruce 15597305

Dependencies:   mbed N5110 GT511C3

Revision:
3:938a2d4ae661
Parent:
2:61e0f5bec6ff
diff -r 61e0f5bec6ff -r 938a2d4ae661 main.cpp
--- a/main.cpp	Thu Dec 03 05:22:09 2015 +0000
+++ b/main.cpp	Mon May 04 15:05:09 2020 +0000
@@ -1,82 +1,874 @@
 #include "mbed.h"
 #include "GT511C3.hpp"
- 
-Serial debug(USBTX,USBRX);
- 
+#include "N5110.h"
+N5110 N5110(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);  
+Serial serial(USBTX, USBRX);
 DigitalOut myled(LED1);
-GT511C3 finger(p9,p10);
- 
+GT511C3 GT511C3(PTC17,PTC16);
+
+void Clock();
+void EnrollFP1();
+void EnrollFP2();
+void EnrollFP3();
+void EnrollFP4();
+void EnrollFP5();
+void EnrollFP6();
+void EnrollFP7();
+void EnrollFP8();
+void EnrollFP9();
+void IDSelect();
+int clkcheck1;
+int clkcheck2;
+int clkcheck3;
+int clkcheck4;
+int clkcheck5;
+int clkcheck6;
+int clkcheck7;
+int clkcheck8;
+int clkcheck9;
+int UserIDDetect;
+int UserID;
+int select;
+
 int progress(int status,char *msg)
 {
-    debug.printf("%s",msg);
+    serial.printf("%s",msg);
     return 0;
 }
- 
-int main() {
-    int sts = 0;
-    int ID = 0;
- 
-    debug.format(8,Serial::None,1);
-    debug.baud(115200);
- 
-    debug.printf("Fingerprint reader module \"GT-511C3 / GT-511C31\" test program.\n");
-    debug.printf("Build: %s %s\n",__DATE__,__TIME__);
- 
-    debug.printf("Open\n");
-    sts = finger.Open();
-    debug.printf("sts = %d\n",sts);
-    if(sts == 0){
-        int i;
-        debug.printf("FirmwareVersion = %lx\n",finger.FirmwareVersion);
-        debug.printf("IsoAreaMaxSize = %ld\n",finger.IsoAreaMaxSize);
-        debug.printf("DeviceSerialNumber = ");
-        for(i = 0; i < sizeof(finger.DeviceSerialNumber);i++){
-            debug.printf("%02X",finger.DeviceSerialNumber[i]);
-        }
-        debug.printf("\n");
+
+int main()
+{
+    clkcheck1 = 0;
+    clkcheck2= 0;
+    clkcheck3= 0;     
+    clkcheck4= 0;
+    clkcheck5= 0;
+    clkcheck6= 0;
+    clkcheck7= 0;
+    clkcheck8= 0;
+    clkcheck9= 0;
+    serial.format(8,Serial::None,1);
+    serial.baud(9600);
+    GT511C3.Open(); //Initialise the Fingerprint Sensor
+    N5110.init(); //Initialise the screen
+    N5110.setContrast(0);
+    N5110.normalMode();
+    N5110.setBrightness(0); //Max Brightness
+    N5110.printString("Biometric",1,1);
+    N5110.printString("Smart",1,2);
+    N5110.printString("Attendance",1,3);
+    N5110.printString("System",1,4);
+    N5110.refresh();
+    wait(4);
+    N5110.clear();
+    N5110.printString("By",10,1);
+    N5110.printString("David Bruce",1,2);
+    N5110.printString("Loading",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.printString("Loading.",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.printString("Loading..",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.printString("Loading...",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.clear();
+    N5110.printString("By",10,1);
+    N5110.printString("David Bruce",1,2);
+    N5110.printString("Loading.",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.printString("Loading..",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.clear();
+    N5110.printString("Press'a' on",1,2); //works with any key, but a is not linked to anything later so stop confusion
+    N5110.printString("the keyboard",1,3);
+    N5110.printString("to continue",1,4);
+    N5110.refresh();
+    wait(0.25);
+    N5110.clear();
+    IDSelect();
     }
- 
-    // Deletes All Fingerprints enrolled in the database
-    debug.printf("Deleting IDs = %d\n", finger.DeleteAllIDs());
- 
-    // How to create and download a template from the scanner
-    // Setting the enrollID to -1 tells the scanner to not save the template but
-    // instead to send the data to the host.
-    int EnrollID = -1;  
-    // The size of one template
-    unsigned char data[498];
-    // Create a template with the scanner
-    finger.Enroll(EnrollID,progress);
-    // Receive the template from the scanner
-    debug.printf("RecvData = %d\n", finger.RecvData(data, 498));
-    debug.printf("Data[0-3] = %X %X %X %X\n", data[0], data[1],data[2],data[3]);
+    
+void IDSelect(){
+        while(1){
+    char c = serial.getc();
+    N5110.clear();
+    N5110.printString("Select ID:",1,0);
+    N5110.printString("To do so",1,1);
+    N5110.printString("select a no.",1,2);
+    N5110.printString("from 1-9 on",1,3);
+    N5110.printString("your keyboard. Use",1,4);
+    N5110.printString("'e' to confirm",1,5);
+    N5110.refresh();
+    serial.printf("%s",select);
     
-    // Since we have a template we want to enroll in the database
-    // We call SetTemplate which will upload the template to the scanner
-    // 11 is the ID that this template will be enrolled in
-    debug.printf("SetTemplate = %d\n", finger.SetTemplate(11,data,498));
+        if(c == '1') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 1 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 1;
+        }
+        
+        if(c == '2') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 2 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 2;
+        }
+        
+        if(c == '3') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 3 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 3;
+        }
+        
+        if(c == '4') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 4 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 4;
+        }
+        
+        if(c == '5') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 5 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 5;
+        }
+        
+        if(c == '6') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 6 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 6;
+        }
+        
+        if(c == '7') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 7 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 7;
+        }
+        
+        if(c == '8') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 8 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 8;
+        }
+        
+        if(c == '9') {
+        N5110.clear();
+        N5110.printString("Select ID:",1,0);
+        N5110.printString("..... 9 .....",1,1);
+        N5110.printString("Press the letter",1,4);
+        N5110.printString("'e' to confirm",1,5);
+        N5110.refresh();
+        select = 9;
+        }
+        
+        if((select == 1) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 1.....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP1();
+        }
+        
+        if((select == 2) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 2 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP2();
+        }
+        
+        if((select == 3) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 3 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP3();
+        }
+        
+         if((select == 4) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 4 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP4();
+        }
+        
+        if((select == 5) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 5 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP5();
+        }
+        
+        if((select == 6) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 6 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP6();
+        }
+        
+        if((select == 7) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 7 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP7();
+        }
+        
+        if((select == 8) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 8 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP8();
+        }
+        
+        if((select == 9) && (c == 'e')) {
+        N5110.clear();
+        N5110.printString("ID Selected:",1,0);
+        N5110.printString("..... 9 .....",1,1);
+        N5110.refresh();
+        wait(4);
+        EnrollFP9();
+        }
+}
+}    
+
+void EnrollFP1(){   
+
+    if(1){
+    int UserID = 1; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+    
+void EnrollFP2(){   
+
+    if(1){
+    int UserID = 2;// Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP3(){   
+
+    if(1){
+    int UserID = 3; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP4(){   
+
+    if(1){
+    int UserID = 4; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP5(){   
+
+    if(1){
+    int UserID = 5; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP6(){   
+
+    if(1){
+    int UserID = 6; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
     
- 
-    // Turn on the scanner backlight so we can get good captures
-    // during identification testing
-    finger.CmosLed(1);
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP7(){   
+
+    if(1){
+    int UserID = 7; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP8(){   
+
+    if(1){
+    int UserID = 8; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }
+   }
+   
+void EnrollFP9(){   
+
+    if(1){
+    int UserID = 9; // Need to get this value from keyboard
+    if(GT511C3.CheckEnrolled(UserID) == 0) { //If the User has previously been enrolled
+    if(GT511C3.DeleteID(UserID) == 0){};//Delete User ID
+         }
+
+    N5110.clear();  
+    N5110.printString("Place your",1,0);
+    N5110.printString("finger on the",1,1);
+    N5110.printString("sensor and",1,2);
+    N5110.printString("remove it. Do",1,3);
+    N5110.printString("until it is",1,4);
+    N5110.printString("enrolled",1,5); //Instructions       
+    N5110.refresh();
+    
+    GT511C3.Enroll(UserID,progress); //Enroll User with UserID of 1
+
+    if(GT511C3.CheckEnrolled(UserID) == 0) {
+        N5110.clear();
+        N5110.printString("Successfully",1,1);
+        N5110.printString("Enrolled",1,2);
+        N5110.refresh();
+        wait(2); //If UserID is enrolled, print "Successfully Enrolled" on N5110 screen
+          
+    GT511C3.CmosLed(1);
+    Clock(); //Run Clock() This is seperate due to it being triggered in two places in the "register once, rebootable" version. 
+   }
+   }                         
+   } 
+   
+void Clock(){ //This part of the code identifies the fingerprint, checks if it is enrolled and if so whether they are clocking in or clocking out
     while(1) {
-        debug.printf("Press finger for Identify\n");
-        // Wait for a finger on the scanner
-        finger.WaitPress(1);
-        // Wait until we get a good capture
-        if(finger.Capture(1) != 0)
-            continue;
+        int reset = 0;
+        N5110.clear();
+        N5110.printString("Scan Finger to",1,2);
+        N5110.printString("Clock In/Out",1,3);   
+        N5110.refresh();
+        
+        
+        GT511C3.WaitPress(1); //Code waits for a press
+        if(GT511C3.Capture(1) != 0) continue; //Makes sure the scan of the fingerprint is a good one
+        UserIDDetect = GT511C3.Identify(); //Detects the UserID of the press
+        
+            
+        if (UserIDDetect ==-1) { //If -1, it is not registered
+            N5110.clear();
+            N5110.printString("Fingerprint",1,0);
+            N5110.printString("Not Recognised",1,1);                    
+            N5110.refresh();
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 1) && (clkcheck1 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 1",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:1");
+            N5110.refresh();
+            clkcheck1 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 1) && (clkcheck1 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 1",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:1");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck1 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 2) && (clkcheck2 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 2",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:2");
+            N5110.refresh();
+            clkcheck2 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 2) && (clkcheck2 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 2",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:2");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck2 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 3) && (clkcheck3 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
             
-        // Now that we have a good capute identify the finger
-        ID = finger.Identify();
+            N5110.printString("User 3",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:3");
+            N5110.refresh();
+            clkcheck3 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 3) && (clkcheck3 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 3",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:3");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck3 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 4) && (clkcheck4 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 4",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:4");
+            N5110.refresh();
+            clkcheck4 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 4) && (clkcheck4 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 4",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:4");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck4 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 5) && (clkcheck5 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 5",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:5");
+            N5110.refresh();
+            clkcheck5 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 5) && (clkcheck5 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 5",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:5");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck5 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 6) && (clkcheck6 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 6",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:6");
+            N5110.refresh();
+            clkcheck6 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
         
-        // If you used the same finger this should return 11
-        // Otherwise this will return -1
-        debug.printf("ID = %d\n",ID);
-        debug.printf("Remove finger\n");
+        if ((UserIDDetect == 6) && (clkcheck6 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 6",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:6");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck6 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 7) && (clkcheck7 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 7",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:7");
+            N5110.refresh();
+            clkcheck7 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 7) && (clkcheck7 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 7",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:7");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck7 = 0;
+            reset = 1;
+            wait(3);
+        };
         
-        // Wait until the finger is removed so we don't double identify a finger
-        finger.WaitPress(0);
+        if ((UserIDDetect == 8) && (clkcheck8 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 8",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:8");
+            N5110.refresh();
+            clkcheck8 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 8) && (clkcheck8 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 8",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:8");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck8 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        if ((UserIDDetect == 9) && (clkcheck9 == 0) && (reset == 0)){//If 1, it is the registered print, clkcheck 0 means the last action was a clock out
+            N5110.clear();
+
+            N5110.printString("User 9",1,1);
+            N5110.printString("Clocked in",1,2);
+            serial.printf("Clocked in" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:9");
+            N5110.refresh();
+            clkcheck9 = -1;
+            reset = 1;//Clock in and out both require reset 0, and both change reset to 1 for 3 seconds to stop the code automaticlaly switching between both while UserIDDetect = 1
+            wait(3);
+        };
+        
+        
+        if ((UserIDDetect == 9) && (clkcheck9 == -1) && (reset == 0)){
+            N5110.clear();
+
+            N5110.printString("User 9",1,1);
+            N5110.printString("Clocked Out",1,2);
+            serial.printf("Clocked Out" __DATE__);
+            serial.printf("Time:"__TIME__);
+            serial.printf("User:9");
+            N5110.refresh();
+            
+            N5110.refresh();
+            clkcheck9 = 0;
+            reset = 1;
+            wait(3);
+        };
+        
+        GT511C3.WaitPress(0); //Code waits for no press before looping
     }
-}
\ No newline at end of file
+}