STM32开发教程 基于PAJ7620传感器模块的手势识别驱动详解

1.简介       paj7620是alientek推出的一款高性能手势识别传感器模块。该模块采用原相科技(pixart)公司的 paj7620u2芯片,芯片内部集成了光学数组式传感器,以使复杂的手势和光标模式输出,自带九种手势识别,支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别,以及支持物体接近检测等功能。
      paj7620模块驱动时序为iic时序,本次实验我们通过硬件iic来完成手势识别功。
      paj7620 内部自带了 9 个手势识别,分别是“上”、“下”、“左”、“右”、“前”、“后”、“顺时针旋转”、“逆时针旋转”、“挥动”。 使用时传感器的开窗口位置需朝上,如图所示:
      手在传感器的上方,保持与传感器的垂直距离,做出如下图和所示的手势,可以分别得出“上”、“下”、“左”、“右”、“顺时针旋转”、“逆时针旋转”、“挥动”的识别结果。
2.硬件设计 3.软件设计 1.打开stm32cubemx软件,配置手势识别引脚pb6(iic_scl)、pb7(iic_sda);
2.设置引脚模式为推挽输出模式,初始化电平为高电平
4.生成代码 1.引脚模式配置函数 2.手势模块底层接口iic协议函数 起始信号
钟线为高电平时,数据线由高变低为起始信号
/***************发送起始信号***************说明:时钟线为高电平时,数据线由高变低为起始信号*******************************************/void iic_start(void){ iic_sda_out_mode();//输出模式 iic_scl(1); iic_sda_out(1); delayus(2); iic_sda_out(1); delayus(2); iic_scl(0);//钳住iic总线,准发送或者接收数据} 停止信号
时钟线为高电平时,数据线由低变高为停止信号
/**************发送停止信号*********************说明:时钟线为高电平时,数据线由低变高为停止信号************************************************/void iic_stop(void){ iic_sda_out_mode();//输出模式 iic_scl(0); iic_sda_out(1); delayus(2); iic_scl(1); delayus(2); iic_sda_out(1); delayus(2);} 发送应答信号
/****************发送应答信号**************u8 ack -- 0应答,1非应答********************************************/void iic_send_ack(u8 ack){ iic_sda_out_mode();//输出模式 iic_scl(0); if(ack&0x01)iic_sda_out(1);//非应答 else iic_sda_out(1);//应答 delayus(2); iic_scl(1);//时钟线拉高,数据发送完成 delayus(2); iic_scl(0);//时钟线拉低,准备下一次数据收发} 获取应答信号
/***************检测应答信号************************返回值:1,接收应答失败 0,接收应答成功************************************************/u8 iic_check_ack(void){ u8 i=0; iic_sda_in_mode();//输入模式 iic_sda_out(1); iic_scl(0); delayus(2); iic_scl(1); while(iic_sda_in) { i++; if(i>=255)return 1;//非应答 } iic_scl(0); return 0;//应答} 发送一字节数据
/***************发送一字节数据***************/void iic_send_byte(u8 txd){ u8 i=0; iic_sda_out_mode();//输出模式 for(i=0;i<8;i++) { iic_scl(0); if(txd&0x80)iic_sda_out(1); else iic_sda_out(1); delayus(2); iic_scl(1); delayus(2); txd<<=1; } iic_scl(0);;//时钟线拉低,准备下一次数据收发} 接收一字节数据
/**********************接收1字节数据****************/u8 iic_readbyte(void){ u8 i=0; u8 rxd=0; iic_sda_in_mode();//输入模式 for(i=0;i<8;i++) { iic_scl(0); delayus(2); iic_scl(1); rxd<<=1; if(iic_sda_in)rxd|=0x01; delayus(2); } iic_scl(1); return rxd;}  

二氧化碳温湿度空气质量监测传感器模块解析
“标准”是物联网发展趋势 也是拦路虎
电容测试仪是什么?有什么样的原理
基于BIM技术的可视化管理系统 数字孪生应用与智慧城市
现代实时示波器技术的发展
STM32开发教程 基于PAJ7620传感器模块的手势识别驱动详解
MCU国产替代之路还有多远?便宜好用是王道
怎样用PC或手机远程控制树莓派
推荐清单:图像识别、机器学习和预测等有关的50多个API
C语言中定义4个内存区间
如何利用Helium构建土壤湿度探头
温湿度采集开关量控制远程4G网关
华为将对FCC禁止美国电信运营商利用补贴购买华为设备的决定提起诉讼
如何选用兆欧表
重庆邮电大学研发第三代半导体功率芯片成功 已进入试用阶段
时间继电器的作用和工作原理
汽车电子的发展对于集成电路有什么影响
车路协同技术的优势、进展和挑战!
代币发售(ICO)难分清?人工智能”火眼金睛”帮你轻松搞定!
清华大学首次实现具有亚1纳米栅极长度的晶体管