Fingerprint sensor example with WIZwiki-W7500. 1st release.

Dependencies:   GT511C3 mbed-src

Fork of GT511C3test by Toshihisa T

Revision:
3:459a4f985a45
Parent:
2:34a647292050
Child:
4:3dd0f98e6f09
--- a/main.cpp	Fri Jan 03 07:24:39 2014 +0000
+++ b/main.cpp	Fri Jan 03 12:56:03 2014 +0000
@@ -13,16 +13,62 @@
     unsigned short Response = 0;
     int sts = 0;
 
-    debug.printf("CMD_EnrollStart\n");
-    Parameter = EnrollID;
-    sts = finger.SendRecv(GT511C3::CMD_EnrollStart,&Parameter,&Response);
-    debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
-    if(sts != 0)
-        return sts;
-    if(Response != GT511C3::CMD_Ack)
-        return -100;
-    //
-    return sts;
+    debug.printf("EnrollStart\n");
+    finger.CmosLed(1);
+
+    while(1){
+        debug.printf("CMD_EnrollStart\n");
+        Parameter = EnrollID;
+        sts = finger.SendRecv(GT511C3::CMD_EnrollStart,&Parameter,&Response);
+        debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
+        if(sts != 0)
+            return sts;
+        if(Response != GT511C3::CMD_Ack)
+            return -100;
+
+        debug.printf("Remove finger\n");
+        finger.WaitPress(0);
+
+        while(1){
+            debug.printf("Press finger to Enroll (1st)\n");
+            finger.WaitPress(1);
+            if(finger.Capture(1) == 0)
+                break;
+        }
+
+        debug.printf("Remove finger\n");
+        if(finger.Enroll_N(1) != 0)
+            continue;
+        finger.WaitPress(0);
+
+        while(1){
+            debug.printf("Press finger to Enroll (2nd)\n");
+            finger.WaitPress(1);
+            if(finger.Capture(1) == 0)
+                break;
+        }
+
+        debug.printf("Remove finger\n");
+        if(finger.Enroll_N(2) != 0)
+            continue;
+        finger.WaitPress(0);
+
+        while(1){
+            debug.printf("Press finger to Enroll (3rd)\n");
+            finger.WaitPress(1);
+            if(finger.Capture(1) == 0)
+                break;
+        }
+
+        debug.printf("Remove finger\n");
+        if(finger.Enroll_N(3) != 0)
+            continue;
+        finger.WaitPress(0);
+
+        debug.printf("Enroll OK!\n");
+        break;
+    }
+    return 0;
 }
 
 int main() {
@@ -31,6 +77,7 @@
     int sts = 0;
     int count = 0;
     int ispress;
+    int ID;
 
     debug.format(8,Serial::None,1);
     debug.baud(115200);
@@ -42,18 +89,19 @@
     sts = finger.SendRecv(GT511C3::CMD_Open,&Parameter,&Response);
     debug.printf("sts = %d,Response=0x%04x\n",sts,Response);
 
-        Parameter = 1;
-        sts = finger.SendRecv(GT511C3::CMD_CmosLed,&Parameter,&Response);
-        debug.printf("sts = %d,Response=0x%04x\n",sts,Response);
+    if(1){
+        Enroll();
+    }
+
+    finger.CmosLed(1);
     while(1) {
-        ispress = 0;
-        Parameter = 0;
-        sts = finger.SendRecv(GT511C3::CMD_IsPressFinger,&Parameter,&Response);
-        debug.printf("sts = %d,Response=0x%04x Parameter=0x%08lx\n",sts,Response,Parameter);
-        if(sts == 0){
-            if((Response == GT511C3::CMD_Ack) && (Parameter == 0)){
-                ispress = 1;
-            }
+        ispress = finger.IsPress();
+        debug.printf("IsPressFinger=%d\n",ispress);
+        if(ispress){
+            if(finger.Capture(1) != 0)
+                continue;
+            ID = finger.Identify();
+            debug.printf("ID = %d\n",ID); 
         }
 #if 0
         myled = 1;