打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
指纹模块
写的时候想,这个值不值得写篇日志
用的是深圳指昂公司的指纹模块zaz010,全部材料是一个模块,一个讲模块串口通信协议和指令的pdf文档,都是rs232口的,参考做过的手机模块,倒是很简单
注:此模块出来的是TTL电平,连到电脑上要加一个Max232之类的芯片,我用的是Max3232
Linux下所有设备都是文件,所以怎么操作不用说了,无非打开,设置,读写,关闭
这个模块只接受16进制字符,所以输入的16进制,然后转换成字符串,再写到串口里,主要过程如下(一个测试函数):
char cmd[254];
while(1)
{
printf("?:");
gets(cmd);
//sprintf(cmd,"ef01ffffffff010003010005");
if(cmd[0] == 'q'||cmd[0] == "Q")
return 0;
iSpot = strlen(cmd);
sCmd[iSpot] = 0x0d;
sCmd[iSpot+1] = 0x00;
printf("length of sCmd %d\n",strlen(cmd));
if(writeHex2UnixPort(fd,cmd) < 0) return 0;
usleep(1000000);
if((sResultLen = readUnixPort(fd,sResult,254)) > 0)
displayReading (sResult, sResultLen);
else
printf("sResultLen %d\n",sResultLen);
}
主要函数:
1.十六进制转十进制
int hex2dec (char *s)
{
int n, i;
int dec = 0;
i = strlen (s) - 1;
while (i >= 0) {
if (isdigit (*s))
n = *s - 48;
else
n = toupper (*s) - 55;
if ((n < 0) || (n > 15))
return -1;
dec += (int)pow (16, i--) * n;
s++;
}
return dec;
}
2.将转换后的字符串写入串口
int writeHex2UnixPort (int fd, char *psOutput)
{
char *cp = psOutput;
char h[3];
char c;
char s[254];
int i = 0;
h[2]='\0';
do {
if (*cp == ' ')
++cp;
h[0]=*(cp++);
h[1]=*(cp);
c = (char)hex2dec (h);

if (write (fd, &c, 1) != 1)
{
fprintf (stderr, "error: write\n");
return -1;
}
i++;
} while (*(++cp) != '\0');
return i;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
基于STM32单片机开发光学指纹识别模块(FPM10A)全教程
VBA代码:如何用vba执行DOS命令?
C语言定时关机小程序_C语言中文网
Step 4. Executing a select query (and fetching result set)
Linux内核的ioctl函数学习
Linux系统管道和有名管道的通信机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服