David Bruce 15597305

Dependencies:   mbed N5110 GT511C3

Files at this revision

API Documentation at this revision

Comitter:
davidbruce
Date:
Mon May 04 15:05:09 2020 +0000
Parent:
2:61e0f5bec6ff
Commit message:
IOTProjectCodeDavidBruce15597305

Changed in this revision

N5110.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/N5110.lib	Mon May 04 15:05:09 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/davidbruce/code/N5110/#c3025eb862d8
--- 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
+}