Problems with fingerprint sensor
hi,
i have troubles running sketch. there should 2 modes fingerprint scanner, 1 called "scan_active", other mode called "enroll".
simply switch mode on serial (actually on ide console), if use finger.getimage(); in other function, crashes/reboots arduino nano v3.0 (atmega238) instantly.
if have getfingerprintenroll(id) have enabled, crashes (i don't need switch mode scan_active enroll), absolutely have no idea why...
my code:
the whole combination of
https://github.com/adafruit/adafruit-fingerprint-sensor-library/blob/master/examples/fingerprint/fingerprint.ino
and
https://github.com/adafruit/adafruit-fingerprint-sensor-library/blob/master/examples/enroll/enroll.ino
i hope can me!
i have troubles running sketch. there should 2 modes fingerprint scanner, 1 called "scan_active", other mode called "enroll".
simply switch mode on serial (actually on ide console), if use finger.getimage(); in other function, crashes/reboots arduino nano v3.0 (atmega238) instantly.
if have getfingerprintenroll(id) have enabled, crashes (i don't need switch mode scan_active enroll), absolutely have no idea why...
my code:
code: [select]
/***************************************************
example sketch our optical fingerprint sensor
designed work adafruit bmp085 breakout
----> http://www.adafruit.com/products/751
these displays use ttl serial communicate, 2 pins required
interface
adafruit invests time , resources providing open source code,
please support adafruit , open-source hardware purchasing
products adafruit!
written limor fried/ladyada adafruit industries.
bsd license, text above must included in redistribution
****************************************************/
#include <adafruit_fingerprint.h>
#include <timer.h>
int getfingerprintidez();
string mode;
string content = "";
int id = 0;
int val;
// pin #2 in sensor (green wire)
// pin #3 out arduino (white wire)
softwareserial fingerprint(2, 3);
adafruit_fingerprint finger = adafruit_fingerprint(&fingerprint);
timer t;
void setup()
{
while (!serial); // yun/leo/micro/zero/...
serial.begin(9600);
finger.begin(9600);
serial.println("adafruit finger detect test\n");
// set data rate sensor serial port
finger.begin(57600);
if (finger.verifypassword()) {
serial.println("found fingerprint sensor!!");
} else {
serial.println("did not find fingerprint sensor :(");
while (1);
}
mode = "scan_active";
serial.print(mode+"\n");
int tickevent1 = t.every(0, listenwemos);
int tickevent2 = t.every(0, listenfp);
}
void listenwemos() {
while (serial.available() > 0) {
mode = serial.readstringuntil('\n');
val = serial.parseint();
serial.print("received:" + mode+ ":"+val+"\n");
}
}
void listenfp() {
if(mode == "scan_active") {
id = getfingerprintidez();
if(id > 0) {
serial.print(mode + "\n");
serial.print(id);
id = 0;
}
} else if(mode == "enroll") {
serial.println("ready enroll fingerprint! please type in id # want save finger as...");
id = readnumber();
serial.print("enrolling id #");
serial.println(id);
while (! getfingerprintenroll(id) );
}
}
void loop()
{
t.update();
}
// returns -1 if failed, otherwise returns id #
int getfingerprintidez() {
uint8_t p = finger.getimage();
if (p != fingerprint_ok) return -1;
p = finger.image2tz();
if (p != fingerprint_ok) return -1;
p = finger.fingerfastsearch();
if (p != fingerprint_ok) return -1;
return finger.fingerid;
}
// enroll
uint8_t readnumber(void) {
uint8_t num = 0;
boolean validnum = false;
while (1) {
while (! serial.available());
char c = serial.read();
if (isdigit(c)) {
num *= 10;
num += c - '0';
validnum = true;
} else if (validnum) {
return num;
}
}
}
uint8_t getfingerprintenroll(int id) {
int p = -1;
serial.print("waiting valid finger enroll #"); serial.println(id);
while (p != fingerprint_ok) {
p = finger.getimage();
switch (p) {
case fingerprint_ok:
serial.println("image taken");
break;
case fingerprint_nofinger:
serial.println(".");
break;
case fingerprint_packetrecieveerr:
serial.println("communication error");
break;
case fingerprint_imagefail:
serial.println("imaging error");
break;
default:
serial.println("unknown error");
break;
}
}
// ok success!
p = finger.image2tz(1);
switch (p) {
case fingerprint_ok:
serial.println("image converted");
break;
case fingerprint_imagemess:
serial.println("image messy");
return p;
case fingerprint_packetrecieveerr:
serial.println("communication error");
return p;
case fingerprint_featurefail:
serial.println("could not find fingerprint features");
return p;
case fingerprint_invalidimage:
serial.println("could not find fingerprint features");
return p;
default:
serial.println("unknown error");
return p;
}
serial.println("remove finger");
delay(2000);
p = 0;
while (p != fingerprint_nofinger) {
p = finger.getimage();
}
serial.print("id "); serial.println(id);
p = -1;
serial.println("place same finger again");
while (p != fingerprint_ok) {
p = finger.getimage();
switch (p) {
case fingerprint_ok:
serial.println("image taken");
break;
case fingerprint_nofinger:
serial.print(".");
break;
case fingerprint_packetrecieveerr:
serial.println("communication error");
break;
case fingerprint_imagefail:
serial.println("imaging error");
break;
default:
serial.println("unknown error");
break;
}
}
// ok success!
p = finger.image2tz(2);
switch (p) {
case fingerprint_ok:
serial.println("image converted");
break;
case fingerprint_imagemess:
serial.println("image messy");
return p;
case fingerprint_packetrecieveerr:
serial.println("communication error");
return p;
case fingerprint_featurefail:
serial.println("could not find fingerprint features");
return p;
case fingerprint_invalidimage:
serial.println("could not find fingerprint features");
return p;
default:
serial.println("unknown error");
return p;
}
// ok converted!
serial.print("creating model #"); serial.println(id);
p = finger.createmodel();
if (p == fingerprint_ok) {
serial.println("prints matched!");
} else if (p == fingerprint_packetrecieveerr) {
serial.println("communication error");
return p;
} else if (p == fingerprint_enrollmismatch) {
serial.println("fingerprints did not match");
return p;
} else {
serial.println("unknown error");
return p;
}
serial.print("id "); serial.println(id);
p = finger.storemodel(id);
if (p == fingerprint_ok) {
serial.println("stored!");
} else if (p == fingerprint_packetrecieveerr) {
serial.println("communication error");
return p;
} else if (p == fingerprint_badlocation) {
serial.println("could not store in location");
return p;
} else if (p == fingerprint_flasherr) {
serial.println("error writing flash");
return p;
} else {
serial.println("unknown error");
return p;
}
}
the whole combination of
https://github.com/adafruit/adafruit-fingerprint-sensor-library/blob/master/examples/fingerprint/fingerprint.ino
and
https://github.com/adafruit/adafruit-fingerprint-sensor-library/blob/master/examples/enroll/enroll.ino
i hope can me!
Arduino Forum > Using Arduino > Sensors > Problems with fingerprint sensor
arduino
Comments
Post a Comment