Library for fingerprint R503 Adaptation from Arduino Library

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?

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 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