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

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor