我们通过基础阶段以及提升阶段的学习,对开发板以及重要模块的使用和功能实现有了基本的认识,接下来就通过这两部分学习的知识实现我们的本次的目标——手势翻页笔。本次选用了一个蜂鸣器作为扩展器件实际上就可以用到手势翻页笔中,每次检测的有效手势后响一下。
一、使用器件
STM32H503开发板;
PAJ7620;
蜂鸣器模块;
导线若干;
二、实现功能
通过有效手势的检测进行翻页控制,即实现手势翻页笔。有效手势包括“上下左右”共4中,PAJ7620模块可以实现9中手势的检测,我们取这4个最常用的作为有效手势,实现的功能为Pgup(下左)和PgDn(上右),同时有效手势执行的同时进行蜂鸣器的声音提示。
三、实现过程
在初始化完成后,主要通过IIC接口循环采集PAJ7620模块手势判断情况,然后通过开发板的USB接口实现数据传输,PC对开发板的识别为keyboard。
四、主要代码
我们在第一部分以及第二部分的学习已经实现了基础部分的代码,本章节主要是在前两部分学习的基础上实现手势与USB数据传输的关联,扩展出Pgup和PgDn的按键协议码(第二部分只有字母“a”)。
我们把GetKeyboardData(UX_SLAVE_CLASS_HID_EVENT *hid_event)进行一下变化,增加一个变量:
void GetKeyboardData(UX_SLAVE_CLASS_HID_EVENT *hid_event,uint8_t key) { uint32_t i; keyboard[2] = key; hid_event->ux_device_class_hid_event_length = 8; for(i=0;i<8;i++) { hid_event->ux_device_class_hid_event_buffer[i] = keyboard[i]; } }然后是采集采集状态中添加状态位(包括蜂鸣器的处理):
if(Buzzer_flag == 1) { Buzzer_cnt++; if(Buzzer_cnt > 100) { Buzzer_flag = 0; Buzzer_cnt = 0; HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET); } } tx_app_cnt++; if(tx_app_cnt>=100) { tx_app_cnt = 0; if(gesture_init_flag == 0) { ret = PAJ7620_get_gesture(&gesture); if (ret == PAJ7620_EOK) { switch (gesture) { case PAJ7620_GESTURE_LEFT: { PAJ7620_key_on = 1; Buzzer_flag = 1; HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET); PAJ7620_key_flag = PAJ7620_LEFT_FLAG; printf("Gesture: Left\r\n"); break; } case PAJ7620_GESTURE_RIGHT: { PAJ7620_key_on = 1; Buzzer_flag = 1; HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET); PAJ7620_key_flag = PAJ7620_RIGHT_FLAG; printf("Gesture: Right\r\n"); break; } case PAJ7620_GESTURE_UP: { PAJ7620_key_on = 1; Buzzer_flag = 1; HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET); PAJ7620_key_flag = PAJ7620_UP_FLAG; printf("Gesture: Up\r\n"); break; } case PAJ7620_GESTURE_DOWN: { PAJ7620_key_on = 1; Buzzer_flag = 1; HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET); PAJ7620_key_flag = PAJ7620_DOWN_FLAG; printf("Gesture: Down\r\n"); break; } default: { break; } } } } }最后是发现有效手势的处理:
if(PAJ7620_key_on == 1) { if(PAJ7620_key_flag == PAJ7620_LEFT_FLAG || PAJ7620_key_flag == PAJ7620_DOWN_FLAG) { GetKeyboardData(&hid_event,0x4B); ux_device_class_hid_event_set(hid_keyboard, &hid_event); HAL_Delay(20); ClearKeyboardData(&hid_event); ux_device_class_hid_event_set(hid_keyboard, &hid_event); } if(PAJ7620_key_flag == PAJ7620_RIGHT_FLAG || PAJ7620_key_flag == PAJ7620_UP_FLAG) { GetKeyboardData(&hid_event,0x4E); ux_device_class_hid_event_set(hid_keyboard, &hid_event); HAL_Delay(20); ClearKeyboardData(&hid_event); ux_device_class_hid_event_set(hid_keyboard, &hid_event); } PAJ7620_key_on = 0; PAJ7620_key_flag = 0; }五、效果视频
【EEPWDIY活动成果视频】 https://www.bilibili.com/video/BV12n4y1Q7X2/?share_source=copy_web&vd_source=1a9d212763ed1cd1e393681740edda64