讲了一篇的配置。下面也要讲一下正文啦。
开始拿zfm-206指纹开刀啦。
首先介绍一下zfm-206有两种类型。一种是usb型。另外一种是uart。鉴于个人需要,uart走起。
既然打算在pcduino 上用uart来做指纹门禁的应用,那自然少不了串口设置,虽然网上教程烂大街。但还是说一下几个重要的一点,个人觉得这是比配置串口波特率,数据位停止位更有技术的一个,很多人是只知其然而不知其所以然,我也就在重申一下这个话题
串口打开参数
fd = open(“/dev/ttyS1″,O_RDWR|O_NOCTTY);
if(——-)
——-此处省略一万字
你知道这里打开了设备文件,但是你知道这些通信参数的意义吗? 逗比。。。。
简单说几个常用的
O_RDWR 读写方式打开;
O_NOCTTY 不允许进程管理串口(告诉Unix这个程序不想成为“控制终端”控制的 程序,不说明这个标志的话,任何输入都会影响你的程序。
O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是 否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。
至于设置波特率等。自己上网自行查询。没什么技术含量。全国人民都一样
串口设置完毕。开始撸指纹程序
根据zfm-206官方提供的手册来看,控制该指纹主要通过uart发送串口指令,指纹默认参数为:波特率:57600(可更改),数据位:8 停止位1
指纹首先发送的是包头验证。如果验证信息正确,便会返回一串16进制的确认码
贴一下指纹握手验证信息16进制发送格式
包头 地址 包标识 包长度 包内容(指令/数据/参数/确认码) 校验和
每个指令都是一定的16进制数据码。如图下
小编goofy在这里要强调一个问题,串口发送数据,是以2进制发送,所以,你如果直接发送 ‘1’,那么收到的将是它的十进制ascll码,小编goofy曾经用蓝牙亲测。
原因:串口以2进制发送数据,把1当成了字符处理,以二进制传送便是0011 0001 。那么到了串口那边接到的数据是0011 0001,转换成10进制是49.所以传送过去,串口真正接受到的数据是49.而不是1.。希望大家不要在这里栽跟头。
解决方法之一:
申请内存空间发送:
下面晒一下小编goofy的程序
小编goofy最后提醒一点,题外话啊。也是大家容易犯错的一点用完空间大家可能会及时释放,但是也要管好你定义的指针。不要乱指哦。切忌野指针
晒一下我的指纹录取和检测模式流程图
录取指纹
搜索指纹
更多文章关注goofyy技术宅的博客。传送门:http://www.goofyy.com/
原文地址:http://blog.csdn.net/u014406672/article/details/46531053