Finger print sensor.

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 !

I want that anytime the fingerprint sensor detects any two of these ID's

The fingerprint sensor can ONLY detect ONE fingerprint at a time.

Hello PaulS, thanks for your response. I know that the finger print cant verify two at once, that is why i was asking if someone can show me how to do something like this:

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

but issue is how should i write this code?

When a finger is scanned, you have to decide if that is the first fingerprint or the second. That tells you where to ID of the fingerprint, and whether or not to compare the current fingerprint to anything.

I have already enroled five finger prints stored in the scanner with ID's 1,2,3,4 and 5.

In my program i can declare an array to hold a copy of the ID's.

int finger[5] = {1,2,3,4,5};

if(fingerID > 0)
{

// what can I do here to achieve the below


}

the procedure can be like this

initialise a counter maybe to 0.
Scan any finger
if the ID corresponds to any ID in the array, we increement a counter to 1 else do nothing
scan any finger again,
if the ID corresponds to any ID in the array and different from first scanned finger, increament counter to 2, else wait for for finger.

if counter == 2, then light led.

This is in summary what I want to do but I have trouble comparing with the arrays and the first finger on seconde scan.
If you can provide a piece of code that can perform function, I will be grateful.

I have already enroled five finger prints stored in the scanner with ID's 1,2,3,4 and 5.

Completely irrelevant.

In my program i can declare an array to hold a copy of the ID's.

Why is that important? What, EXACTLY, do you get when you scan a fingerprint?

initialise a counter maybe to 0.

int scanCount = 0;

You write the rest.

Why is that important? What, EXACTLY, do you get when you scan a fingerprint?

when I scan a finger I get its ID which is an integer given that it was initially enrolled with that ID ( I provided an example of the ID's I enroled because a finger scaned needs to correspond to what was enrolled for it to be useful).

You write the rest.

if I knew how to write the rest I won't be posting the problem. If you really want to help me please do or ask exactly what you need for the rest of the code.
Thanks

You need a variable to store the first scanned fingerprint's ID. Can you create that variable?

You need a variable to store the second scanned fingerprint's ID. Can you create that variable?

You need to store a scanned fingerprint's ID in one of the variables. Can you write an if statement to determine which one?

I finally did some brainstorming again and noticed it was easier than i thought. Just wrote a few if's with some boolean variables, compared their outputs and could get results. Thanks for even taking up some of your time to reply !