Hello people, I am using a finger print sensor from adafruit, I have set it up well and am able to eroll new finger, search, detect existing finge. Am working on a small school project in which I need to detect two finger prints that were initially enroled to be able to light a led. I have been able to light the led with one finger with this code:
#include <Adafruit_Fingerprint.h>
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6, 7);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
const int R = 13;
void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
lcd.print("INITIALISING");
delay(1000);
lcd.clear();
} else {
Serial.println("Did not find fingerprint sensor :(");
lcd.print("Check fingerprint sensor");
delay(1000);
lcd.clear();
while (1) {
delay(1);
}
}
pinMode(R, OUTPUT);
//digitalWrite(BUZZ, LOW);
digitalWrite(R, LOW);
}
void loop() // run over and over again
{
int fingerID = getFingerprintIDez();
if (fingerID > 0 )
{
digitalWrite(R, HIGH);
}
}
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;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
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!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
I have enrolled five figer print templates with ID's, 1,2 ,3,4 and 5.
I want that anytime the fingerprint sensor detects any two of these ID's, let it light a led. I know its possible to scan an finger, store its ID in a variable or value of array, scan the next finger, store Its ID in another variable or value of array and compare the two, if different we light led, else we wait for next finger scan.
Please help am familiar with arduino basics but this one is making me think thrice !