一、注册指纹

/*【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块实验之二:输入序号,注册指纹示例安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装实验接线:Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)TX      2RX      3GND    GND
*/#include <Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);uint8_t id;void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nAdafruit Fingerprint sensor enrollment");// 设置传感器串行端口的数据速率finger.begin(57600);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor ");while (1) { delay(1); }}
}uint8_t readnumber(void) {uint8_t num = 0;while (num == 0) {while (! Serial.available());num = Serial.parseInt();}return num;
}void loop()                      // 循环执行
{Serial.println("Ready to enroll a fingerprint!");Serial.println("lease type in the ID # (from 1 to 127) you want to save this finger as...");id = readnumber();if (id == 0) {// ID #0 not allowed, try again!return;}Serial.print("Enrolling ID #");Serial.println(id);while (!  getFingerprintEnroll() );
}uint8_t getFingerprintEnroll() {int p = -1;Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);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;}}// OK success!p = finger.image2Tz(1);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;}Serial.println("Remove finger");delay(2000);p = 0;while (p != FINGERPRINT_NOFINGER) {p = finger.getImage();}Serial.print("ID "); Serial.println(id);p = -1;Serial.println("lace same finger again");while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("Image taken");break;case FINGERPRINT_NOFINGER:Serial.print(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");break;case FINGERPRINT_IMAGEFAIL:Serial.println("Imaging error");break;default:Serial.println("Unknown error");break;}}// OK success!p = finger.image2Tz(2);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!Serial.print("Creating model for #");  Serial.println(id);p = finger.createModel();if (p == FINGERPRINT_OK) {Serial.println("rints matched!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_ENROLLMISMATCH) {Serial.println("Fingerprints did not match");return p;} else {Serial.println("Unknown error");return p;}   Serial.print("ID "); Serial.println(id);p = finger.storeModel(id);if (p == FINGERPRINT_OK) {Serial.println("Stored!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_BADLOCATION) {Serial.println("Could not store in that location");return p;} else if (p == FINGERPRINT_FLASHERR) {Serial.println("Error writing to flash");return p;} else {Serial.println("Unknown error");return p;}
}

二、匹配指纹

/*【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块实验之三:查找一个匹配的指纹安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装实验接线:Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)TX      2RX      3GND    GND
*/#include <Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nAdafruit finger detect test");// set the data rate for the sensor serial portfinger.begin(57600);delay(5);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor ");while (1) { delay(1); }}finger.getTemplateCount();Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");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);return finger.fingerID;
}// 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;
}

三、读取指纹库列表

/*【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块实验之四:读取指纹库并列表安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装实验接线:Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)TX      2RX      3GND    GND
*/#include <Adafruit_Fingerprint.h>int getFingerprintIDez();// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);void setup()
{while(!Serial);Serial.begin(9600);Serial.println("Fingerprint template extractor");// set the data rate for the sensor serial portfinger.begin(57600);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor ");while (1);}// Try to get the templates for fingers 1 through 10for (int finger = 1; finger < 10; finger++) {downloadFingerprintTemplate(finger);}
}uint8_t downloadFingerprintTemplate(uint16_t id)
{Serial.println("------------------------------------");Serial.print("Attempting to load #"); Serial.println(id);uint8_t p = finger.loadModel(id);switch (p) {case FINGERPRINT_OK:Serial.print("Template "); Serial.print(id); Serial.println(" loaded");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("Communication error");return p;default:Serial.print("Unknown error "); Serial.println(p);return p;}// OK success!Serial.print("Attempting to get #"); Serial.println(id);p = finger.getModel();switch (p) {case FINGERPRINT_OK:Serial.print("Template "); Serial.print(id); Serial.println(" transferring:");break;default:Serial.print("Unknown error "); Serial.println(p);return p;}// one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless'uint8_t bytesReceived[534]; // 2 data packetsmemset(bytesReceived, 0xff, 534);uint32_t starttime = millis();int i = 0;while (i < 534 && (millis() - starttime) < 20000) {if (mySerial.available()) {bytesReceived[i++] = mySerial.read();}}Serial.print(i); Serial.println(" bytes read.");Serial.println("Decoding packet...");uint8_t fingerTemplate[512]; // the real templatememset(fingerTemplate, 0xff, 512);// filtering only the data packetsint uindx = 9, index = 0;while (index < 534) {while (index < uindx) ++index;uindx += 256;while (index < uindx) {fingerTemplate[index++] = bytesReceived[index];}uindx += 2;while (index < uindx) ++index;uindx = index + 9;}for (int i = 0; i < 512; ++i) {//Serial.print("0x");printHex(fingerTemplate, 2);//Serial.print(", ");}Serial.println("\ndone.");/*uint8_t templateBuffer[256];memset(templateBuffer, 0xff, 256);  //zero out template bufferint index=0;uint32_t starttime = millis();while ((index < 256) && ((millis() - starttime) < 1000)){if (mySerial.available()){templateBuffer[index] = mySerial.read();index++;}}Serial.print(index); Serial.println(" bytes read");//dump entire templateBuffer.  This prints out 16 lines of 16 bytesfor (int count= 0; count < 16; count++){for (int i = 0; i < 16; i++){Serial.print("0x");Serial.print(templateBuffer[count*16+i], HEX);Serial.print(", ");}Serial.println();}*/
}void printHex(int num, int precision) {char tmp[16];char format[128];sprintf(format, "%%.%dX", precision);sprintf(tmp, format, num);Serial.print(tmp);
}void loop(){}

四、输入序号,删除指定指纹模板

/*【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块实验之五:输入序号,删除指定指纹模板安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装实验接线:Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)TX      2RX      3GND    GND
*/#include <Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nDelete Finger");// set the data rate for the sensor serial portfinger.begin(57600);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor ");while (1);}
}uint8_t readnumber(void) {uint8_t num = 0;while (num == 0) {while (! Serial.available());num = Serial.parseInt();}return num;
}void loop()                     // run over and over again
{Serial.println("lease type in the ID # (from 1 to 127) you want to delete...");uint8_t id = readnumber();if (id == 0) {// ID #0 not allowed, try again!return;}Serial.print("Deleting ID #");Serial.println(id);deleteFingerprint(id);
}uint8_t deleteFingerprint(uint8_t id) {uint8_t p = -1;p = finger.deleteModel(id);if (p == FINGERPRINT_OK) {Serial.println("Deleted!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p;} else if (p == FINGERPRINT_BADLOCATION) {Serial.println("Could not delete in that location");return p;} else if (p == FINGERPRINT_FLASHERR) {Serial.println("Error writing to flash");return p;} else {Serial.print("Unknown error: 0x"); Serial.println(p, HEX);return p;}
}

五、删除所有指纹模板

/*【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验一百五十:AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块实验之六:删除所有指纹模板安装库:IDE—工具—管理库—搜索Adafruit-Fingerprint-Sensor-Library—安装实验接线:Vi      +3.3V(请勿接3.3V以上电源,否则烧毁模块!)TX      2RX      3GND    GND
*/#include <Adafruit_Fingerprint.h>// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\nDeleting all fingerprint templates!");Serial.println("ress 'Y' key to continue");while (1) {if (Serial.available() && (Serial.read() == 'Y')) {break;}}// set the data rate for the sensor serial portfinger.begin(57600);if (finger.verifyPassword()) {Serial.println("Found fingerprint sensor!");} else {Serial.println("Did not find fingerprint sensor ");while (1);}finger.emptyDatabase();Serial.println("Now database is empty ");
}void loop() {}

六、OLED显示指纹状态

待更新……

AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块相关推荐

  1. 智能锁越来越流行,买指纹锁为什么要选择半导体指纹识别的智能锁?光学识别指纹锁不好吗?

    随着智能门锁行业及技术的成熟,在人们生活水平不断提高的今天,越来越多的消费者在家里装修或是换门锁时,接基本上都想着是不是也该去给家里换把指纹锁? 目前市面主要分为两类,一类是半导体指纹识别,另一类是光 ...

  2. 【雕爷学编程】Arduino动手做(141)---AS608光学指纹识别模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  3. vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...

    智能锁现在也有很多叫法:指纹锁.电子锁.可见指纹识别是智能锁的核心功能了,那我们今天来聊聊智能锁的指纹识别模块. 指纹识别的历史 指纹识别认证的流程 指纹识别技术的种类 指纹识别的历史 早在2000多 ...

  4. 51驱动AS608光学指纹识别模块 12864显示

    51驱动AS608光学指纹识别模块 12864显示 AS608光学指纹识别模块 模块工作原理 1.指纹特征 2.指纹处理 模块参数 引脚说明 实验程序 硬件设备和接线 程序讲解 按键 主函数 实验步骤 ...

  5. K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示

    K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 ...

  6. 指纹传感器的测试软件,【Arduino】168种传感器系列实验(149)-AS608光学指纹识别模块-Arduino中文社区 - Powered by Discuz!...

    [mw_shl_code=arduino,true]/* [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验一百五十:AS608光学指纹识别模块+0.91寸OLED液晶屏显示 ...

  7. AS608指纹识别模块+STM32实现指纹录入

    视频演示 d9148ed412b24119db81eef6c2c8e9ec 1.特性参数 (资料来自ALIENTEK文档) ATK-AS608 指纹识别模块是 ALIENTEK 推出的一款高性能的光学 ...

  8. 【HaaS Python硬件积木】AS608指纹识别模块 打造指纹门禁 开门有手就行

    一.产品简介 ATK-AS608指纹识别模块是ALIENTEK推出的一款高性能的光学指纹识别模块.它采用的是指纹识别芯片公司杭州晟元芯片技术有限公司生产的AS608指纹识别芯片.该芯片内置DSP运算单 ...

  9. 硬件速攻-AS608指纹识别模块

    简介 AS608指纹识别模块是一种小型化.低功耗.高精度的指纹识别模块.它采用了高速DSP处理器和先进的算法,可以快速.准确地完成指纹图像的采集和识别. 这个指纹识别模块内部集成了指纹传感器.处理器. ...

最新文章

  1. 知识库建设的5个步骤
  2. 相当全面的Numpy使用总结.pptx
  3. Android 哥哥福利
  4. Apache ServiceComb Pack 微服务分布式数据最终一致性解决方案
  5. vc动态生成按钮并响应
  6. 高级软件工程第五次作业:东理三剑客团队作业-2
  7. SQL I/O操作学习笔记
  8. 200804C阶段一变量生存期和结构体
  9. flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查
  10. 介绍几个专门面向中文的命名实体识别和关系抽取工具
  11. c语言 正号运算符 作用,C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,...
  12. 使用Xshell连接Ubuntu详解
  13. (29)System Verilog进程间同步(旗语semaphore)
  14. 北乐博客装饰分享CSS+HTML+js
  15. Python语言学习 (二)1.1
  16. Python零基础入门学习 作者:小甲鱼
  17. mysql语言是数据的行数据_自己总结的一些my sql数据库的知识,需要的可以看一看...
  18. 在linux系统下如何下载中文输入法,如何在linux系统下安装中文输入法
  19. PDF文件太大,教你一个方法让PDF文件变小
  20. gmail支持html吗,gmail smtp

热门文章

  1. Lora技术助力冷链发展
  2. ❤️是你的期末大作业吗?Java基础语法就能实现的图书管理系统 ❤️
  3. Macbook M1安装OpenCV
  4. GitHub上整理的一些工具,求补充
  5. 视频教程-监控云台软件编写-C/C++
  6. 给你的 ART-Pi (STM32H7) 降降温
  7. webix, DataTable组件,给表头增加Tooltip
  8. 人工智能(AI)入门
  9. 【蓝桥杯】【python】夺宝奇兵
  10. 圣杯布局和双飞翼布局详解