Library for fingerprint R503 Adaptation from Arduino Library
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
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
main.cpp@5:022e24a51359, 2021-03-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |