#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()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println(F("Unknown error"));
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println(F("Found fingerprint sensor!"));
} else {
Serial.println(F("Did not find fingerprint sensor :("));
while (1) {
delay(1);
}
}
Serial.println(F("Reading sensor parameters"));
finger.getParameters();
//Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
//Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
//Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
//Serial.print(F("Security level: ")); Serial.println(finger.security_level);
//Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
//Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
//Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
}
return num;
}
void loop() // run over and over again
{
Serial.println(F("Ready to enroll a fingerprint!"));
Serial.println(F("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(F("Enrolling ID #"));
Serial.println(id);
while (! getFingerprintEnroll() );
}
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print(F("Waiting for valid finger to enroll as #")); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println(F("Image taken"));
break;
case FINGERPRINT_NOFINGER:
Serial.println(F("."));
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(F("Imaging error"));
break;
default:
Serial.println(F("Unknown error"));
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println(F("Image converted"));
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(F("Image too messy"));
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(F("Could not find fingerprint features"));
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(F("Could not find fingerprint features"));
return p;
default:
Serial.println(F("Unknown error"));
return p;
}
Serial.println(F("Remove finger"));
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print(F("ID ")); Serial.println(id);
p = -1;
Serial.println(F("Place same finger again"));
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println(F("Image taken"));
break;
case FINGERPRINT_NOFINGER:
Serial.print(F("."));
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(F("Imaging error"));
break;
default:
Serial.println(F("Unknown error"));
break;
}
}
// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println(F("Image converted"));
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(F("Image too messy"));
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(F("Could not find fingerprint features"));
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(F("Could not find fingerprint features"));
return p;
default:
Serial.println(F("Unknown error"));
return p;
}
// OK converted!
Serial.print(F("Creating model for #")); Serial.println(id);
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println(F("Prints matched!"));
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println(F("Unknown error"));
return p;
}
Serial.print(F("ID ")); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println(F("Stored!"));
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println(F("Could not store in that location"));
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println(F("Error writing to flash"));
return p;
} else {
Serial.println(F("Unknown error"));
return p;
}
return true;
}