感谢EEPW提供的DIY机会,可以跟着大佬一起学习,现将手势翻页笔制作过程简单总结如下。
动手前先把大佬的教学视频认真看了一遍,虽然有些内容比较熟悉,所谓温故而知新嘛。看完教学视频,首先就是按大佬要求,把cubeMX升级到最新版本。
安装完之后重新启动进入,竟然报错:
又以管理员身份重新升级一次,升级成功,我记得以前好像是不需要管理员身份就可以升级的,因为我对那个报错信息提示没有一点印象了。
进入cubeMX开发环境之后就是根据项目需要进行各项配置,时钟,通讯接口,中间件等。
生成代码后进入keil环境,编译,没有任何报错。
将手势传感器和板子连接好,这一步要做下改动,传感器连接线插头是2.0mm规格的,需要改成2.54规格的插头才能顺利插到开发板上,如下图所示:
将程序下载到开发板,先测试下手势传感器的灵敏度,经过一小会的摸索,发现动作要干净利落,不要拖泥带水,容易让传感器误报,一次性完成9个动作。
当然,到这一步只是完成传感器的动作采集,还有很重要的一步,就是如何把采集到的动作转换成电脑可以接受的翻页或其它动作,这就是下面这个函数所要实现的功能:
static VOID usbx_hidkeyboard_thread_entry(ULONG thread_input)
{
/* USER CODE BEGIN app_ux_device_thread_entry */
UX_SLAVE_DEVICE *device;
UX_SLAVE_CLASS_HID_EVENT hid_event;
TX_PARAMETER_NOT_USED(thread_input);
device = &_ux_system_slave->ux_system_slave_device;
ux_utility_memory_set(&hid_event, 0, sizeof(UX_SLAVE_CLASS_HID_EVENT));
while(1)
{
/* Check if the device state already configured */
if((device->ux_slave_device_state == UX_DEVICE_CONFIGURED) && (hid_keyboard != UX_NULL))
{
/* sleep for 10ms */
tx_thread_sleep(MS_TO_TICK(100));
hid_event.ux_device_class_hid_event_length = 8;
hid_event.ux_device_class_hid_event_buffer[0] = 0;
hid_event.ux_device_class_hid_event_buffer[1] = 0;
uint16_t Gesture_Data = getGesture();
if(Gesture_Data != 0)
{
switch (Gesture_Data)
{
case PAJ_UP: hid_event.ux_device_class_hid_event_buffer[2] = 0x4B; break; //Keyboard PageUp
case PAJ_DOWN: hid_event.ux_device_class_hid_event_buffer[2] = 0x4E; break; //Keyboard PageDown
case PAJ_LEFT: hid_event.ux_device_class_hid_event_buffer[2] = 0x50; break; //Keyboard LeftArrow
case PAJ_RIGHT: hid_event.ux_device_class_hid_event_buffer[2] = 0x4F; break; //Keyboard RightArrow
case PAJ_FORWARD: hid_event.ux_device_class_hid_event_buffer[2] = 0x4A; break; //Keyboard Home
case PAJ_BACKWARD: hid_event.ux_device_class_hid_event_buffer[2] = 0x4D; break; //Keyboard End
case PAJ_CLOCKWISE: hid_event.ux_device_class_hid_event_buffer[2] = 0x3E; break; //Keyboard F5
case PAJ_ANTI_CLOCKWISE: hid_event.ux_device_class_hid_event_buffer[2] = 0x29; break; //Keyboard Esc
case PAJ_WAVE: break;
default: break;
}
ux_device_class_hid_event_set(hid_keyboard, &hid_event);
}else
{
hid_event.ux_device_class_hid_event_buffer[2] = 0;
ux_device_class_hid_event_set(hid_keyboard, &hid_event);
}
}else
{
/* sleep for 10ms */
tx_thread_sleep(MS_TO_TICK(10));
}
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}
/* USER CODE END app_ux_device_thread_entry */
}
手势翻页实际效果见下面的视频。
https://www.bilibili.com/video/BV1bqv5eqEPY/
最后感谢参加活动的各位大佬,正是有了你们的辛勤付出,才使得这次DIY圆满成功。