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
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)
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.
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.
The default module address is "0xffffffff"; the default password is "0x00000000".
Could anyone verificate if the handshake is properly done? thank you
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.