查看: 6178|回复: 2

[原创] 【经验分享】基于ble的PPT手势控制

[复制链接]

该用户从未签到

715

主题

6374

帖子

0

超级版主

Rank: 8Rank: 8

积分
25233
最后登录
2025-8-20
发表于 2021-4-19 15:36:27 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-4-19 15:37 编辑

基于ble的手势控制PPT
1 介绍
两块开发板通过ble来传递控制信息,一块开发板连接PAJ7620,通过iic总线提供手势信息,另一块开发板使用ble和USB HID,ble用来接收数据,USBHID则模拟键盘输入从而控制ppt
Untitled.png
图1
2 准备
两块开发板QN908x,手势控制paj7620,IDE使用IAR,使用的例程temperature_sensor,以及temperature_collector,sdk版本是2.2.3

3代码
3.1  temperature_sensor代码的编写
我们要实现iic读取手势信息以及将数据发送。
     iic使用的引脚是PA6和PA7
     将代码中的iic读写代码进行简单封装,创建i2c_operation.c和其对应的头文件。在里面实现iic初始化,以及读写寄存器函数
i2c_read.PNG

图2 读寄存器
i2c_write.PNG
图3 写寄存器

3.1.1 拥有这些函数以后开始编写手势识别的代码,首先添加两个空白文件paj7620.c和paj7620.h

选择bank寄存器区域函数
select_bank.PNG
图4

唤醒paj7620读取设备状态函数
wakeup.PNG
图5

初始化设备
init.PNG
图6

手势测试函数
test.PNG
图7

3.1.2准备好读取设备信息以后,在BleApp_Init函数中初始化iic和paj7620
init_i2c_paj.PNG
图8

原则上我们需要为PAJ设备创建一个自定义的服务,但是我们节省一下,替换例程中的温度数据作为我们手势控制的数据。如果要创建自定义服务参考该链接。custom profile

3.1.3创建一个定时器,这个定时器定时发送手势数据。
在temerature_sensor.c文件中,
定义定时器ID,statictmrTimerID_t dataTimerId;
分配定时器dataTimerId = TMR_AllocateTimer();
定义定时器的回调函数。
callback.PNG
                                          图9
启动定时器当链接成功以后
start_timer.PNG
                                   图10
将低功耗关闭,#define cPWR_UsePowerDownMode 0
这样服务器端代码就完成编写。
3.2 temperature_collector代码编写
  在这里最重要的是将USB HID移植进这里。我们使用的usb例程是usb键盘鼠标的例程。

3.2.1 把例程下的osa,usb文件夹加入工程目录,并且按照原例程的文件结构,将文件拷贝到对应文件夹。
usb_file_dir.PNG
                     图11
3.2.2 完成以后添加头文件目录
include_file.PNG
                                          图12

同时在该选项卡里,添加两个宏定义
USB_STACK_FREERTOS_HEAP_SIZE=16384
USB_STACK_FREERTOS

3.2.3 usb例程本身时候main函数和初始化的我们需要进行修改,在composite.c文件中有main函数,我们做如图修改。
usb_main.PNG
                     图13
它调用了APP_task,这个函数也做修改
app_task.PNG
                                   图14
3.2.4找到hid_mouse.c,将USB_DeviceHidMouseAction函数注释掉
找到hid_keyboard.h,定义手势信息
macro_gesture.PNG
                                图15
找到hid_keyboard.c函数,我们需要修改USB_DeviceHidKeyboardAction所要执行的任务。
改成如图
keyboardAction.PNG
                                                 图16


其中还要实现如下函数,当检测上挥手势就播放上一张ppt,下挥就是下一张ppt,左挥退出ppt,向前则播放ppt
sendGesture.PNG
                                                 图17
这里面还引用了一个外部变量gesture_from_server,这个变量定义
在temperature_colloctor.c中,用来获取手势信息。

3.2.5完成以上以后,我们到BleApp_StateMachineHandler函数中,在case为mAppRunning_c中调用usb_main来初始化USB HID
usb_main_run.PNG
                                                 图18
3.2.6 最后在BleApp_PrintTemperature中,将收到的数据放到gesture_from_server里
data_save.PNG
                                                        图19
效果可以去该网站观看,在页末 https://community.nxp.com/t5/Wir ... on-ble/ta-p/1264102





回复

使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    103

    主题

    869

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4346
    最后登录
    2025-8-14
    发表于 2021-4-19 22:47:47 | 显示全部楼层
    PPT翻页器真的有人玩啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    715

    主题

    6374

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25233
    最后登录
    2025-8-20
     楼主| 发表于 2021-4-20 10:19:15 | 显示全部楼层
    mgn 发表于 2021-4-19 22:47
    PPT翻页器真的有人玩啊

    其实就是看了你的贴子,然后就寻思整整,结合一下ble的无线玩玩
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-21 11:41 , Processed in 0.082696 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表