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:
cdupaty
Date:
Tue Mar 16 16:33:34 2021 +0000
Revision:
5:022e24a51359
Parent:
4:a2d1329d042c
Child:
6:b2f55a604fbe
version 0.2

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);
cdupaty 5:022e24a51359 47 pc.printf("Sys ID: 0x%X\n",system_id);
cdupaty 5:022e24a51359 48 pc.printf("Capacity: %d\n",capacity);
cdupaty 5:022e24a51359 49 pc.printf("Security level: %d\n",security_level);
cdupaty 5:022e24a51359 50 pc.printf("Device address: 0x%X\n",device_addr);
cdupaty 5:022e24a51359 51 pc.printf("Packet len: %d\n",packet_len);
cdupaty 5:022e24a51359 52 pc.printf("Baud rate: %d\n",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...");
cdupaty 5:022e24a51359 61 pc.printf("Sensor contains "); pc.printfinger.templateCount); pc.printf(" templates");
cdupaty 5:022e24a51359 62 }
WilliamMarshQMUL 0:75835b5692b9 63 }
cdupaty 5:022e24a51359 64
cdupaty 5:022e24a51359 65 int main(void) // run over and over again
cdupaty 5:022e24a51359 66 {
cdupaty 5:022e24a51359 67 setup();
cdupaty 5:022e24a51359 68 while(1)
cdupaty 5:022e24a51359 69 {
cdupaty 5:022e24a51359 70 getFingerprintID();
cdupaty 5:022e24a51359 71 wait_ms(50); //don't ned to run this at full speed.
cdupaty 5:022e24a51359 72 }
cdupaty 5:022e24a51359 73 return 0;
cdupaty 5:022e24a51359 74 }
cdupaty 5:022e24a51359 75
cdupaty 5:022e24a51359 76 uint8_t getFingerprintID() {
cdupaty 5:022e24a51359 77 uint8_t p = finger.getImage();
cdupaty 5:022e24a51359 78 switch (p) {
cdupaty 5:022e24a51359 79 case FINGERPRINT_OK:
cdupaty 5:022e24a51359 80 pc.printf("Image taken");
cdupaty 5:022e24a51359 81 break;
cdupaty 5:022e24a51359 82 case FINGERPRINT_NOFINGER:
cdupaty 5:022e24a51359 83 pc.printf("No finger detected");
cdupaty 5:022e24a51359 84 return p;
cdupaty 5:022e24a51359 85 case FINGERPRINT_PACKETRECIEVEERR:
cdupaty 5:022e24a51359 86 pc.printf("Communication error");
cdupaty 5:022e24a51359 87 return p;
cdupaty 5:022e24a51359 88 case FINGERPRINT_IMAGEFAIL:
cdupaty 5:022e24a51359 89 pc.printf("Imaging error");
cdupaty 5:022e24a51359 90 return p;
cdupaty 5:022e24a51359 91 default:
cdupaty 5:022e24a51359 92 pc.printf("Unknown error");
cdupaty 5:022e24a51359 93 return p;
cdupaty 5:022e24a51359 94 }
cdupaty 5:022e24a51359 95
cdupaty 5:022e24a51359 96 // OK success!
cdupaty 5:022e24a51359 97
cdupaty 5:022e24a51359 98 p = finger.image2Tz();
cdupaty 5:022e24a51359 99 switch (p) {
cdupaty 5:022e24a51359 100 case FINGERPRINT_OK:
cdupaty 5:022e24a51359 101 pc.printf("Image converted");
cdupaty 5:022e24a51359 102 break;
cdupaty 5:022e24a51359 103 case FINGERPRINT_IMAGEMESS:
cdupaty 5:022e24a51359 104 pc.printf("Image too messy");
cdupaty 5:022e24a51359 105 return p;
cdupaty 5:022e24a51359 106 case FINGERPRINT_PACKETRECIEVEERR:
cdupaty 5:022e24a51359 107 pc.printf("Communication error");
cdupaty 5:022e24a51359 108 return p;
cdupaty 5:022e24a51359 109 case FINGERPRINT_FEATUREFAIL:
cdupaty 5:022e24a51359 110 pc.printf("Could not find fingerprint features");
cdupaty 5:022e24a51359 111 return p;
cdupaty 5:022e24a51359 112 case FINGERPRINT_INVALIDIMAGE:
cdupaty 5:022e24a51359 113 pc.printf("Could not find fingerprint features");
cdupaty 5:022e24a51359 114 return p;
cdupaty 5:022e24a51359 115 default:
cdupaty 5:022e24a51359 116 pc.printf("Unknown error");
cdupaty 5:022e24a51359 117 return p;
cdupaty 5:022e24a51359 118 }
cdupaty 5:022e24a51359 119
cdupaty 5:022e24a51359 120 // OK converted!
cdupaty 5:022e24a51359 121 p = finger.fingerSearch();
cdupaty 5:022e24a51359 122 if (p == FINGERPRINT_OK) {
cdupaty 5:022e24a51359 123 pc.printf("Found a print match!");
cdupaty 5:022e24a51359 124 } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
cdupaty 5:022e24a51359 125 pc.printf("Communication error");
cdupaty 5:022e24a51359 126 return p;
cdupaty 5:022e24a51359 127 } else if (p == FINGERPRINT_NOTFOUND) {
cdupaty 5:022e24a51359 128 pc.printf("Did not find a match");
cdupaty 5:022e24a51359 129 return p;
cdupaty 5:022e24a51359 130 } else {
cdupaty 5:022e24a51359 131 pc.printf("Unknown error");
cdupaty 5:022e24a51359 132 return p;
cdupaty 5:022e24a51359 133 }
cdupaty 5:022e24a51359 134
cdupaty 5:022e24a51359 135 // found a match!
cdupaty 5:022e24a51359 136 pc.printf("Found ID #"); pc.printfinger.fingerID);
cdupaty 5:022e24a51359 137 pc.printf(" with confidence of "); pc.printfinger.confidence);
cdupaty 5:022e24a51359 138
cdupaty 5:022e24a51359 139 return finger.fingerID;
cdupaty 5:022e24a51359 140 }
cdupaty 5:022e24a51359 141
cdupaty 5:022e24a51359 142 // returns -1 if failed, otherwise returns ID #
cdupaty 5:022e24a51359 143 int getFingerprintIDez() {
cdupaty 5:022e24a51359 144 uint8_t p = finger.getImage();
cdupaty 5:022e24a51359 145 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 146
cdupaty 5:022e24a51359 147 p = finger.image2Tz();
cdupaty 5:022e24a51359 148 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 149
cdupaty 5:022e24a51359 150 p = finger.fingerFastSearch();
cdupaty 5:022e24a51359 151 if (p != FINGERPRINT_OK) return -1;
cdupaty 5:022e24a51359 152
cdupaty 5:022e24a51359 153 // found a match!
cdupaty 5:022e24a51359 154 pc.printf("Found ID #"); pc.printfinger.fingerID);
cdupaty 5:022e24a51359 155 pc.printf(" with confidence of "); pc.printfinger.confidence);
cdupaty 5:022e24a51359 156 return finger.fingerID;
cdupaty 5:022e24a51359 157 }