Arduino Fingerprint Coding

I am working on a school project and am having trouble coding my fingerprint sensor. I am very new to Arduino and haven't got a lot of experience. I am trying to activate the fingerprint sensor only when the motion sensor is activated so its not flashing all the time. I am having trouble incorporating the motion sensor code into the Fingerprint Sensor code. The fingerprint sensors power is connected to a relay which turns on once the motion sensor detects motion. Once the Fingerprint is activated and accepted a motor with turn on and off along with a few simple led's . If anyone could give me some support with this it would be much appreciated.

Thanks
Here is the Code

/***************************************************
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout
  ----> http://www.adafruit.com/products/751

  These displays use TTL Serial to communicate, 2 pins are required to
  interface
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ****************************************************/
int inputPin = 2;               // Choose the input pin (for PIR sensor)
int pirState = LOW;             // We start, assuming no motion detected
int val = 0;                    // Variable for reading the pin status
int SensorPin = 1;              // Controls Sensor
int MotorPin = 8;               // Controls Motor
int GreenLed = 10;              // Controls Greed LED // Green Led Indicates Fingerprint Succesful / Locker Unlocked
int RedLed = 11;                // Controls Red LED // Indicated Locker Is Locked
int YellowLed = 9;              // Indicates If Sensor Is Activated
int Relay = 8;                  // Controls Relay

#include <Adafruit_Fingerprint.h>


#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);

#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1

#endif

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{ pinMode(Relay, OUTPUT);        //declare Relay as output
  pinMode(YellowLed, OUTPUT);   // declare LED as output
  pinMode(SensorPin, INPUT);    // declare sensor as input
  pinMode(GreenLed, OUTPUT);    // declare Green Led as putput
  pinMode(RedLed, OUTPUT);      // declare Red Led as output
  pinMode(inputPin, INPUT);     // Declare sensor as input
  digitalWrite(RedLed, HIGH);   // Turns Red Led On At Start
  digitalWrite(Relay, HIGH);     // Turns Fingerprint Sensor Off Until Sensor Activats It


  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);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }

  Serial.println(F("Reading sensor parameters"));
  finger.getParameters();
  Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
  Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
  Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
  Serial.print(F("Security level: ")); Serial.println(finger.security_level);
  Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
  Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
  Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);

  finger.getTemplateCount();

  if (finger.templateCount == 0) {
    Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
  }
  else {
    Serial.println("Waiting for valid finger...");
    Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  }
}

void loop()                     // run over and over again
{
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(YellowLed, HIGH); // turn LED ON
    digitalWrite(Relay, LOW);
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
    digitalWrite(YellowLed, LOW); // turn LED OFF
    digitalWrite(Relay, HIGH);
    if (pirState == HIGH) {
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
    {
      getFingerprintID();
      delay(50);            //don't ned to run this at full speed.
    }

    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.fingerSearch();
      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);

      //Controlling LED/MOTOR
      digitalWrite(RedLed, LOW); //Turns Red Light OFF
      digitalWrite(MotorPin, LOW); //Turns Motor on
      digitalWrite(GreenLed, HIGH); //Turns Green Light ON/ Accepted Fingerprint
      delay(1000);                 //Delays for 1s
      digitalWrite(GreenLed, LOW); //Turns Green Led OFF
      digitalWrite(MotorPin, HIGH); //Turns Motor OFF
      digitalWrite(RedLed, HIGH);  //Turns RedLed ON


      return finger.fingerID;
    }

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

      // found a match!
      Serial.print("Found ID #"); Serial.print(finger.fingerID);
      Serial.print(" with confidence of "); Serial.println(finger.confidence);
      return finger.fingerID;

    }

re-edit your posting.

You should post code by using code-tags
There is an automatic function for doing this in the Arduino-IDE
just three steps

  1. press Ctrl-T for autoformatting your code
  2. do a rightclick with the mouse and choose "copy for forum"
  3. paste clipboard into write-window of a posting

best regards Stefan

I Moved your modification back into the first post to keep the forum tidy

Do yourself a favour and please read How to get the best out of this forum .

you have inserted a function definition inside of function loop

putting a functions definition inside another function is only used in some rarely special cases.
In most cases it makes much more sense to have all functions on the global level.
Global level means each function is outside any other function.

I wrote you a PM. Take a look at it
best regards Stefan

it's actually not supported at all this way. (you can use lambda if needed). Try compiling something like this

void setup() {
  Serial.begin(115200);
}

void loop() {
  uint8_t test() {
    return random(0, 256);
  }
  Serial.println(test());
  delay(1000);
}

I'm sure the compiler will scream at you.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.