{PROBLEM} calling a subroutine/function into a master sketch

okay, so despite a lot of info on the internet about merging the codes and calling a function, I can’t just seem to understand the concept of calling a function as i am new to the programming world and still at a very basic stage .

I have 2 arduino sketches. One of them is a master sketch. The other one is a sketch that I want to include in the master sketch. The concept I have is that I have the other sketch ready and complete. Now I am making the Master sketch and at a certain point I just want to somehow mention the compiler to run my already prepared arduino sketch…thats called calling a function right?

Anyhow , since I am making a door lock, I am using many sensors. One of them is fingerprint sensor.For testing, I made the fingerprint test program. Its working fine. Here’s the fingerprint sketch which I want to include in my main sketch:

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


#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(52,53);


Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
  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.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); 
}

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

and now , here’s my main sketch which is not complete yet. Its just an example:

unsigned long previousMillis = 0;
unsigned long interval = 3000; // 3 seconds

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  unsigned long currentMillis = millis();
  switch (state) {
    case 0:
      Serial.println("access denied");
      state = 1;
      break;
    case 1:
      Serial.println("place finger on scanner");
      //call fingerprint code
      //fingerprint()
      if (fingerCode == 1) {
        Serial.println("finger print excepted");
        state = 2;
        previousMillis = currentMillis;
      }
      if ((fingerCode == 0 || (currentMillis - previousMillis >= interval)) {
      Serial.println("finger print rejected");
        State = 0;
      }
      break;
    case 2:
        Serial.println("put card to sensor");
        if (cardCode == 1) {
        Serial.println("card excepted");
          state = 3;
          previousMillis = currentMillis;
        }
      if ((cardCode == 0 || (currentMillis - previousMillis >= interval)) {
      Serial.println("card rejected");
        state = 0;
      }
      break;
    case 3:
        Serial.println("enter password");
        if (password == 1) {
        Serial.println("password excepted");
          state = 7;
          previousMillis = currentMillis;
        }
      if ((password == 0 || (currentMillis - previousMillis >= interval)) {
      Serial.println("password rejected");
        state = 4; //go to beginning or allow another attempt
      }
      break;
    case 4:
        Serial.println("enter password attempt 2");
        if (password == 1) {
        Serial.println("password excepted");
          state = 7;
          previousMillis = currentMillis;
        }
      if ((password == 0 || (currentMillis - previousMillis >= interval)) {
      Serial.println("password rejected attempt 2");
        state = 5; //go to beginning or allow another attempt
      }
      break;
    case 5:
        Serial.println("enter password last attempt");
        if (password == 1) {
        Serial.println("password excepted");
          state = 7;
          previousMillis = currentMillis;
        }
      if ((password == 0 || (currentMillis - previousMillis >= interval)) {
      Serial.println("password rejected");
        state = 0; //go to beginning or allow another attempt
      }

      break;
    case 7:
        //open door lock
        //once open return to state 0 and relock door
        break;
      }
}

}

In the main sketch take a look at this part of the code:
case 1:
** Serial.println(“place finger on scanner”);**
** //call fingerprint code**
** //fingerprint()**
** if (fingerCode == 1) {**
** Serial.println(“finger print excepted”);**
** state = 2;**
** previousMillis = currentMillis;**
** }**
** if ((fingerCode == 0 || (currentMillis - previousMillis >= interval)) {**
** Serial.println(“finger print rejected”);**
** State = 0;**
** }**
** break;**

In this part of the code, i have to call my Fingerprint sketch. Can somebody show and explain me how to do it?

P.S: Sorry for the wordy post!

Maaz_Khurram: I have 2 arduino sketches. One of them is a master sketch. The other one is a sketch that I want to include in the master sketch. The concept I have is that I have the other sketch ready and complete. Now I am making the Master sketch and at a certain point I just want to somehow mention the compiler to run my already prepared arduino sketch...thats called calling a function right?

Nope.

It's called naive hopeful thinking.

You have to merge both sketches (which is not even always possible) and write code to activate choosen functionality.

A sketch can only have one setup() and one loop(). That's what the compiler expects, and it can't parse any other arrangement. You have to take your finger print test sketch, rewrite the recognition part as a function, then include the function in the master sketch, and call it from loop() as needed.

This Simple Merge Demo may be helpful.

...R