Example Code for Arduino-Comprehensive Examples
Comprehensive Examples
Hardware Preparation
- DFRduino Leonardo (or similar) x 1
- Capacitive Fingerprint Sensor - UART (FPC Connector) × 1
- DuPont Wires
Software Preparation
- Arduino IDE
- Download and install the ID809 Library. (About how to install the library?)
Wiring Diagram

Sample Code
This example is a comprehensive application of the fingerprint module, in which the module will enter into different modes according to the length of finger pressing time. When a finger pressed down, the blue light flashes 3 times to enter the fingerprint comparison mode; the yellow light flashes 3 times to enter the fingerprint registration mode; the red light flashes 3 times to enter the fingerprint deletion mode to delete the fingerprint. This experiment needs to connect IRQ pin to D6 pin.
/*!
* @file comprehensiveExample.ino
* @brief Comprehensive Example
* @n This module can be controlled by hardware serial or software serial. Pin IRQ should be connected to D6 in this experiment.
* @n Experiment Phenomenon:when finger pressed down, the blue LED blinks quickly 3 times to enter fingerprint comparison mode.
* @n The yellow LED blinks quickly 3 times to enter fingerprint registration mode
* @n The red LED blinks quickly 3 times to enter fingerprint deletion mode, and delete this fringerprint
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [Eddard]([email protected])
* @version V1.0
* @date 2020-03-19
* @get from https://www.dfrobot.com
* @url https://github.com/DFRobot/DFRobot_ID809
*/
#include <DFRobot_ID809.h>
#define COLLECT_NUMBER 3 //Fingerprint sampling times, can be set to 1-3
#define IRQ 6 //Interrupt pin
/*Use software serial when using UNO or NANO*/
#if ((defined ARDUINO_AVR_UNO) || (defined ARDUINO_AVR_NANO))
#include <SoftwareSerial.h>
SoftwareSerial Serial1(2, 3); //RX, TX
#define FPSerial Serial1
#else
#define FPSerial Serial1
#endif
DFRobot_ID809 fingerprint;
//String desc; //Error code information, enabling this function will consume much memory
void setup(){
/*Initialize serial port for printing*/
Serial.begin(9600);
/*Initialize FPSerial*/
FPSerial.begin(115200);
/*Use FPSerial as communication serial port of module*/
fingerprint.begin(FPSerial);
/*Wait for Serial to open*/
while(!Serial);
/*Test whether device can communicate properly with mainboard,
Return true or false
*/
while(fingerprint.isConnected() == false){
Serial.println("Communication with device failed, please check connection");
/*Get error code information*/
//desc = fingerprint.getErrorDescription();
//Serial.println(desc);
delay(1000);
}
}
//Blue LED comparison mode Yellow LED Registration mode Red Deletion mode
void loop(){
if(digitalRead(IRQ)){
uint16_t i = 0;
/*Capture fingerprint image, 5s idle timeout, if timeout=0, disable the collection timeout function
Return 0 if succeed, otherwise return ERR_ID809
*/
if((fingerprint.collectionFingerprint(/*timeout=*/5)) != ERR_ID809){
/*Get the time when finger pressed down*/
/*Set fingerprint LED ring mode, color, and number of blinks,
Can be set as follows:
Parameter 1:<LEDMode>
eBreathing eFastBlink eKeepsOn eNormalClose
eFadeIn eFadeOut eSlowBlink
Parameter 2:<LEDColor>
eLEDGreen eLEDRed eLEDYellow eLEDBlue
eLEDCyan eLEDMagenta eLEDWhite
Parameter 3:<number of blinks> 0 represents blinking all the time,
This parameter will only be valid in mode eBreathing, eFastBlink, eSlowBlink
*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eFastBlink, /*LEDColor = */fingerprint.eLEDBlue, /*blinkCount = */3); //Blue LED blinks quickly 3 times, means it's in fingerprint comparison mode now
/*Wait for finger to relase*/
while(fingerprint.detectFinger()){
delay(50);
i++;
if(i == 15){ //Yellow LED blinks quickly 3 times, means it's in fingerprint regisrtation mode now
/*Set fingerprint LED ring to always ON in yellow*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eFastBlink, /*LEDColor = */fingerprint.eLEDYellow, /*blinkCount = */3);
}else if(i == 30){ //Red LED blinks quickly 3 times, means it's in fingerprint deletion mode now
/*Set fingerprint LED ring to always ON in red*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eFastBlink, /*LEDColor = */fingerprint.eLEDRed, /*blinkCount = */3);
}
}
}
if(i == 0){
/*Fingerprint capturing failed*/
}else if(i > 0 && i < 15){
Serial.println("Enter fingerprint comparison mode");
/*Compare fingerprints*/
fingerprintMatching();
}else if(i >= 15 && i < 30){
Serial.println("Enter fingerprint registration mode");
/*Register fingerprint*/
fingerprintRegistration();
}else{
Serial.println("Enter fingerprint deletion mode");
/*Delete this fingerprint*/
fingerprintDeletion();
}
}
}
//Compare fingerprints
void fingerprintMatching(){
/*Compare the captured fingerprint with all fingerprints in the fingerprint library,
Return fingerprint ID number(1-80) if succeed, return 0 when failed
*/
uint8_t ret = fingerprint.search();
if(ret != 0){
/*Set fingerprint LED ring to always ON in green*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eKeepsOn, /*LEDColor = */fingerprint.eLEDGreen, /*blinkCount = */0);
Serial.print("Successfully matched, ID=");
Serial.println(ret);
}else{
/*Set fingerprint LED Ring to always ON in red*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eKeepsOn, /*LEDColor = */fingerprint.eLEDRed, /*blinkCount = */0);
Serial.println("Matching failed");
}
delay(1000);
/*Turn off fingerprint LED Ring*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eNormalClose, /*LEDColor = */fingerprint.eLEDBlue, /*blinkCount = */0);
}
//Fingerprint Registration
void fingerprintRegistration(){
uint8_t ID,i;
/*Compare the captured fingerprint with all fingerprints in the fingerprint library,
Return fingerprint ID number(1-80) if succeed, return 0 when failed
Function: clear the last captured fingerprint image.
*/
fingerprint.search(); //Can add "if else" statement to judge whether the fingerprint has been registered.
/*Get a unregistered ID for saving fingerprint
Return ID number when succeed,
Return ERR_ID809 if failed
*/
if((ID = fingerprint.getEmptyID()) == ERR_ID809){
while(1){
/*Get error code imformation*/
//desc = fingerprint.getErrorDescription();
//Serial.println(desc);
delay(1000);
}
}
Serial.print("Unregistered ID, ID=");
Serial.println(ID);
i = 0; //Clear sampling times
/*Fingerprint Sampling 3 times*/
while(i < COLLECT_NUMBER){
/*Set fingerprint LED ring to breathing lighting in blue*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eBreathing, /*LEDColor = */fingerprint.eLEDBlue, /*blinkCount = */0);
Serial.print("The fingerprint sampling of the");
Serial.print(i+1);
Serial.println("(th) time is being taken");
Serial.println("Please press down your finger");
/*Capture fingerprint image, 10s idle timeout
If succeed return 0, otherwise return ERR_ID809
*/
if((fingerprint.collectionFingerprint(/*timeout = */10)) != ERR_ID809){
/*Set fingerprint LED ring to quick blink in yellow 3 times*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eFastBlink, /*LEDColor = */fingerprint.eLEDYellow, /*blinkCount = */3);
Serial.println("Capturing succeeds");
i++; //Sampling times +1
}else{
Serial.println("Capturing fails");
/*Get error code information*/
//desc = fingerprint.getErrorDescription();
//Serial.println(desc);
}
Serial.println("Please release your finger");
/*Wait for finger to release
Return 1 when finger is detected, otherwise return 0
*/
while(fingerprint.detectFinger());
}
/*Save fingerprint information into an unregistered ID*/
if(fingerprint.storeFingerprint(/*Empty ID = */ID) != ERR_ID809){
Serial.print("Saving succeed, ID=");
Serial.println(ID);
Serial.println("-----------------------------");
/*Set fingerprint LED ring to always ON in green*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eKeepsOn, /*LEDColor = */fingerprint.eLEDGreen, /*blinkCount = */0);
delay(1000);
/*Turn off fingerprint LED ring*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eNormalClose, /*LEDColor = */fingerprint.eLEDBlue, /*blinkCount = */0);
}else{
Serial.println("Saving failed");
/*Get error code information*/
//desc = fingerprint.getErrorDescription();
//Serial.println(desc);
}
}
//Fingerprint deletion
void fingerprintDeletion(){
uint8_t ret;
/*Compare the captured fingerprint with all the fingerprints in the fingerprint library,
Return fingerprint ID(1-80) if succeed, return 0 when failed
*/
ret = fingerprint.search();
if(ret){
/*Set fingerprint LED ring to always ON in green*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eKeepsOn, /*LEDColor = */fingerprint.eLEDGreen, /*blinkCount = */0);
fingerprint.delFingerprint(ret);
Serial.print("deleted fingerprint,ID=");
Serial.println(ret);
}else{
/*Set fingerprint LED ring to always ON in red*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eKeepsOn, /*LEDColor = */fingerprint.eLEDRed, /*blinkCount = */0);
Serial.println("Matching failed or the fingerprint hasn't been registered");
}
delay(1000);
/*Turn off fingerprint LED ring*/
fingerprint.ctrlLED(/*LEDMode = */fingerprint.eNormalClose, /*LEDColor = */fingerprint.eLEDBlue, /*blinkCount = */0);
}
Result

Was this article helpful?
