哈喽,大家好。
在蓝牙音箱项目中,我们有时需要用到红外遥控功能。这次我将为大家带来中科蓝讯 AB5602B 红外功能的介绍。本次实验使用到的红外接收器是 VS 1838B。下面我首先介绍 VS 1838B 与 AB5602B电路连接,接着介绍如何在 SDK 中修改相应程序实现目标按键功能。
一、VS 1838B 与 AB5602B电路连接
1、电路连接
本实验将 AB5602B 的 PF2 脚连接到红外接收器 VS 1838B 的信号输出脚,在实际项目中也可以改用蓝牙芯片的其他 GPIO。
2、本实验使用到的遥控器
二、程序实现
1、打开 IRRX 硬件模块
2、初始化 PF2
3、读取红外遥控器地址码和各红外按键键值
在打开 IRRX 硬件模块和初始化 PF2 后,在 SDK 中只需要在 get_irkey() 函数中打开相应的打印即可正确上电,即可读取红外遥控器地址码和各红外按键键值:
当按下遥控器的任意按键即可在 Downloader 中看到如下打印:
b7a0:红外遥控器地址码;0af5:其中一个按键的键值。同理,要得到其他按键键值,按下相应按键,查看打印即可。
按键键值(不同的遥控器键值不同)如下:
16e9 50af 54ab 10ef 0af5 14eb 43bc 53ac 17e8 5fa0 57a8
4、按键队列消息的生成
红外遥控按键也和普通按键一样是为了实现播放暂停等功能,两者实现的逻辑是类似的,都是把采集到的键值在 bsp_key_scan() 函数中处理后对应上按键队列消息,最终被队列消息函数处理。下面介绍如何生成按键队列消息。
① 定义当前使用的红外遥控器的宏开关
② 定义一个数组存放按键队列消息宏
红外遥控按键键值 & 0xff 后减去 0xa0 做按键队列消息数组的元素下标每个下标对应一个按键队列消息:
49 0f 0b 4f 55 4b 1c 0c 48 0 08
数组元素即是按键队列消息宏,这些宏是 SDK 在 bsp_key.h 文件中已经定义好的(更详细的按键功能介绍请看大大通博文《中科蓝讯 SDK 开发——SDK按键功能简析》)。
SDK 未定好的,也可以自定义数组元素的按键队列消息宏:
在 bsp_key.h 中,做了普通按键(按键队列信息宏)的定义,可以支持短按,长按,双击等。查看 bsp_key.h 文件可知,KEY_28、KEY_29 尚未被 SDK 使用,则可用来定义我们所需的按键队列消息宏。
KEY_HDMI、KEY_LO_OP 就是自定义的按键队列消息宏,分别用在按键队列消息数组的第 0 个元素和第 8 个元素中;
定义按键短按队列消息宏:
注意,前面只是做了普通按键定义,若最终要队列消息处理函数识别为红外遥控器按键短按(或单击)按键队列消息,则还需或上宏 KEY_SHORT_UP。
③ 按键队列信息上传
采集到的键值就是通过数组 ir_tbl_FF00[] 与 按键队列消息宏对应上,get_irkey() 函数中的 key_val 获得按键队列消息宏后,最终上传到bsp_key_scan() 函数处理,可被队列消息处理函数识别为红外遥控器短按按键。
④ 添加按键短按队列消息宏到消息处理函数
注意,队列消息处理函数可以不是 func_bt_message() 函数,也可以是 func_message() 等其他队列消息处理函数。按下红外遥控器按键,查看打印即可知,红外按键功能已经添加成功。
AB5602B 红外功能的内容就介绍到这里,欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。
参考文档:
1、中科蓝讯蓝皮书
2、AB5602B DataSheet.pdf
评论