SparkFun Forums 

Where electronics enthusiasts find answers.

Have questions about a SparkFun product or board? This is the place to be.
By SmoothArias
#139784
Hello all,

I been playing around with this fingerprint unit but i having problems.

I am sending this command cmd[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x01,0x00,0x05}; through the arduino tx pin to the rx pin of the fingerprint so hopefully i can get correct[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x03,0x00,0x00,0x0A}; as response from the fingerprint. however the fingerprint scanner is not sending anything back.

this is the code i wrote to test the fingerprint.
Code: Select all
#include <SoftwareSerial.h>
SoftwareSerial FP(2,3);

byte cmd[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x01,0x00,0x05};		//ask for match!
byte correct[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x03,0x00,0x00,0x0A};           //ACK

void setup()
{
  Serial.begin(9600);
  FP.begin(9600); //initializes the serial port for the fingerprint
}

void loop()
{
     FP.write(cmd, 12); //sends the command
     Serial.print(Serial.read()); //reads what ever it receives and prints it to the computer, if nothing is received it prints a -1
     Serial.print("\n");  
     delay(1000);
}
my connection is

Fingerprint Arduino

Pin 1 (GND) GND pin
Pin 2 (reset) 5V pin
Pin 3 (TXD) RX<-2 pin (software serial) (sparkfun logic level converter to step up voltage)
Pin 4 (RXD) TX->3 pin (software serial) (sparkfun logic level converter to step down voltage)
Pin 5 (PowerEN) 5V pin
pin 6 (VCC 5v) 5V pin

I attached an oscilloscope to the tx and rx on the arduino and fingerprint scanner to monitor the data transmitted.

the oscilloscope show that the arduino is sending data to the rx of the scanner and the scanner is receiving the data by the series of high and lows shown on the oscilloscope. however the fingerprint scanner is not sending anything back because there is no series of high and lows shown on the oscilloscope and it sits at around 100mV.

the only idea i have now is to hook up this fingerprint scanner to the computer and use the demo app to see if it actually works... however im not sure how to create the connection between the scanner to the computer with either rs232 or usb. what have you guys used to communicate between both devices.
By raul7
#139843
I'm working on a driver in C language for PIC16 microcontrollers for this device, I have a working beta but needs some additional testing and improvement.

Once I have it more reliable, I'll be posting the download links right here.
By SmoothArias
#139928
I figured my problem was with the arduino..

I needed to setup the correct baud rate that the scanner is set at. for my scanner it came at 57600 so i set my arduino serial to that baud rate.

now im trying to figure out the commands and responses that allow me to find a match fingerprint.

I was able to enroll fingerprint using the procedure AJ mentioned a few pages back but i cannot figure out how to do the same for matching functions.

is there any documentation with response decoding ?

also what kind of uart to rs232 or uart to usb are you guys using to connect the scanner to computer to use the demo app?

thanks in advance for any help.
By raul7
#139952
Hi SmoothArias,

Here's an extract of some comments in my driver code and additional notes. Once I'm done testing my driver I'll publish the code too, (just C for PIC16, perhaps I'll port it for Arduino later).

Hope it helps.

/********************************************************************************
* ENROLL FPRINT
********************************************************************************/
/*------------------------------------------------------------------------------
* The process of enrolling a fingerprint is as follows:
* 1. Get a fingerprint from scanner (first pass)
* 2. Create their features document and store it in CharBuffer1
* 3. Get the fingerprint from scanner again (second pass)
* 4. Create their features document and store it in CharBuffer2
* 5. Create a fingerprint template from CharBuffer1 and CharBuffer2
* 6. Store it in database
-----------------------------------------------------------------------------*/

/*PS_GetImage - Code: 01H - Function: read image from the sensor and
store it in the image buffer*/

/*PS_GenChar - Code: 02H - Function: create fingerprint features document
through the image and store in CharBuffer1 or CharBuffer2*/

/*PS_GetImage - Code: 01H - Function: read image from the sensor and
store it in the image buffer*/

/*PS_GenChar - Code: 02H - Function: create fingerprint features document
through the image and store in CharBuffer1 or CharBuffer2*/

/*PS_RegModel - Code: 05H - Function: create fingerprint template according to the features documents in the CharBuffer1 and CharBuffer2*/

/*PS_StoreChar - Code: 06H - Function: store the template into the flash
fingerprint database from the features buffer*/

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_GetImage - Code: 01H - Function: read image from the sensor and store it in
* the image buffer.
* Request(6 times): EF 01 FF FF FF FF 01 00 03 01 00 05
* Answer : EF 01 FF FF FF FF 07 00 03 02 00 0C
*
* Request (12 bytes): EF 01 FF FF FF FF 01 00 03 01 00 05
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 (00) 00 0A
* ---------------------------------------------------------------------------*/
Note: Send request packet, say 5 times every 500ms and check for a 00 in the 10th byte of the answer (the one in parenthesis). This 10th byte is always the confirmation byte in the answer packet (as far as I know) and a "00" measn OK, more than 00 means error.

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_GenChar - Code: 02H - Function: create fingerprint features document
* through the image and store in CharBuffer1 or CharBuffer2.
* Request (13 bytes): EF 01 FF FF FF FF 01 00 04 02 (01) 00 08
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 00 00 0A
* ---------------------------------------------------------------------------*/
Note: The value in parenthesis is for CharBuffer, use 00 for CharBuffer1 and 01 for Charbuffer2

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_RegModel - Code: 05H - Function: create fingerprint template according to
* the features documents in the CharBuffer1 and CharBuffer2.
* Request (12 bytes): EF 01 FF FF FF FF 01 00 03 05 00 09
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 00 00 0A
* ---------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_StoreChar - Code: 06H - Function: store the template into the flash
* fingerprint database from the features buffer.
* Request (15 bytes): EF 01 FF FF FF FF 01 00 06 06 01 00 (07) 00 15
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 00 00 0A
* ---------------------------------------------------------------------------*/
Note: The 13th byte in the Request packet is where you send the ID
(memory position) where you want the device to store the new
fingerprint. You can go from 0 to 159 (0x9F) with these IDs (160 max
fingerprints supported according to the datasheet).

/********************************************************************************
* MATCH 1:N
********************************************************************************/
/*------------------------------------------------------------------------------
* The process of verifying a fingerprint is as follows:
* 1. Get a fingerprint from scanner
* 2. Create their features document and store it in CharBuffer1
* 3. Search the database and check the confirmation code in the answer
-----------------------------------------------------------------------------*/
/*PS_GetImage - Code: 01H - Function: read image from the sensor and store it in the image buffer.*/

/*PS_GenChar - Code: 02H - Function: create fingerprint features document
through the image and store in CharBuffer1 or CharBuffer2*/

/*PS_Search - Code: 04H - Function: search the fingerprint database according
to the features document in the CharBuffer1 or CharBuffer2*/

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_GetImage - Code: 01H - Function: read image from the sensor and store it in
* the image buffer.
* Request(6 times): EF 01 FF FF FF FF 01 00 03 01 00 05
* Answer : EF 01 FF FF FF FF 07 00 03 02 00 0C
*
* Request (12 bytes): EF 01 FF FF FF FF 01 00 03 01 00 05
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 00 00 0A
* ---------------------------------------------------------------------------*/

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_GenChar - Code: 02H - Function: create fingerprint features document
* through the image and store in CharBuffer1 or CharBuffer2.
* Request (13 bytes): EF 01 FF FF FF FF 01 00 04 02 (01) 00 08
* Answer (12 bytes) : EF 01 FF FF FF FF 07 00 03 00 00 0A
* ---------------------------------------------------------------------------*/
Note: The value in parenthesis is for CharBuffer, use 00 for CharBuffer1 and 01 for Charbuffer2

/*------------------------------------------------------------------------------
* Reverse engineering monitored packets for:
* PS_Search - Code: 04H - Function: search the fingerprint database according
* to the features document in the CharBuffer1 or CharBuffer2.
* Request (17 bytes): EF 01 FF FF FF FF 01 00 08 04 (01) 00 00 00 79 00 87
* Answer (16 bytes) : EF 01 FF FF FF FF 07 00 07 (00) 00 (07) 00 6F 00 84
* ---------------------------------------------------------------------------*/
Note: The eleventh byte in the request (the one in parenthesis) is for selecting CharBuffer1 or Charbuffer2, here one must use the same CharBuffer as in the previous packet.
Check the 10th byte of the answer (the first one in parenthesis), 00 => OK, more than 00 => not found or some kind of error occured in the scanner.
The 12th byte (second one in parenthesis) is the ID corresponding to the fingerprint that was found.
Last edited by raul7 on Fri Feb 17, 2012 12:54 pm, edited 1 time in total.
By SmoothArias
#139961
Hey Raul7

Thank you so much for you help and explanation of the enroll and match procedures, you are the best!!

Just a few quick questions

in the PS_Search answer, does the 12th byte (the one in parenthesis) represent the id or place in memory of the fingerprint template that was matched?
Answer (16 bytes) : EF 01 FF FF FF FF 07 00 07 00 00 (07) 00 6F 00 84

Also, when swiping a new fingerprint, do you have to swipe a few times until the feature document is created? on my code i have to swipe many times until the feature document is created and stored in the CharBuffer. It may be a timing or reading issue with my code.

In the PS_GetImage, you wrote "Request(6 times)" does that mean i have to send the command 6 times at 500ms to have a good read and/or optimize that function?

this is my code so far, i have not optimized it yet but when i do i will post it up for people to study it and play around with it.
Code: Select all
#include <SoftwareSerial.h>
SoftwareSerial FP(2,3);

//Commands
byte NewPrint[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x01,0x00,0x05};                          //Register a new fingerprint
byte CharBuffer1[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x04,0x02,0x00,0x00,0x07};                  //Store fingerprint in buffer 1
byte CharBuffer2[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x04,0x02,0x01,0x00,0x08};                  //Store fingerprint in buffer 2
byte Template[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x05,0x00,0x09};                          //Creates template from buffer 1 & 2
byte Store[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x06,0x06,0x01,0x00,0x02,0x00,0x10};              //Store template into memory
byte deleteall[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x0D,0x00,0x11};                         //Delete all fingerprint templates
byte TemplateNumber[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x1d,0x00,0x21};                    //Template number
byte LoadTemplate[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x06,0x07,0x01,0x00,0x00,0x00,0x0F};       //Load Template #1 -15
byte Search[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x79,0x00,0x87};   //Search Template
byte UpTemplate[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x08,0x00,0x0C};                        //Upload Template to PC
byte ReadSysPara[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x0F,0x00,0x13};		        //System Parameters
byte ACK[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x03,0x00,0x00,0x0A};                               //ACK Response
byte FAIL[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x03,0x15,0x00,0x1F};                              //FAIL Response
byte SwipeACK[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x03,0x02,0x00,0x0C};                          //SwipeACK
byte Match12[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x03,0x03,0x00,0x07};                           //Match buffer 1 and buffer 2
byte MatchAll[]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x79,0x00,0x87};  //Match against all?

//Potential no match response: EF 1 FF FF FF FF 7 0 7 9 0 0 0 0 0 17
//Potential match response: EF 1 FF FF FF FF 7 0 7 0 0 1 2 DB 0 EC

//Other Variables
int a = 0;
int count = 0;
byte buffer[12];
byte buffer2[12];
const int ledPinG = 12;
const int ledPinR = 11;
boolean ACKr = false;
boolean MatchSuccess = false;
boolean StoreSuccess1 = false;
boolean StoreSuccess2 = false;
boolean TemplateSuccess = false;
boolean StoreMemSuccess = false;
boolean LoadTemplateSuccess = false;

void Enrollment()
{
  
  Serial.print("Enrollment Process...\n");
  
  while (StoreSuccess1 == false)
    {
     //sends the swipe new fingerprint command
     FP.write(NewPrint, 12);
     delay (400);
     if(FP.available()>11)
     {
     for (int i=0;i<12;i++)
     {
         buffer[count] = FP.read();
//         Serial.print(buffer[count], HEX);
//         Serial.print(" ");
         count++;
         delay(5);
     }   
     }
     count = 0;
     Serial.print("\n"); 
     //create feature from fingerprint image and store in buffer 1    
     FP.write(CharBuffer1, 13);
     delay (200);
     
     //fills buffer with the FP response and outputs for debugging reasons
     if(FP.available()>11)
     {
     for (int i=0;i<12;i++)
     {
         buffer2[count] = FP.read();
         Serial.print(buffer2[count], HEX);
         Serial.print(" ");
         count++;
         delay(5);
     }
     }
     for (int i=0; i<12; i++) ACKr = (buffer2[i] == ACK[i]);    //checks to see if response match
     
     if (ACKr) StoreSuccess1 = true;
     if (!ACKr) StoreSuccess1 = false;
     count = 0;
    }
    
    Serial.print("StoreSuccess1 [1/4]!\n");
    
    while (StoreSuccess2 == false)
    {
     //sends the swipe new fingerprint command
     FP.write(NewPrint, 12);
     delay (400);
     if(FP.available()>11)
     {
     for (int i=0;i<12;i++)
     {
         buffer[count] = FP.read();
//         Serial.print(buffer[count], HEX);
//         Serial.print(" ");
         count++;
         delay(5);
     } 
     }
   
     count = 0;
     Serial.print("\n"); 
     //create feature from fingerprint image and store in buffer 2    
     FP.write(CharBuffer2, 13);
     delay (200);
     if(FP.available()>11)
     {
     //fills buffer with the FP response and outputs for debugging reasons
     for (int i=0;i<12;i++)
     {
         buffer2[count] = FP.read();
         Serial.print(buffer2[count], HEX);
         Serial.print(" ");
         count++;
         delay(5);
     }
     }
     
     for (int i=0; i<12; i++) ACKr = (buffer2[i] == ACK[i]);    //checks to see if response match
     
     if (ACKr) StoreSuccess2 = true;
     if (!ACKr) StoreSuccess2 = false;
     count = 0; 
    }
    
    Serial.print("StoreSuccess2! [2/4]\n");
    a=0;
    
    while (TemplateSuccess == false)
    {
     //sends the template command
     FP.write(Template, 12);
     delay (1000);
     
     //fills buffer with the FP response and outputs for debugging reasons
     for (int i=0;i<12;i++)
     {
         buffer[count] = FP.read();
         count++;
         delay(5);
     }

     for (int i=0; i<12; i++) ACKr = (buffer[i] == ACK[i]);    //checks to see if response match
     
     if (ACKr) TemplateSuccess = true;
     if (!ACKr) TemplateSuccess = false;
     count = 0; 
    }
    
    Serial.print("TemplateSuccess! [3/4]\n");

    while (StoreMemSuccess == false)
    {
     //sends store command
     FP.write(Store, 15);
     delay (500);
     
     //fills buffer with the FP response and outputs for debugging reasons
     for (int i=0;i<12;i++)
     {
         buffer[count] = FP.read();
         count++;
         delay(5);
     }
     
     for (int i=0; i<12; i++) ACKr = (buffer[i] == ACK[i]);    //checks to see if response match
     
     if (ACKr) StoreMemSuccess = true;
     if (!ACKr) StoreMemSuccess = false;
     count = 0; 
    }
    
    Serial.print("StoreMemSuccess! [4/4]\n");
}


void setup()
{
  Serial.begin(57600);
  FP.begin(57600);
  ACKr = false;
  MatchSuccess = false;
  StoreSuccess1 = false;
  StoreSuccess2 = false;
  TemplateSuccess = false;
  StoreMemSuccess = false;
  LoadTemplateSuccess = false;
  pinMode(ledPinG, OUTPUT);
  pinMode(ledPinR, OUTPUT);
}

void loop()
{
//    Enrollment();
//pseudo matching procedure
    Serial.print("\nEnrollment Process...\n");
    while (StoreSuccess1 == false)
    {
     //sends the swipe new fingerprint command
     FP.write(NewPrint, 12);
     delay (400);
     
     if(FP.available()>11)
     {
       for (int i=0;i<12;i++)
       {
           buffer[count] = FP.read();
           Serial.print(buffer[count], HEX);
           Serial.print(" ");
           count++;
           delay(5);
       }
     }   
     count = 0;
     Serial.print("\n");
     //create feature from fingerprint image and store in buffer 1    
     FP.write(CharBuffer2, 13);
     delay (200);
     
     //fills buffer with the FP response and outputs for debugging reasons
     if(FP.available()>11)
     {
       for (int i=0;i<12;i++)
       {
           buffer2[count] = FP.read();
           Serial.print(buffer2[count], HEX);
           Serial.print(" ");
           count++;
           delay(5);
       }
     }
     
     for (int i=0; i<12; i++) ACKr = (buffer2[i] == ACK[i]);    //checks to see if response match
     
     if (ACKr) StoreSuccess1 = true;
     if (!ACKr) StoreSuccess1 = false;
     count = 0;
    }
    
    Serial.print("Fingeprint in buffer 2...\n");
    
    Serial.print("\nSearching...\n");
    FP.write(Search,17);
    delay(200);
    
    for (int i=0;i<16;i++)
     {
         Serial.print(FP.read(), HEX);
         Serial.print(" ");
         count++;
         delay(5);
     } 
 
     //infinite loop to stop the main loop
     a++;
     while (a>0)
     {
     }
}

By raul7
#139971
Hi Smooth Arias,

"in the PS_Search answer, does the 12th byte (the one in parenthesis) represent the id or place in memory of the fingerprint template that was matched?"

Yes, I forgot to mention it, sorry! The value in that byte is the place in memory as far as I know and can be used as an ID number. In the PS_StoreChar you send this ID number to tell the device where in memory you want to store the new fingerprint, it's the 13th byte in the request packet. You can go from 0 to 159 with these IDs (160 max fingerprints supported according to the datasheet).

"when swiping a new fingerprint, do you have to swipe a few times until the feature document is created?"

Not really, in my case I only swipe once and the scanner sends immediatly a response packet, but some times if you don't swipe pressing firmly on the sensor the device doesn't scan at all, but it could be a timing issue just like you said. Check always for an immediate response from the scanner once you swiped your finger, it'll respond with the corresponding packet and the confirmation code inside.

"In the PS_GetImage, you wrote "Request(6 times)" does that mean i have to send the command 6 times at 500ms to have a good read and/or optimize that function?"

To figure out more clearly the protocol of the scanner, I did kind of a "reverse enginnering" of the serial communication (same as other friends) using the "Free Serial Port Monitor" (Google) and found that the Test Software (from the manufacturer, I think it's posted somewhere else in this thread, too) sent 6 times the request packet at intervals of 500 ms aprox (of course this is not a fixed number), until the first response packet came in.

When the user is about to swipe his (her) finger there's no way to really know when exactly in time it is going to happen, so you just query the scanner sending GetImage packets every 500 ms (could be less or more) until a response packet is received. Of course, even if you receive the response packet it could still contain an error code, so you must check the confirmation code, 0x00 means OK.

I query the scanner 10 times every 500 ms (5 seconds) before the whole operation times out, but as I said, it's not a fixed number. A window between 3 to 5 seconds it's practical in my opinion.

I 'm a little busy right now and I couldn't check your code in detail, but as a sugestion: try to avoid heavy message writing to the serial terminal or other blocking operations in the middle of a packet exchange with the scanner ( when then scanner needs a subsequent packet, say GenChar after GetImage) because apparently the scanner some times aborts the whole process when not receiving the next expected packet after a few milliseconds.

Raul
By SmoothArias
#139978
Thank you Raul, i will keep your suggestion in mind.

Don't worry about going through my code, i will be rewriting it this weekend for optimal operation since its for my senior project.

If i have time, i will try to rewrite the code in AVR studio 5 but that will take some time since i'm not familiar with AVR studio 5.
By USBDriverGuru
#140189
I suggest you use http://www.hyperserialport.com. This will allow you to communicate with a USB to serial converter like a FT2232H board. Use the Embedded Evaluator function to write a Python script to send, receive and perform any conditional branch. This will allow you to read 12 incoming bytes from the port then respond with an ACK.
By Rod_O
#140273
Hi Memo,
Im trying to build an Arduino based Fingerprint Access Control.
Did you finally get your code running ? Could you help me with the code please.
Thanks anyway,
Rod
Memo wrote:does anybody have this running with an arduino? i seem to be at a deadend, even the test software (Thanks Michelle L.) fails to open a connection.

On the arduino i'm simply passing serial data from the USB to the serial of the Slide finger print scanner... doesn't seem to work tho :(

any help would be great...
Code: Select all

#include <AFSoftSerial.h>

// tx and rx on the fingerprint scanner
AFSoftSerial mySerial =  AFSoftSerial(7, 6); 

void setup()  { 
  // open USB connection 
  Serial.begin(9600);
  // open fingerprint connection
  mySerial.begin(9600);
}

void loop()   
{
  
  if (mySerial.available()) {
      Serial.print((char)mySerial.read());
  }
  
  if (Serial.available()) {
      mySerial.print((char)Serial.read());
  }
  
}
By Rod_O
#140292
Hello SmoothArias,
First, thanls to you and Raul for the info and for explaining much better how this sensor communicates.
Im working with this sensor over Arduino, could you help me with your code please... Im sure it would help me a lot...
Thanks anyway,
Rod
SmoothArias wrote:Thank you Raul, i will keep your suggestion in mind.

Don't worry about going through my code, i will be rewriting it this weekend for optimal operation since its for my senior project.

If i have time, i will try to rewrite the code in AVR studio 5 but that will take some time since i'm not familiar with AVR studio 5.
By SmoothArias
#140319
Rod_O wrote:Hello SmoothArias,
First, thanls to you and Raul for the info and for explaining much better how this sensor communicates.
Im working with this sensor over Arduino, could you help me with your code please... Im sure it would help me a lot...
Thanks anyway,
Rod
Hello,

first you need to set the baud rate to the scanner's default baud rate (usually 57600 or 115200)
then you need to send a command to the scanner in order to receive a command back from the scanner.

check my code up a few post up. it has an enrollment, and matching function implemented
By Rod_O
#140341
Hello SmoothArias, Thanks for the info and the code...
Did you connect directly the rx tx from Arduino to the tx rx of the sensor? Im using 5V.
Thanks
By SmoothArias
#140705
Hey Rod_O,

i implemented a level converter to bring up and down the voltages since the arduino speaks at 5volts and the sensor speaks at 3.3volts. i used the schematic from sparkFun's logic level converter.

and yea i connected directly tx(arduino) to rx(sensor) and tx(sensor) to rx(arduino)
By m7mdsab3
#144206
hello
I have a graduation project about unlock door system by using this fingerprint ARA-ME-2510 and i want to connect it with an arduino uno. So the problem i face is about the code.
Is there anyone can help me with the code.
please i need it as soon as possibleImage.
  • 1
  • 5
  • 6
  • 7
  • 8
  • 9