/***************************************************
This is an example sketch for our optical Fingerprint sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> [Link]
These displays use TTL Serial to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Adafruit_Fingerprint.h>
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// 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)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);
#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
uint8_t id;
void setup()
{
[Link](9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
[Link]("\n\nAdafruit Fingerprint sensor enrollment");
// set the data rate for the sensor serial port
[Link](57600);
if ([Link]()) {
[Link]("Found fingerprint sensor!");
} else {
[Link]("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
[Link](F("Reading sensor parameters"));
[Link]();
[Link](F("Status: 0x")); [Link](finger.status_reg, HEX);
[Link](F("Sys ID: 0x")); [Link](finger.system_id, HEX);
[Link](F("Capacity: ")); [Link]([Link]);
[Link](F("Security level: ")); [Link](finger.security_level);
[Link](F("Device address: ")); [Link](finger.device_addr, HEX);
[Link](F("Packet len: ")); [Link](finger.packet_len);
[Link](F("Baud rate: ")); [Link](finger.baud_rate);
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! [Link]());
num = [Link]();
}
return num;
}
void loop() // run over and over again
{
[Link]("Ready to enroll a fingerprint!");
[Link]("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;
}
[Link]("Enrolling ID #");
[Link](id);
while (! getFingerprintEnroll() );
}
uint8_t getFingerprintEnroll() {
int p = -1;
[Link]("Waiting for valid finger to enroll as #"); [Link](id);
while (p != FINGERPRINT_OK) {
p = [Link]();
switch (p) {
case FINGERPRINT_OK:
[Link]("Image taken");
break;
case FINGERPRINT_NOFINGER:
[Link](".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
[Link]("Imaging error");
break;
default:
[Link]("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
[Link]("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
[Link]("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
[Link]("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
[Link]("Could not find fingerprint features");
return p;
default:
[Link]("Unknown error");
return p;
}
[Link]("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = [Link]();
}
[Link]("ID "); [Link](id);
p = -1;
[Link]("Place same finger again");
while (p != FINGERPRINT_OK) {
p = [Link]();
switch (p) {
case FINGERPRINT_OK:
[Link]("Image taken");
break;
case FINGERPRINT_NOFINGER:
[Link](".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
[Link]("Imaging error");
break;
default:
[Link]("Unknown error");
break;
}
}
// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
[Link]("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
[Link]("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
[Link]("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
[Link]("Could not find fingerprint features");
return p;
default:
[Link]("Unknown error");
return p;
}
// OK converted!
[Link]("Creating model for #"); [Link](id);
p = [Link]();
if (p == FINGERPRINT_OK) {
[Link]("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
[Link]("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
[Link]("Fingerprints did not match");
return p;
} else {
[Link]("Unknown error");
return p;
}
[Link]("ID "); [Link](id);
p = [Link](id);
if (p == FINGERPRINT_OK) {
[Link]("Stored!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
[Link]("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
[Link]("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
[Link]("Error writing to flash");
return p;
} else {
[Link]("Unknown error");
return p;
}
return true;
}