FPM10A library problems

I'm doing my school final project with the fingerprint sensor FPM10A and i've made it work with a program called SFG Demo, which is in the adafruit tutorial of how to use https://cdn-learn.adafruit.com/downloads/pdf/adafruit-optical-fingerprint-sensor.pdf but with arduino it doesn't works.
After weeks of me trying to figure out whats the problem i´ve figured out that there is a problem with my library, i've tried using this libraries: https://github.com/brianrho/FPM/https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library but none of them worked. The problem seems to be the handshake protocol due my code always give me "did not find fingerprint sensor :(" (in FPM.cpp as FPM::begin

bool FPM::begin(Stream *ss, uint32_t password, uint32_t address, uint8_t pLen) {
    mySerial = ss;
    
    buffer[0] = FINGERPRINT_VERIFYPASSWORD;
    buffer[1] = thePassword >> 24; buffer[2] = thePassword >> 16;
    buffer[3] = thePassword >> 8; buffer[4] = thePassword;
    writePacket(theAddress, FINGERPRINT_COMMANDPACKET, 7, buffer);
    uint16_t len = getReply();

    if ((len != 1) || (buffer[6] != FINGERPRINT_ACKPACKET) || (buffer[9] != FINGERPRINT_OK))
      return false;
      
    thePassword = password;
    theAddress = address;
    if (readParam(DB_SIZE, &capacity) != FINGERPRINT_OK)        // get the capacity
        return false;
    if (pLen <= PACKET_256){               // set the packet length as needed
      if (setParam(SET_PACKET_LEN, pLen) == FINGERPRINT_OK){
          packetLen = pLengths[pLen];
          return true;
      }
    }
    else {
      if (readParam(PACKET_LEN, &packetLen) == FINGERPRINT_OK){     // else get the present packet length
          packetLen = pLengths[packetLen];
          return true;
      }
    }
    return false;
}

& in Adafruit-Fingerpint.cpp)

boolean Adafruit_Fingerprint::verifyPassword(void) {
  uint8_t packet[] = {FINGERPRINT_VERIFYPASSWORD, 
                      (thePassword >> 24), (thePassword >> 16),
                      (thePassword >> 8), thePassword};
  writePacket(theAddress, FINGERPRINT_COMMANDPACKET, 7, packet);
  uint8_t len = getReply(recvPacket);
  
  if ((len == 1) && (recvPacket[0] == FINGERPRINT_ACKPACKET) && (recvPacket[1] == FINGERPRINT_OK))
    return true;

/*
  Serial.print("\nGot packet type "); Serial.print(packet[0]);
  for (uint8_t i=1; i<len+1;i++) {
    Serial.print(" 0x");
    Serial.print(packet[i], HEX);
  }
  */
  return false;
}

i don't really understand whats going on here because i dont understand this part of the lenguage, but i suspect the problem is close to the byte amount send to the sensor.
the datasheet specification says this:

6.1 system class instructions

  1. Verify password
    VfyPwd
    Function Description: Verify the module handshake password (see 4.6
    Module password)
    Input parameter: PassWord
    Return parameter: confirmation code
    Instruction code: 0x13

(here goes the packet format tables but i dont know how to attach it here so its attached to the post as a png image)

  1. Confirmation code = 0x00 means the password verification is correct;
    Confirmation code = 0x01 means that the packet is received incorrectly;
    Confirmation code = 0x13 means the password is incorrect.
  2. Command packet checksum (2 bytes) = packet identifier (1 byte) + packet length (2 bytes) + command code (1 byte) + password (4 bytes);
    Response packet checksum (2 bytes) = packet identification (1 byte) + packet length (2 bytes) + confirmation code (1 byte);
    The checksum is added in bytes, the carry beyond 2 bytes is ignored and the high byte is sent in the front.
  3. The default module address is "0xffffffff"; the default password is "0x00000000".

Could anyone verificate if the handshake is properly done? thank you

handshake.png

Post the code that you're using. You don't have to post the library code, if the library is not available in the Library Manager of the IDE, post a link.

And post a wiring diagram as you probably get the same error message if the sensor is not connected at all.

these are the codes i've tried, i attach a image of the wiring

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

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1);

void setup()  
{
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  
  Serial.begin(9600);
  Serial.println("Adafruit finger detect test");

  // 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; 
}
#include <SoftwareSerial.h>
#include <FPM.h>

// a sketch to stream fingerprint images to a PC over Serial
// a python script is provided to work in conjunction with this sketch

FPM finger;

void setup()  
{
  Serial.begin(57600);
  Serial1.begin(57600);
  
  if (finger.begin(&Serial1)) {
    Serial.println("Found fingerprint sensor!");
    Serial.print("Capacity: "); Serial.println(finger.capacity);
    Serial.print("Packet length: "); Serial.println(finger.packetLen);
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
  }

  sendtoPC();
}

void loop() {
  
}

void sendtoPC(){
  set_packet_len();

  delay(100);
  int p = -1;
  Serial.println("Waiting for a finger...");
  while (p != FINGERPRINT_OK){
    p = finger.getImage();
    switch (p) {
      case FINGERPRINT_OK:
        Serial.println("Image taken");
        break;
      case FINGERPRINT_NOFINGER:
        Serial.println(".");
        break;
      case FINGERPRINT_PACKETRECIEVEERR:
        Serial.println("Communication error");
        break;
      case FINGERPRINT_IMAGEFAIL:
        Serial.println("Imaging error");
        break;
      default:
        Serial.println("Unknown error");
        break;
    }
  }

  p = finger.downImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Streaming image...");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return;
    case FINGERPRINT_UPLOADFAIL:
      Serial.println("Cannot transfer the image");
      return;
  }

  Serial.write('\t');  // to indicate start of image stream to PC
  bool last = true;
  int count = 0;
  
  while (true){
    bool ret = finger.readRaw(&Serial, STREAM_TYPE, &last);
    if (ret){
      count++;
      if (last)
        break;
    }
    else {
      Serial.print("Error receiving packet ");
      Serial.println(count);
      return;
    }
  }
  Serial.print(count * finger.packetLen); Serial.println(" bytes read");
  Serial.println("Image stream complete");
}

void set_packet_len(void){
  uint8_t param = SET_PACKET_LEN; // Example
  uint8_t value = PACKET_128;
  int p = finger.setParam(param, value);
  switch (p){
    case FINGERPRINT_OK:
      Serial.println("Packet length set to 128 bytes");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Comms error");
      break;
    case FINGERPRINT_INVALIDREG:
      Serial.println("Invalid settings!");
      break;
    default:
      Serial.println("Unknown error");
  }
}

I'm doing my school final project with the fingerprint sensor FPM10A

The first code you posted is designed to work with a specific fingerprint scanner, but not that one.

I don't know which sensor the second code is designed to work with, but the fact that the code thinks the sensor is not attached suggests that the library is not designed to work with the sensor you have, or that you have not connected your sensor correctly.

It is impossible to tell from your picture if the wiring is correct. One simple test is to reverse the RX and TX wires. Perhaps your interpretation of transmit and receive directions does not match its.

I've already suspected that but the datasheet are exactly the same, and its not a tx/rx wiring error because the sensor is correctly working with the sfg demo, the problem is with arduino, and thats why i got to watch at the libraries.

ts not a tx/rx wiring error because the sensor is correctly working with the sfg demo, the problem is with arduino, and thats why i got to watch at the libraries.

You forgot the link to that SFG Demo program but I guess it's a software for a Windows PC. So how can you tell that the wiring for the Arduino is correct if you never had a working software on the Arduino?

I've already suspected that but the datasheet are exactly the same

So you have a datasheet for that part? Why didn't you post it here?

Are you sure you gave us the correct type? The manual I found for that type string says the connector has 5 pins. On the posted picture I can see 6 wires.