Fingerprint sensor with Arduino Mega2560

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
mad76
 
Posts: 3
Joined: Sun Nov 18, 2012 4:58 pm

Fingerprint sensor with Arduino Mega2560

Post by mad76 »

Hi guys,
I am wondering does anybody know if the fingerprint sensor (ID:751) works with the Arduino Mega2560. It works fine with my Arduino UNO but when i swap boards and upload the program it tells me it can't find the fingerprint sensor. any idea's ?

User avatar
Franklin97355
 
Posts: 23911
Joined: Mon Apr 21, 2008 2:33 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by Franklin97355 »

Have you made accomidations for the difference in pin numbers?

mad76
 
Posts: 3
Joined: Sun Nov 18, 2012 4:58 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by mad76 »

saw the earlier posts after putting mine up. All good now :lol:
Thanks for the reply.

User avatar
shuhada natasha m
 
Posts: 5
Joined: Thu Oct 18, 2012 10:49 pm

Re: Fingerprint sensor with Arduino Duemilanove

Post by shuhada natasha m »

Hi may i ask how many ID can the fingerprint cater at one time?

and can it be reset?? cuz i enrol two different IDs (0 & 2) by placing my thumb twice .
It creates problem during matching. cuz sometimes it finds a match as 0 and sometimes as 2.

Btw im using arduino duemilanove =)

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: Fingerprint sensor with Arduino Mega2560

Post by adafruit_support_bill »

The english version of the manual is available now here: http://www.adafruit.com/datasheets/ZFM% ... ualV15.pdf

User avatar
shuhada natasha m
 
Posts: 5
Joined: Thu Oct 18, 2012 10:49 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by shuhada natasha m »

thanx for the manual =)

now im trying to interface the fingerprint with keypad... i wanted it to loop it and match the inserted ID with fingerprint (customKeypad == finger.fingerID) <------- i think..... but it seems there were some conflict between the fingerprint and keypad eventhough there were no errors during uploading... can somebody pls have a look at the program ive done below? i couldnt find the mistake

[Edit - moderator - please use the 'code' button when submitting code]

Code: Select all

void loop(){
    getFingerprintIDez();
    char customKey = customKeypad.getKey();
  
    if (customKey){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(customKey);
    lcd.setCursor(0,1);
    lcd.print("Now, fingertest");
  }

}




uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too 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!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
}

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



int getFingerprintIDez() {
  char customKey = customKeypad.getKey();

 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;
  
  

 if(customKey == finger.fingerID)
 {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Match ID #"); lcd.print(finger.fingerID); 
  lcd.setCursor(0,1);
  lcd.print("Successful");
  delay(1000);
  
  //return finger.fingerID; 
 }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("No Match");
    lcd.setCursor(0,1);
    lcd.print("Try Again");
    
  
   // return finger.fingerID;
  }
}

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: Fingerprint sensor with Arduino Mega2560

Post by adafruit_support_bill »

What you posted does not compile. Post your entire sketch. (Use the 'code' button and paste your sketch between the tags)

User avatar
shuhada natasha m
 
Posts: 5
Joined: Thu Oct 18, 2012 10:49 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by shuhada natasha m »

heres the complete program... the numbers from keypad wouldnt appear instead the char. of lcd were juz blinking when i press the keypad... while for the thumbprint, i have actually enrolled an ID for my left thumbprint, but it didnt recognize..

Code: Select all

#include <Keypad.h>
#include <Adafruit_Fingerprint.h>
#if ARDUINO >= 100
 #include <SoftwareSerial.h>
#else
 #include <NewSoftSerial.h>
#endif

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 44, 46, 48, 50, 52);
int backLight = 13;

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
#if ARDUINO >= 100
SoftwareSerial mySerial(12, 13);
#else
NewSoftSerial mySerial(12, 13);
#endif

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'A','B','C','D'}
};
byte rowPins[ROWS] = {31,33,35,37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {23,25,27,29}; //connect to the column pinouts of the keypad

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  //Serial.begin(9600);
  finger.begin(57600);
   pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); 
  lcd.begin(16,2);              
  lcd.clear();                  
  lcd.setCursor(0,0);           
  lcd.print("Hello enter ID"); 
 // pinMode(6, OUTPUT); //RED LED
 // pinMode(7, OUTPUT); //GREEN LED
 // pinMode(13,OUTPUT); //SIREN
 
}
  
void loop(){
  getFingerprintIDez();
  digitalWrite(6,HIGH);
  digitalWrite(13,LOW);
  char customKey = customKeypad.getKey();
  
    if (customKey){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(customKey);
    lcd.setCursor(0,1);
    lcd.print("Now, fingertest");
  }
}


uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      lcd.print("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      lcd.clear();
      lcd.print("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      lcd.clear();
      lcd.print("Imaging error");
      return p;
    default:
      lcd.clear();
      lcd.print("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      lcd.clear();
      lcd.print("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      lcd.clear();
      lcd.print("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      lcd.clear();
      lcd.print("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      lcd.clear();
      lcd.print("Could not find fingerprint features");
      return p;
    default:
      lcd.clear();
      lcd.print("Unknown error");
      return p;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    lcd.clear();
    lcd.print("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    lcd.clear();
    lcd.print("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    lcd.clear();
    lcd.print("Did not find a match");
    return p;
  } else {
    lcd.clear();
    lcd.print("Unknown error");
    return p;
  }   
  
  // found a match!
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Found ID #"); lcd.print(finger.fingerID); 
  lcd.setCursor(0,1);
  lcd.print(" with confidence of "); lcd.print(finger.confidence); 
}



int getFingerprintIDez() {
  char customKey = customKeypad.getKey();

 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;
  
  

 if(customKey == finger.fingerID)
 {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Match ID #"); lcd.print(finger.fingerID); 
  lcd.setCursor(0,1);
  lcd.print("Successful");
  //digitalWrite(6,LOW);   //red led off
  //digitalWrite(7,HIGH);  // green led on
  //delay(1000);
  
  //return finger.fingerID; 
 }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("No Match      ");
    lcd.setCursor(0,1);
    lcd.print("Try Again");
   // digitalWrite(7,LOW);
    //digitalWrite(6,HIGH);
    //digitalWrite(13,HIGH);
    //delay(1000);
  
   // return finger.fingerID;
  }
}



  
  

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: Fingerprint sensor with Arduino Mega2560

Post by adafruit_support_bill »

You are reading the keypad in two places. Remove all the modifications to getFingerprintIDez() and put all your keypad and comparison logic in loop().

User avatar
shuhada natasha m
 
Posts: 5
Joined: Thu Oct 18, 2012 10:49 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by shuhada natasha m »

u mean like this???

Code: Select all

#include <Keypad.h>
#include <Adafruit_Fingerprint.h>
#if ARDUINO >= 100
#include <SoftwareSerial.h>
#else
#include <NewSoftSerial.h>
#endif

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 44, 46, 48, 50, 52);
int backLight = 13;

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
#if ARDUINO >= 100
SoftwareSerial mySerial(12, 13);
#else
NewSoftSerial mySerial(12, 13);
#endif

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'A','B','C','D'}
};
byte rowPins[ROWS] = {31,33,35,37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {23,25,27,29}; //connect to the column pinouts of the keypad

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 


/******************************************************************/
void setup(){
  //Serial.begin(9600);
  finger.begin(57600);
   pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); 
  lcd.begin(16,2);              
  lcd.clear();                  
  lcd.setCursor(0,0);           
  lcd.print("Hello enter ID"); 
// pinMode(6, OUTPUT); //RED LED
// pinMode(7, OUTPUT); //GREEN LED
// pinMode(13,OUTPUT); //SIREN

}


/********************************************************************/  


void loop(){
  //getFingerprintIDez();
 // digitalWrite(6,HIGH);
  //digitalWrite(13,LOW);
  char customKey = customKeypad.getKey();
  
    /*if (customKey){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(customKey);
    lcd.setCursor(0,1);
    lcd.print("Now, fingertest");
  }*/
  
  if(customKey == finger.fingerID)
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Match ID #"); lcd.print(finger.fingerID); 
  lcd.setCursor(0,1);
  lcd.print("Successful");
  //digitalWrite(6,LOW);   //red led off
  //digitalWrite(7,HIGH);  // green led on
  //delay(1000);
  
  //return finger.fingerID; 
}
  else
  {
    lcd.setCursor(0,0);
    lcd.print("No Match      ");
    lcd.setCursor(0,1);
    lcd.print("Try Again");
   // digitalWrite(7,LOW);
    //digitalWrite(6,HIGH);
    //digitalWrite(13,HIGH);
    //delay(1000);
  
   // return finger.fingerID;
  }
}

/*****************************************************************/

/************************************************************************************/


int getFingerprintIDez() {
 

 uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      lcd.print("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      lcd.clear();
      lcd.print("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      lcd.clear();
      lcd.print("Imaging error");
      return p;
    default:
      lcd.clear();
      lcd.print("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      lcd.clear();
      lcd.print("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      lcd.clear();
      lcd.print("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      lcd.clear();
      lcd.print("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      lcd.clear();
      lcd.print("Could not find fingerprint features");
      return p;
    default:
      lcd.clear();
      lcd.print("Unknown error");
      return p;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    lcd.clear();
    lcd.print("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    lcd.clear();
    lcd.print("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    lcd.clear();
    lcd.print("Did not find a match");
    return p;
  } else {
    lcd.clear();
    lcd.print("Unknown error");
    return p;
  }   
  
  // found a match!
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Found ID #"); lcd.print(finger.fingerID); 
  lcd.setCursor(0,1);
  lcd.print(" with confidence of "); lcd.print(finger.confidence); 
}
  
  






  
 

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: Fingerprint sensor with Arduino Mega2560

Post by adafruit_support_bill »

You still have to call getFingerprintIDez() in your loop to read the fingerprint.

User avatar
shuhada natasha m
 
Posts: 5
Joined: Thu Oct 18, 2012 10:49 pm

Re: Fingerprint sensor with Arduino Mega2560

Post by shuhada natasha m »

hi i think i've got it... im trying to call the fingerprint sensor after entering password.
the problem is juz that after i break the password using * key, the sensor illuminates <1.0sec.
how do i get it illuminate in a longer time, without pressing the * button many times.
here;s my new code

Code: Select all

#include <Password.h> 
#include <Keypad.h> 
#include <LiquidCrystal.h>
LiquidCrystal lcd(40, 42, 44, 46, 48, 50, 52);

#include <Adafruit_Fingerprint.h>
#if ARDUINO >= 100
 #include <SoftwareSerial.h>
#else
 #include <NewSoftSerial.h>
#endif

Password password = Password( "C141516" );

const byte ROWS = 4; // Four rows
const byte COLS = 4; //  columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'A','B','C','D'}
};

byte rowPins[ROWS] = {31,33,35,37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {23,25,27,29}; //connect to the column pinouts of the keypad


// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int alarm_var = 0;


int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
#if ARDUINO >= 100
SoftwareSerial mySerial(12, 13);
#else
NewSoftSerial mySerial(12, 13);
#endif

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
/*SETUP****************************************************************************************/

void setup()
{
  lcd.begin(16, 2);
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  lcd.clear();
  lcd.print("Password:");
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  finger.begin(57600);
  //digitalWrite(11,HIGH);
}

/************************************************************************************/

void loop()
{
  //digitalWrite(11,HIGH);
  //digitalWrite(9,LOW);
  if (digitalRead(11)==LOW)
  {
    digitalWrite(9,HIGH);
    lcd.clear();
    lcd.print("INTRUDER!!");
    delay(1000000);
    digitalWrite(9,LOW);
  }
    
  if(alarm_var < 3)
  {
    keypad.getKey();
  }
 
}



/************************************************************************/

//take care of some special events
void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
        
	//lcd.print("");
	lcd.print(eKey);
	switch (eKey){
	  case '*': checkPassword(); break;
	  case '#': password.reset(); break;
	  default: password.append(eKey);
     }
  }
}

void checkPassword(){
  if (password.evaluate()){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Success!");
    lcd.setCursor(0,1);
    lcd.print("Now scan finger ");
    
   getFingerprintIDez();
    //delay(1000);
  }
  else{
    alarm_var = alarm_var + 1;
   //for (i=0; i>3; i++);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Wrong");
    if (alarm_var >= 3)
    { 
      lcd.setCursor(0,0);
      lcd.print("Wrong 3 times");
      lcd.setCursor(0,1);
      lcd.print("Alarm Activated");
      digitalWrite(9,HIGH);
      
      //alarm_var = 0;
    }
    else
    { 
      delay(1000);
      lcd.clear();
      lcd.print("Password:");
      password.reset();
    }
  }
  
}

 
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;
  
  // found a match!
  digitalWrite(11,LOW); // switch OFF red LED
  digitalWrite(10, HIGH); //switch ON green LED
  delay(1000);
  digitalWrite(10,LOW);// switch OFF green LED
  digitalWrite(9,HIGH); // switch ON alarm
  delay(100);
  digitalWrite(9,LOW);
  
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Match ID #"); 
  lcd.print(finger.fingerID);
  lcd.setCursor(0,1);
  lcd.print("Accepted ");
  return finger.fingerID; 
  //delay(100);
}

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: Fingerprint sensor with Arduino Mega2560

Post by adafruit_support_bill »

Code: Select all

    while(getFingerprintIDez() == -1)
    {
    }
Will loop until it gets a valid fingerprint reading.

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”