完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
传感器介绍
PAJ7620传感器是原相科技(Pixart)的一款内部集成光学阵列式传感器,以使复杂的手势和光标模式输出,内部集成了九种手势的识别:上、下、左、右、向前、向后、顺时针、逆时针以及挥动的手势动作识别、模块以i2c通信,传感器功能很强大,更详细模块说明的可参考数据手册。手册过大无法上传附件,需要可私信我,我做了pdf目录标签,方便定位查看。 手势传感器可以用来做大量丰富的应用开发,我在网上找到这样的应用场景图片,如下: < src="https://file.elecfans.com/web2/M00/2F/93/poYBAGIDscmAUmw-AAoJws4-LuM163.png" > < src="https://file.elecfans.com/web2/M00/2F/9A/pYYBAGIDscyAfkFvAApZCfhu_Qw268.png" > 还有有些oppo手机的手势隔空操作,可以翻转桌面和图片等操作,估计也是手势传感器来实现的。 < src="https://file.elecfans.com/web2/M00/2F/93/poYBAGIDsc2AMq9-AAGnK2RcvxY594.png" > 驱动思路和原理 paj7620的驱动步骤在手册的programing sequence and function application里有详细的步骤说明,我在这里就总结一下注意事项。传感器的读时序中间有stop信号,因此在封装读函数需要调用两次i2c_transfer,,在下面的代码会看到。 设备树编写: 讲完传感器的介绍后,我们首先开始在设备树文件描述手势传感器,手势传感器是i2c协议通信的,我选择roc-rk3308的i2c1组进行通信,因此可以如下描述即可。 &i2c1 { clock-frequency = <400000>; status = "okay"; paj7620: paj7620@73 { compatible = "pxi,paj7620"; reg = <0x73>; }; }; 从设备的地址可在数据手册上找到,它是7bit的地址0x73。 设备驱动编写: 这里我采用轮徇的方式去获取传感器的手势动作状态,并且将手势传感器实现成一个输入设备,因此可以用一个结构体这样描述它 struct gesture_sensor{ struct i2c_client *client; //记录i2c的client struct delayed_work poll_work; //工作队列 struct input_dev *inputdev; //输入设备 }; 根据传感器的时序进行封装paj7620的i2c读写函数 //paj7620写寄存器 static int paj_write_reg(struct i2c_client *client ,unsigned char addr,unsigned char data) { unsigned char buf[2]={addr,data}; return i2c_master_send(client,buf,2); } //paj7620读寄存器 //paj7620的读中间是p(停止)信号,因此要将read操作分成两次transfer static unsigned char paj_read_reg(struct i2c_client *client ,unsigned char addr) { int ret; struct i2c_msg msg[2]; unsigned char data; msg[0].addr=client->addr; msg[0].flags =0;//写 msg[0].len=1; msg[0].buf=&addr; ret=i2c_transfer(client->adapter,msg,1); if(ret<0) { printk("i2c_transfer read error %dn",ret); return ret; } msg[1].addr = client->addr; msg[1].flags |= I2C_M_RD;//读 msg[1].len = 1; msg[1].buf = &data; ret = i2c_transfer(client->adapter,&msg[1], 1); if(ret < 0) { printk("i2c_transfer read error %dn",ret); return ret; } return data; } 在工作队列中将数据获取,并且上报给用户层。代码太长,此处将不粘贴,详细的代码可参考附件或私信我。 功能测试: 在这里,我做了一个应用层的demo来获取手势数据,在串口终端里运行gesturedemo,我们进行手势动作识别测试,效果如下,可以获取9种识别的手势: # gesturedemo /dev/input/event1 gesture:down gesture:up gesture:left gesture:right gesture:forward gesture:backward gesture:clockwise gesture:count clockwise gesture:wave |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1906 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2382 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5175 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:10 , Processed in 0.619984 second(s), Total 75, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号