Christian Dupaty
/
R503_fingerprint
Library for fingerprint R503 Adaptation from Arduino Library
main.cpp@8:1ea7415c7d1f, 2021-03-20 (annotated)
- Committer:
- cdupaty
- Date:
- Sat Mar 20 22:59:15 2021 +0000
- Revision:
- 8:1ea7415c7d1f
- Parent:
- 7:afa17a46252b
version 0.99
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 | Designed specifically to work with the Adafruit BMP085 Breakout |
cdupaty | 5:022e24a51359 | 4 | ----> http://www.adafruit.com/products/751 |
cdupaty | 5:022e24a51359 | 5 | These displays use TTL Serial to communicate, 2 pins are required to |
cdupaty | 5:022e24a51359 | 6 | interface |
cdupaty | 5:022e24a51359 | 7 | Adafruit invests time and resources providing this open source code, |
cdupaty | 5:022e24a51359 | 8 | please support Adafruit and open-source hardware by purchasing |
cdupaty | 5:022e24a51359 | 9 | products from Adafruit! |
cdupaty | 5:022e24a51359 | 10 | Written by Limor Fried/Ladyada for Adafruit Industries. |
cdupaty | 5:022e24a51359 | 11 | BSD license, all text above must be included in any redistribution |
cdupaty | 7:afa17a46252b | 12 | |
cdupaty | 7:afa17a46252b | 13 | STM32 adaptation by Christian Dupaty 03/2021 |
cdupaty | 5:022e24a51359 | 14 | ****************************************************/ |
cdupaty | 5:022e24a51359 | 15 | |
cdupaty | 5:022e24a51359 | 16 | #include <Fingerprint.h> |
WilliamMarshQMUL | 0:75835b5692b9 | 17 | #include "mbed.h" |
cdupaty | 7:afa17a46252b | 18 | |
cdupaty | 7:afa17a46252b | 19 | DigitalOut ledV(LED1); // for various information without terminal |
WilliamMarshQMUL | 0:75835b5692b9 | 20 | Serial pc(USBTX, USBRX); // tx, rx |
cdupaty | 7:afa17a46252b | 21 | Fingerprint finger(PC_1,PC_0,0x0); // TX,TX,pass |
cdupaty | 7:afa17a46252b | 22 | InterruptIn fD(PB_0); // IT from fingerprint detection (see datasheet WAKEUP) |
cdupaty | 7:afa17a46252b | 23 | DigitalIn btnBleu(USER_BUTTON); // to start enroll |
cdupaty | 7:afa17a46252b | 24 | |
cdupaty | 7:afa17a46252b | 25 | bool fingerON=false; |
WilliamMarshQMUL | 0:75835b5692b9 | 26 | |
cdupaty | 7:afa17a46252b | 27 | // interrupt funtion |
cdupaty | 7:afa17a46252b | 28 | void fingerDetect(void) |
cdupaty | 7:afa17a46252b | 29 | { |
cdupaty | 7:afa17a46252b | 30 | ledV=1; |
cdupaty | 7:afa17a46252b | 31 | wait_ms(100); |
cdupaty | 7:afa17a46252b | 32 | ledV=0; |
cdupaty | 7:afa17a46252b | 33 | fingerON=true; |
cdupaty | 7:afa17a46252b | 34 | } |
cdupaty | 5:022e24a51359 | 35 | |
cdupaty | 7:afa17a46252b | 36 | |
cdupaty | 7:afa17a46252b | 37 | // original setup fonction on Arduino |
cdupaty | 5:022e24a51359 | 38 | void setup() |
cdupaty | 5:022e24a51359 | 39 | { |
cdupaty | 5:022e24a51359 | 40 | pc.baud(9600); |
cdupaty | 5:022e24a51359 | 41 | wait_ms(100); |
cdupaty | 7:afa17a46252b | 42 | pc.printf("\nR503 Finger detect test\nSTM32 version with MBED compiler and library\n"); |
cdupaty | 5:022e24a51359 | 43 | |
cdupaty | 5:022e24a51359 | 44 | // set the data rate for the sensor serial port |
cdupaty | 5:022e24a51359 | 45 | finger.begin(57600); |
cdupaty | 7:afa17a46252b | 46 | wait_ms(200); |
cdupaty | 5:022e24a51359 | 47 | if (finger.verifyPassword()) { |
cdupaty | 7:afa17a46252b | 48 | pc.printf("\nFound fingerprint sensor!\n"); |
cdupaty | 5:022e24a51359 | 49 | } else { |
cdupaty | 7:afa17a46252b | 50 | pc.printf("\nDid not find fingerprint sensor -> STOP !!!!\n"); |
cdupaty | 5:022e24a51359 | 51 | while (1) |
cdupaty | 5:022e24a51359 | 52 | { |
cdupaty | 7:afa17a46252b | 53 | ledV=1; |
cdupaty | 7:afa17a46252b | 54 | wait_ms(100); |
cdupaty | 7:afa17a46252b | 55 | ledV=0; |
cdupaty | 7:afa17a46252b | 56 | wait_ms(100); |
WilliamMarshQMUL | 0:75835b5692b9 | 57 | } |
cdupaty | 5:022e24a51359 | 58 | } |
cdupaty | 5:022e24a51359 | 59 | |
cdupaty | 7:afa17a46252b | 60 | pc.printf("Reading sensor parameters\n"); |
cdupaty | 5:022e24a51359 | 61 | finger.getParameters(); |
cdupaty | 5:022e24a51359 | 62 | pc.printf("Status: 0x%X\n",finger.status_reg); |
fduchiron | 6:b2f55a604fbe | 63 | pc.printf("Sys ID: 0x%X\n",finger.system_id); |
fduchiron | 6:b2f55a604fbe | 64 | pc.printf("Capacity: %d\n",finger.capacity); |
fduchiron | 6:b2f55a604fbe | 65 | pc.printf("Security level: %d\n",finger.security_level); |
fduchiron | 6:b2f55a604fbe | 66 | pc.printf("Device address: 0x%X\n",finger.device_addr); |
fduchiron | 6:b2f55a604fbe | 67 | pc.printf("Packet len: %d\n",finger.packet_len); |
fduchiron | 6:b2f55a604fbe | 68 | pc.printf("Baud rate: %d\n",finger.baud_rate); |
cdupaty | 5:022e24a51359 | 69 | |
cdupaty | 5:022e24a51359 | 70 | finger.getTemplateCount(); |
cdupaty | 5:022e24a51359 | 71 | |
cdupaty | 5:022e24a51359 | 72 | if (finger.templateCount == 0) { |
cdupaty | 7:afa17a46252b | 73 | pc.printf("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.\n"); |
cdupaty | 5:022e24a51359 | 74 | } |
cdupaty | 5:022e24a51359 | 75 | else { |
cdupaty | 7:afa17a46252b | 76 | pc.printf("Waiting for valid finger...\n"); |
fduchiron | 6:b2f55a604fbe | 77 | pc.printf("Sensor contains : %d templates\n",finger.templateCount); |
cdupaty | 5:022e24a51359 | 78 | } |
cdupaty | 7:afa17a46252b | 79 | fD.fall(&fingerDetect); |
WilliamMarshQMUL | 0:75835b5692b9 | 80 | } |
cdupaty | 5:022e24a51359 | 81 | |
cdupaty | 7:afa17a46252b | 82 | // -------------------------------------- |
cdupaty | 5:022e24a51359 | 83 | uint8_t getFingerprintID() { |
cdupaty | 5:022e24a51359 | 84 | uint8_t p = finger.getImage(); |
cdupaty | 5:022e24a51359 | 85 | switch (p) { |
cdupaty | 5:022e24a51359 | 86 | case FINGERPRINT_OK: |
cdupaty | 7:afa17a46252b | 87 | pc.printf("Image taken\n"); |
cdupaty | 5:022e24a51359 | 88 | break; |
cdupaty | 5:022e24a51359 | 89 | case FINGERPRINT_NOFINGER: |
cdupaty | 7:afa17a46252b | 90 | pc.printf("No finger detected\n"); |
cdupaty | 5:022e24a51359 | 91 | return p; |
cdupaty | 5:022e24a51359 | 92 | case FINGERPRINT_PACKETRECIEVEERR: |
cdupaty | 7:afa17a46252b | 93 | pc.printf("Communication error\n"); |
cdupaty | 5:022e24a51359 | 94 | return p; |
cdupaty | 5:022e24a51359 | 95 | case FINGERPRINT_IMAGEFAIL: |
cdupaty | 7:afa17a46252b | 96 | pc.printf("Imaging error\n"); |
cdupaty | 5:022e24a51359 | 97 | return p; |
cdupaty | 5:022e24a51359 | 98 | default: |
cdupaty | 7:afa17a46252b | 99 | pc.printf("Unknown error\n"); |
cdupaty | 5:022e24a51359 | 100 | return p; |
cdupaty | 5:022e24a51359 | 101 | } |
cdupaty | 5:022e24a51359 | 102 | |
cdupaty | 5:022e24a51359 | 103 | // OK success! |
cdupaty | 5:022e24a51359 | 104 | |
cdupaty | 5:022e24a51359 | 105 | p = finger.image2Tz(); |
cdupaty | 5:022e24a51359 | 106 | switch (p) { |
cdupaty | 5:022e24a51359 | 107 | case FINGERPRINT_OK: |
cdupaty | 7:afa17a46252b | 108 | pc.printf("Image converted\n"); |
cdupaty | 5:022e24a51359 | 109 | break; |
cdupaty | 5:022e24a51359 | 110 | case FINGERPRINT_IMAGEMESS: |
cdupaty | 7:afa17a46252b | 111 | pc.printf("Image too messy\n"); |
cdupaty | 5:022e24a51359 | 112 | return p; |
cdupaty | 5:022e24a51359 | 113 | case FINGERPRINT_PACKETRECIEVEERR: |
cdupaty | 7:afa17a46252b | 114 | pc.printf("Communication error\n"); |
cdupaty | 5:022e24a51359 | 115 | return p; |
cdupaty | 5:022e24a51359 | 116 | case FINGERPRINT_FEATUREFAIL: |
cdupaty | 7:afa17a46252b | 117 | pc.printf("Could not find fingerprint feature\n"); |
cdupaty | 5:022e24a51359 | 118 | return p; |
cdupaty | 5:022e24a51359 | 119 | case FINGERPRINT_INVALIDIMAGE: |
cdupaty | 7:afa17a46252b | 120 | pc.printf("Could not find fingerprint features\n"); |
cdupaty | 5:022e24a51359 | 121 | return p; |
cdupaty | 5:022e24a51359 | 122 | default: |
cdupaty | 7:afa17a46252b | 123 | pc.printf("Unknown error\n"); |
cdupaty | 5:022e24a51359 | 124 | return p; |
cdupaty | 5:022e24a51359 | 125 | } |
cdupaty | 5:022e24a51359 | 126 | |
cdupaty | 5:022e24a51359 | 127 | // OK converted! |
cdupaty | 5:022e24a51359 | 128 | p = finger.fingerSearch(); |
cdupaty | 5:022e24a51359 | 129 | if (p == FINGERPRINT_OK) { |
cdupaty | 7:afa17a46252b | 130 | pc.printf("Found a print match!\n"); |
cdupaty | 5:022e24a51359 | 131 | } else if (p == FINGERPRINT_PACKETRECIEVEERR) { |
cdupaty | 7:afa17a46252b | 132 | pc.printf("Communication error\n"); |
cdupaty | 5:022e24a51359 | 133 | return p; |
cdupaty | 5:022e24a51359 | 134 | } else if (p == FINGERPRINT_NOTFOUND) { |
cdupaty | 7:afa17a46252b | 135 | pc.printf("Did not find a match\n"); |
cdupaty | 5:022e24a51359 | 136 | return p; |
cdupaty | 5:022e24a51359 | 137 | } else { |
cdupaty | 7:afa17a46252b | 138 | pc.printf("Unknown error\n"); |
cdupaty | 5:022e24a51359 | 139 | return p; |
cdupaty | 5:022e24a51359 | 140 | } |
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 | |
cdupaty | 5:022e24a51359 | 146 | return finger.fingerID; |
cdupaty | 5:022e24a51359 | 147 | } |
cdupaty | 5:022e24a51359 | 148 | |
cdupaty | 5:022e24a51359 | 149 | // returns -1 if failed, otherwise returns ID # |
cdupaty | 5:022e24a51359 | 150 | int getFingerprintIDez() { |
cdupaty | 5:022e24a51359 | 151 | uint8_t p = finger.getImage(); |
cdupaty | 5:022e24a51359 | 152 | if (p != FINGERPRINT_OK) return -1; |
cdupaty | 5:022e24a51359 | 153 | |
cdupaty | 5:022e24a51359 | 154 | p = finger.image2Tz(); |
cdupaty | 5:022e24a51359 | 155 | if (p != FINGERPRINT_OK) return -1; |
cdupaty | 5:022e24a51359 | 156 | |
cdupaty | 5:022e24a51359 | 157 | p = finger.fingerFastSearch(); |
cdupaty | 5:022e24a51359 | 158 | if (p != FINGERPRINT_OK) return -1; |
cdupaty | 5:022e24a51359 | 159 | |
cdupaty | 5:022e24a51359 | 160 | // found a match! |
fduchiron | 6:b2f55a604fbe | 161 | pc.printf("Found ID #%d\n",finger.fingerID); |
fduchiron | 6:b2f55a604fbe | 162 | pc.printf(" with confidence of %d\n",finger.confidence); |
cdupaty | 5:022e24a51359 | 163 | return finger.fingerID; |
fduchiron | 6:b2f55a604fbe | 164 | } |
fduchiron | 6:b2f55a604fbe | 165 | |
cdupaty | 7:afa17a46252b | 166 | void demoLED(void) |
cdupaty | 7:afa17a46252b | 167 | { |
cdupaty | 7:afa17a46252b | 168 | // control (3 on)(4off), speed (0-255) , color (1 red, 2 blue, 3 purple), cycles (0 infinit,- 255) |
cdupaty | 7:afa17a46252b | 169 | // red |
cdupaty | 7:afa17a46252b | 170 | finger.LEDcontrol(3,128,1,10); |
cdupaty | 7:afa17a46252b | 171 | wait_ms(500); |
cdupaty | 7:afa17a46252b | 172 | // blue |
cdupaty | 7:afa17a46252b | 173 | finger.LEDcontrol(3,128,2,10); |
cdupaty | 7:afa17a46252b | 174 | wait_ms(500); |
cdupaty | 7:afa17a46252b | 175 | // cyan |
cdupaty | 7:afa17a46252b | 176 | finger.LEDcontrol(3,128,3,10); |
cdupaty | 7:afa17a46252b | 177 | wait_ms(500); |
cdupaty | 7:afa17a46252b | 178 | // flash 5 |
cdupaty | 7:afa17a46252b | 179 | finger.LEDcontrol(2,10,1,5); |
cdupaty | 7:afa17a46252b | 180 | wait_ms(1000); |
cdupaty | 7:afa17a46252b | 181 | // slow light on |
cdupaty | 7:afa17a46252b | 182 | finger.LEDcontrol(5,50,2,5); |
cdupaty | 7:afa17a46252b | 183 | wait_ms(1000); |
cdupaty | 7:afa17a46252b | 184 | // flash slow |
cdupaty | 7:afa17a46252b | 185 | finger.LEDcontrol(1,50,2,5); |
cdupaty | 7:afa17a46252b | 186 | wait_ms(1000); |
cdupaty | 7:afa17a46252b | 187 | } |
cdupaty | 7:afa17a46252b | 188 | |
fduchiron | 6:b2f55a604fbe | 189 | int main(void) // run over and over again |
fduchiron | 6:b2f55a604fbe | 190 | { |
cdupaty | 7:afa17a46252b | 191 | unsigned char c=1; |
fduchiron | 6:b2f55a604fbe | 192 | setup(); |
cdupaty | 7:afa17a46252b | 193 | demoLED(); |
cdupaty | 7:afa17a46252b | 194 | finger.LEDcontrol(3,128,1,10); |
cdupaty | 7:afa17a46252b | 195 | pc.printf("\nPret ! \n"); |
fduchiron | 6:b2f55a604fbe | 196 | while(1) |
fduchiron | 6:b2f55a604fbe | 197 | { |
cdupaty | 7:afa17a46252b | 198 | |
cdupaty | 7:afa17a46252b | 199 | if (fingerON) |
cdupaty | 7:afa17a46252b | 200 | { |
cdupaty | 7:afa17a46252b | 201 | pc.printf("Doigt detecte ! \n"); |
cdupaty | 7:afa17a46252b | 202 | fingerON=false; |
cdupaty | 7:afa17a46252b | 203 | getFingerprintID(); |
cdupaty | 7:afa17a46252b | 204 | pc.printf("\nPret ! \n"); |
cdupaty | 7:afa17a46252b | 205 | } |
cdupaty | 7:afa17a46252b | 206 | if (!btnBleu) |
cdupaty | 7:afa17a46252b | 207 | { |
cdupaty | 7:afa17a46252b | 208 | pc.printf("\nEnregistrement empreinte \n"); |
cdupaty | 7:afa17a46252b | 209 | c=finger.createModel(); |
cdupaty | 7:afa17a46252b | 210 | if (c==FINGERPRINT_OK) pc.printf("Empreinte enregistree \n"); |
cdupaty | 7:afa17a46252b | 211 | if (c==FINGERPRINT_PACKETRECIEVEERR) pc.printf("Erreur de communication \n"); |
cdupaty | 7:afa17a46252b | 212 | if (c==FINGERPRINT_ENROLLMISMATCH) pc.printf("Erreur de scan \n"); |
cdupaty | 7:afa17a46252b | 213 | pc.printf("\nPret ! \n"); |
cdupaty | 7:afa17a46252b | 214 | } |
cdupaty | 7:afa17a46252b | 215 | wait_ms(500); //don't need to run this at full speed. |
fduchiron | 6:b2f55a604fbe | 216 | } |
cdupaty | 7:afa17a46252b | 217 | // return 0; |
fduchiron | 6:b2f55a604fbe | 218 | } |
fduchiron | 6:b2f55a604fbe | 219 |