本实验的代码:nucleo-stm32h503rb
无法做出wave手势,如果有盆友做出了这个手势,烦请留下诀窍我再试试!
购买的传感器产品上有一份标签纸:
访问 wiki.seeed.cc 查找资料: Grove - Gesture V1.0 | Seeed Studio Wiki
模组有如下几个特性,但本次只关注其9种手势。
其接口为I2C,模块没有引出中断脚,因此采用轮训的方式读取。
启动STM32CubeMX, 增加I2C的配置:
购买传感器配的线材不适合直接插到板子上,于是剪断后接上杜邦线:
采用硬件I2C,首先验证通讯是否正常,可以读取ID验证:
能正确读取ID,便是通讯正常,配置后便可以读取中断标志寄存器,根据bit置位的情况判断检测到了哪些手势
const char *pGestureStr[] = { "up", "down", "left", "right", "forward", "backward", "clockwise", "count-clockwise", "wave"}; static void _GestureHandler() { uint16_t result = 0; int i = 0; if (bRead(bGestureFd, (uint8_t *)&result, 2) == 2) { for (i = 0; i < (sizeof(pGestureStr) / sizeof(char *)); i++) { if (result & (0x0001 << i)) { b_log(":::%s\r\n", pGestureStr[i]); } } } } int main(void) { .... /* Infinite loop */ /* USER CODE BEGIN WHILE */ bInit(); bSoftPwmStart(&bLedBlink, _LedPwmHandler); bGestureFd = bOpen(bPAJ7620U2, BCORE_FLAG_R); if (bGestureFd < 0) { b_log_e("open fail..\r\n"); } while (1) { bExec(); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ BOS_PERIODIC_TASK(_GestureHandler, 1000); } /* USER CODE END 3 */ }