#include<Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white// uncomment this line:// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...// pin #2 is IN from sensor (GREEN wire)// pin #3 is OUT from arduino (WHITE wire)// comment these two lines if using hardware serial
SoftwareSerial mySerial(2,3);// RX,TX(UNO)//SoftwareSerial mySerial(10, 11); // RX,TX(MEGA2560)Adafruit_Fingerprint finger =Adafruit_Fingerprint(&mySerial);uint8_t id;voidsetup(){Serial.begin(9600);while(!Serial);// For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nAdafruit Fingerprint sensor enrollment");// set the data rate for the sensor serial portfinger.begin(57600);if(finger.verifyPassword()){Serial.println("Found fingerprint sensor!");}else{Serial.println("Did not find fingerprint sensor :(");while(1){delay(1);}}}uint8_treadnumber(void){uint8_t num =0;while(num ==0){while(! Serial.available());num = Serial.parseInt();}return num;}voidloop()// run over and over again{Serial.println("Ready to enroll a fingerprint!");Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");id =readnumber();if(id ==0){// ID #0 not allowed, try again!return;}Serial.print("Enrolling ID #");Serial.println(id);while(!getFingerprintEnroll());}uint8_tgetFingerprintEnroll(){int p =-1;Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);while(p != FINGERPRINT_OK){p = finger.getImage();switch(p){case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.println(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");break;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");break;default:Serial.println("Unknown error");break;}}// OK success!p = finger.image2Tz(1);switch(p){case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}Serial.println("Remove finger");delay(2000);p =0;while(p != FINGERPRINT_NOFINGER){p = finger.getImage();}Serial.print("ID "); Serial.println(id);p =-1;Serial.println("Place same finger again");while(p != FINGERPRINT_OK){p = finger.getImage();switch(p){case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.print(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");break;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");break;default:Serial.println("Unknown error");break;}}// OK success!p = finger.image2Tz(2);switch(p){case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}// OK converted!Serial.print("Creating model for #"); Serial.println(id);p = finger.createModel();if(p == FINGERPRINT_OK){Serial.println("Prints matched!");}elseif(p == FINGERPRINT_PACKETRECIEVEERR){Serial.println("Communication error");return p;}elseif(p == FINGERPRINT_ENROLLMISMATCH){Serial.println("Fingerprints did not match");return p;}else{Serial.println("Unknown error");return p;} Serial.print("ID "); Serial.println(id);p = finger.storeModel(id);if(p == FINGERPRINT_OK){Serial.println("Stored!");}elseif(p == FINGERPRINT_PACKETRECIEVEERR){Serial.println("Communication error");return p;}elseif(p == FINGERPRINT_BADLOCATION){Serial.println("Could not store in that location");return p;}elseif(p == FINGERPRINT_FLASHERR){Serial.println("Error writing to flash");return p;}else{Serial.println("Unknown error");return p;}}
voidloop()// run over and over again{getFingerprintIDez();delay(50);//don't ned to run this at full speed.}uint8_tgetFingerprintID(){uint8_t p = finger.getImage();switch(p){case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.println("No finger detected");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");return p;default:Serial.println("Unknown error");return p;}// OK success!p = finger.image2Tz();switch(p){case FINGERPRINT_OK:Serial.println("Image converted");break;case FINGERPRINT_IMAGEMESS:Serial.println("Image too messy");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("Could not find fingerprint features");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("Could not find fingerprint features");return p;default:Serial.println("Unknown error");return p;}// OK converted!p = finger.fingerFastSearch();if(p == FINGERPRINT_OK){Serial.println("Found a print match!");}elseif(p == FINGERPRINT_PACKETRECIEVEERR){Serial.println("Communication error");return p;}elseif(p == FINGERPRINT_NOTFOUND){Serial.println("Did not find a match");return p;}else{Serial.println("Unknown error");return p;}// found a match!Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence);return finger.fingerID;}// returns -1 if failed, otherwise returns ID #intgetFingerprintIDez(){uint8_t p = finger.getImage();if(p != FINGERPRINT_OK)return-1;p = finger.image2Tz();if(p != FINGERPRINT_OK)return-1;p = finger.fingerFastSearch();if(p != FINGERPRINT_OK)return-1;// found a match!Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence);return finger.fingerID;}