Library for fingerprint R503 Adaptation from Arduino Library

Dependencies:   Fingerprint-Lib

This a library and demo for fingerprint R503

For datasheet, see here -> https://cdn-shop.adafruit.com/product-files/4651/4651_R503%20fingerprint%20module%20user%20manual.pdf

This is an adaptation of Adafruit library (Arduino) to ARM MBED, tested on NUCLEO L073RZ

https://os.mbed.com/media/uploads/cdupaty/r503b.jpg https://os.mbed.com/media/uploads/cdupaty/r503-nucleol073rzpetit.jpg

For this exemple default connexions on NUCLEOL073RZ are :

TX <-> PC_0

RX <-> PC_1

WAKEUP <-> PB_0 , this is an Interrupt , you must connect a pull-up resistor (4K to 15k) between WAKEUP and DC3.3v

Power Supply 3.3v on Arduino connector

3.3VT : 5v on Arduino connector

IMPORTANT !!! There ara yet some bugs with communications UART

Committer:
fduchiron
Date:
Wed Mar 17 14:14:55 2021 +0000
Revision:
6:b2f55a604fbe
Parent:
5:022e24a51359
Child:
7:afa17a46252b
nothing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cdupaty 5:022e24a51359 1 /***************************************************
cdupaty 5:022e24a51359 2 This is an example sketch for our optical Fingerprint sensor
cdupaty 5:022e24a51359 3
cdupaty 5:022e24a51359 4 Designed specifically to work with the Adafruit BMP085 Breakout
cdupaty 5:022e24a51359 5 ----> http://www.adafruit.com/products/751
WilliamMarshQMUL 2:e92d97ac59e4 6
cdupaty 5:022e24a51359 7 These displays use TTL Serial to communicate, 2 pins are required to
cdupaty 5:022e24a51359 8 interface
cdupaty 5:022e24a51359 9 Adafruit invests time and resources providing this open source code,
cdupaty 5:022e24a51359 10 please support Adafruit and open-source hardware by purchasing
cdupaty 5:022e24a51359 11 products from Adafruit!
cdupaty 5:022e24a51359 12
cdupaty 5:022e24a51359 13 Written by Limor Fried/Ladyada for Adafruit Industries.
cdupaty 5:022e24a51359 14 BSD license, all text above must be included in any redistribution
cdupaty 5:022e24a51359 15 ****************************************************/
cdupaty 5:022e24a51359 16
cdupaty 5:022e24a51359 17
cdupaty 5:022e24a51359 18 #include <Fingerprint.h>
WilliamMarshQMUL 0:75835b5692b9 19 #include "mbed.h"
WilliamMarshQMUL 0:75835b5692b9 20 DigitalOut myled(LED1);
WilliamMarshQMUL 0:75835b5692b9 21 Serial pc(USBTX, USBRX); // tx, rx
WilliamMarshQMUL 0:75835b5692b9 22
cdupaty 5:022e24a51359 23 Fingerprint finger(PC_1,PC_0,PB_0,0x0); // TX,TX,RESET,pass
cdupaty 5:022e24a51359 24
cdupaty 5:022e24a51359 25 void setup()
cdupaty 5:022e24a51359 26 {
cdupaty 5:022e24a51359 27 pc.baud(9600);
cdupaty 5:022e24a51359 28 wait_ms(100);
cdupaty 5:022e24a51359 29 pc.printf("\n\nAdafruit finger detect test");
cdupaty 5:022e24a51359 30
cdupaty 5:022e24a51359 31 // set the data rate for the sensor serial port
cdupaty 5:022e24a51359 32 finger.begin(57600);
cdupaty 5:022e24a51359 33 wait_ms(5);
cdupaty 5:022e24a51359 34 if (finger.verifyPassword()) {
cdupaty 5:022e24a51359 35 pc.printf("Found fingerprint sensor!");
cdupaty 5:022e24a51359 36 } else {
cdupaty 5:022e24a51359 37 pc.printf("Did not find fingerprint sensor :(");
cdupaty 5:022e24a51359 38 while (1)
cdupaty 5:022e24a51359 39 {
cdupaty 5:022e24a51359 40 wait_ms(1);
WilliamMarshQMUL 0:75835b5692b9 41 }
cdupaty 5:022e24a51359 42 }
cdupaty 5:022e24a51359 43
cdupaty 5:022e24a51359 44 pc.printf("Reading sensor parameters");
cdupaty 5:022e24a51359 45 finger.getParameters();
cdupaty 5:022e24a51359 46 pc.printf("Status: 0x%X\n",finger.status_reg);
fduchiron 6:b2f55a604fbe 47 pc.printf("Sys ID: 0x%X\n",finger.system_id);
fduchiron 6:b2f55a604fbe 48 pc.printf("Capacity: %d\n",finger.capacity);
fduchiron 6:b2f55a604fbe 49 pc.printf("Security level: %d\n",finger.security_level);
fduchiron 6:b2f55a604fbe 50 pc.printf("Device address: 0x%X\n",finger.device_addr);
fduchiron 6:b2f55a604fbe 51 pc.printf("Packet len: %d\n",finger.packet_len);
fduchiron 6:b2f55a604fbe 52 pc.printf("Baud rate: %d\n",finger.baud_rate);
cdupaty 5:022e24a51359 53
cdupaty 5:022e24a51359 54 finger.getTemplateCount();
cdupaty 5:022e24a51359 55
cdupaty 5:022e24a51359 56 if (finger.templateCount == 0) {
cdupaty 5:022e24a51359 57 pc.printf("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
cdupaty 5:022e24a51359 58 }
cdupaty 5:022e24a51359 59 else {
cdupaty 5:022e24a51359 60 pc.printf("Waiting for valid finger...");
fduchiron 6:b2f55a604fbe 61 pc.printf("Sensor contains : %d templates\n",finger.templateCount);
cdupaty 5:022e24a51359 62 }
WilliamMarshQMUL 0:75835b5692b9 63 }
cdupaty 5:022e24a51359 64
cdupaty 5:022e24a51359 65 uint8_t getFingerprintID() {
cdupaty 5:022e24a51359 66 uint8_t p = finger.getImage();
cdupaty 5:022e24a51359 67 switch (p) {
cdupaty 5:022e24a51359 68 case FINGERPRINT_OK:
cdupaty 5:022e24a51359 69 pc.printf("Image taken");
cdupaty 5:022e24a51359 70 break;
cdupaty 5:022e24a51359 71 case FINGERPRINT_NOFINGER:
cdupaty 5:022e24a51359 72 pc.printf("No finger detected");
cdupaty 5:022e24a51359 73 return p;
cdupaty 5:022e24a51359 74 case FINGERPRINT_PACKETRECIEVEERR:
cdupaty 5:022e24a51359 75 pc.printf("Communication error");
cdupaty 5:022e24a51359 76 return p;
cdupaty 5:022e24a51359 77 case FINGERPRINT_IMAGEFAIL:
cdupaty 5:022e24a51359 78 pc.printf("Imaging error");
cdupaty 5:022e24a51359 79 return p;
cdupaty 5:022e24a51359 80 default:
cdupaty 5:022e24a51359 81 pc.printf("Unknown error");
cdupaty 5:022e24a51359 82 return p;
cdupaty 5:022e24a51359 83 }
cdupaty 5:022e24a51359 84
cdupaty 5:022e24a51359 85 // OK success!
cdupaty 5:022e24a51359 86
cdupaty 5:022e24a51359 87 p = finger.image2Tz();
cdupaty 5:022e24a51359 88 switch (p) {
cdupaty 5:022e24a51359 89 case FINGERPRINT_OK:
cdupaty 5:022e24a51359 90 pc.printf("Image converted");
cdupaty 5:022e24a51359 91 break;
cdupaty 5:022e24a51359 92 case FINGERPRINT_IMAGEMESS:
cdupaty 5:022e24a51359 93 pc.printf("Image too messy");
cdupaty 5:022e24a51359 94 return p;
cdupaty 5:022e24a51359 95 case FINGERPRINT_PACKETRECIEVEERR:
cdupaty 5:022e24a51359 96 pc.printf("Communication error");
cdupaty 5:022e24a51359 97 return p;
cdupaty 5:022e24a51359 98 case FINGERPRINT_FEATUREFAIL:
cdupaty 5:022e24a51359 99 pc.printf("Could not find fingerprint features");
cdupaty 5:022e24a51359 100 return p;
cdupaty 5:022e24a51359 101 case FINGERPRINT_INVALIDIMAGE:
cdupaty 5:022e24a51359 102 pc.printf("Could not find fingerprint features");
cdupaty 5:022e24a51359 103 return p;
cdupaty 5:022e24a51359 104 default:
cdupaty 5:022e24a51359 105 pc.printf("Unknown error");
cdupaty 5:022e24a51359 106 return p;
cdupaty 5:022e24a51359 107 }
cdupaty 5:022e24a51359 108
cdupaty 5:022e24a51359 109 // OK converted!
cdupaty 5:022e24a51359 110 p = finger.fingerSearch();
cdupaty 5:022e24a51359 111 if (p == FINGERPRINT_OK) {
cdupaty 5:022e24a51359 112 pc.printf("Found a print match!");
cdupaty 5:022e24a51359 113 } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
cdupaty 5:022e24a51359 114 pc.printf("Communication error");
cdupaty 5:022e24a51359 115 return p;
cdupaty 5:022e24a51359 116 } else if (p == FINGERPRINT_NOTFOUND) {
cdupaty 5:022e24a51359 117 pc.printf("Did not find a match");
cdupaty 5:022e24a51359 118 return p;
cdupaty 5:022e24a51359 119 } else {
cdupaty 5:022e24a51359 120 pc.printf("Unknown error");
cdupaty 5:022e24a51359 121 return p;
cdupaty 5:022e24a51359 122 }
cdupaty 5:022e24a51359 123
cdupaty 5:022e24a51359 124 // found a match!
fduchiron 6:b2f55a604fbe 125 pc.printf("Found ID #%d\n",finger.fingerID);
fduchiron 6:b2f55a604fbe 126 pc.printf(" with confidence of %d\n",finger.confidence);
cdupaty 5:022e24a51359 127
cdupaty 5:022e24a51359 128 return finger.fingerID;
cdupaty 5:022e24a51359 129 }
cdupaty 5:022e24a51359 130
cdupaty 5:022e24a51359 131 // returns -1 if failed, otherwise returns ID #
cdupaty 5:022e24a51359 132 int getFingerprintIDez() {
cdupaty 5:022e24a51359 133 uint8_t p = finger.getImage();
cdupaty 5:022e24a51359 134 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 135
cdupaty 5:022e24a51359 136 p = finger.image2Tz();
cdupaty 5:022e24a51359 137 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 138
cdupaty 5:022e24a51359 139 p = finger.fingerFastSearch();
cdupaty 5:022e24a51359 140 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 141
cdupaty 5:022e24a51359 142 // found a match!
fduchiron 6:b2f55a604fbe 143 pc.printf("Found ID #%d\n",finger.fingerID);
fduchiron 6:b2f55a604fbe 144 pc.printf(" with confidence of %d\n",finger.confidence);
cdupaty 5:022e24a51359 145 return finger.fingerID;
fduchiron 6:b2f55a604fbe 146 }
fduchiron 6:b2f55a604fbe 147
fduchiron 6:b2f55a604fbe 148 int main(void) // run over and over again
fduchiron 6:b2f55a604fbe 149 {
fduchiron 6:b2f55a604fbe 150 setup();
fduchiron 6:b2f55a604fbe 151 while(1)
fduchiron 6:b2f55a604fbe 152 {
fduchiron 6:b2f55a604fbe 153 getFingerprintID();
fduchiron 6:b2f55a604fbe 154 wait_ms(50); //don't ned to run this at full speed.
fduchiron 6:b2f55a604fbe 155 }
fduchiron 6:b2f55a604fbe 156 return 0;
fduchiron 6:b2f55a604fbe 157 }
fduchiron 6:b2f55a604fbe 158