本次实用的是PAJ7620U2 手势传感器 Grove 平台评估扩展板,如下图:

PAJ7620一款光学数组式传感器,内置光源和环境光抑制滤波器集成的 LED,镜头和手势感测器在一个小的立方体模组,能在黑暗或低光环境下工作。同时传感器内置手势识别,支持 9个手势类型和输出的手势中断和结果,还提供接近检测功能,可用于感测物体接近或离开。工作原理是通过内部LED驱动器,驱动红外LED向外发射红外信号,当传感器阵列在有效地距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据地获取,获取数据会存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中,用户可根据I2C接口对原始数据和手势数据地结果进行读取。

其中I2C_SCL和 I2C_SDA是连接 MCU的 IIC接口, 本模块没有INT引脚。
在PAJ7620内部有两个BANK 寄存器区域,分别是BANK0,BANK1。进入BANK0区域,往传感器0XEF地址写0X00。进入BANK1区域,往传感器0XEF地址写0x01。这方面的驱动文件还是通多的,这里我们通过改写其中一个驱动文件进行传感器的驱动。
在初始化部分对器件进行基本配置:
IIC1_port_Init();
/* 初始化PAJ7620模块 */
ret = PAJ7620_init();
if (ret != 0)
{
printf("PAJ7620 init failed!\r\n");
while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
delay_ms(1000);
}
}
/* 配置ATK-MS7620模块为手势检测模式 */
ret = PAJ7620_mode_config(PAJ7620_MODE_GESTURE);
if (ret != 0)
{
printf("PAJ7620 config failed!\r\n");
while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
delay_ms(1000);
}
}
printf("PAJ7620 config succedded!\r\n");在tx_app_thread_entry()中添加定时轮询检测程序:
time_cnt++;
if(time_cnt >= 200)
{
time_cnt = 0;
/* 获取手势 */
ret = PAJ7620_get_gesture(&gesture);
if (ret == PAJ7620_EOK)
{
switch (gesture)
{
case PAJ7620_GESTURE_UP:
{
printf("Gesture: Up\r\n");
break;
}
case PAJ7620_GESTURE_DOWN:
{
printf("Gesture: Down\r\n");
break;
}
case PAJ7620_GESTURE_LEFT:
{
printf("Gesture: Left\r\n");
break;
}
case PAJ7620_GESTURE_RIGHT:
{
printf("Gesture: Right\r\n");
break;
}
case PAJ7620_GESTURE_FORWARD:
{
printf("Gesture: Forward\r\n");
break;
}
case PAJ7620_GESTURE_BACKWARD:
{
printf("Gesture: Backward\r\n");
break;
}
case PAJ7620_GESTURE_CLOCKWISE:
{
printf("Gesture: Clockwise\r\n");
break;
}
case PAJ7620_GESTURE_ANTICLOCKWISE:
{
printf("Gesture: Anticlockwise\r\n");
break;
}
case PAJ7620_GESTURE_WAVE:
{
printf("Gesture: Wave\r\n");
break;
}
default:
{
break;
}
}
}下面我们就进行具体功能的测试,检测到对应的手势后通过串口进行报告:

我要赚赏金
