diff --git a/examples/fingerprint_handler/fingerprint_handler.ino b/examples/fingerprint_handler/fingerprint_handler.ino new file mode 100644 index 0000000..63cf911 --- /dev/null +++ b/examples/fingerprint_handler/fingerprint_handler.ino @@ -0,0 +1,147 @@ +#include + +#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__) + +// UNO R503-5V Fingerprint Module +// 5V -> 1. Power Supply (RED) +// GND -> 2. GND (BLACK) +// pin #4 -> 3. TXD (YELLOW) +// pin #5 -> 4. RXD (GREEN) +// pin #3 -> 5. WAKEUP (BLUE) +// 3.3V or 5V -> 6. Touch induction power supply (WHITE) + +#define TXD_GPIO_NUM 4 +#define RXD_GPIO_NUM 5 +#define WAKEUP_GPIO_NUM 3 + +// Set up the serial port to use softwareserial.. +SoftwareSerial mySerial(TXD_GPIO_NUM, RXD_GPIO_NUM); + +#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); + +volatile bool fingerDetected = false; + +void setup() +{ + Serial.begin(9600); + while (!Serial); // For Yun/Leo/Micro/Zero/... + delay(100); + Serial.println("\n\nAdafruit finger detect test"); + + // set the data rate for the sensor serial port + finger.begin(57600); + delay(5); + if (finger.verifyPassword()) { + Serial.println("Found fingerprint sensor!"); + } else { + Serial.println("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); + + finger.getTemplateCount(); + + if (finger.templateCount == 0) { + Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example."); + } + else { + Serial.println("Waiting for valid finger..."); + Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); + } + + attachInterrupt(digitalPinToInterrupt(WAKEUP_GPIO_NUM), detectedFinger, FALLING); +} + +void loop() { + // put your main code here, to run repeatedly: + if (fingerDetected) { + getFingerprintID(); + fingerDetected = false; + } +} + +void detectedFinger() { + fingerDetected = true; +} + +uint8_t getFingerprintID() { + 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.fingerSearch(); + if (p == FINGERPRINT_OK) { + Serial.println("Found a print match!"); + } else if (p == FINGERPRINT_PACKETRECIEVEERR) { + Serial.println("Communication error"); + return p; + } else if (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; +} \ No newline at end of file