中科蓝讯 SDK 开发 PWRKEY 功能

    哈喽,大家好。

    在中科蓝讯 SDK 开发的过程中,我们经常需要进行按键功能的开发,《中科蓝讯 SDK 开发——SDK按键功能简析》博文已经将按键的原理讲得很清楚,今天将从应用的角度来介绍 PWRKEY 按键功能。

1、PWRKEY 原理图

    

    PWRKEY 串联不同阻值的电阻(在 2 中介绍如何选取具体阻值),当按键按下 PWRKEY 将采集到不同的值,以此判断是哪一个按键按下。若需要 PWRKEY 实现开关机功能,则不需要串联电阻或串联 0R 电阻。

2、PWRKEY 可以挂载的按键数量和串联电阻的阻值选取

    

    据 SDK 中 PWRKEY 的数组 pwrkey_table[6] 可知,PWRKEY 最多可以挂载 5 个按键,串联电阻的阻值如图中注释,分别为 0Ω、1.5k、3.9k、15k、33k。

这里将产生一个问题,1 中原理图中 PWRKEY 串联电阻的阻值是否不正确?我们可以先了解该数组的含义和结合函数 static u8 get_pwrkey(void) 即可得出该问题的答案。

    以元素 {0x0A, KEY_PLAY_PWR_USER_DEF} 为例,0x0A 是 PWRKEY 通过 ADC 采集电压之后转化所得的值,KEY_PLAY_PWR_USER_DEF 是单击 1 中原理图 s2 时上传到函数 static u8
get_pwrkey(void) 中的值(可自定义参考 4),由下图:

    

    可知,0x0A 只是一个范围的临界值,当 PWRKEY 采集到的值小于等于 0x0A 时,上传到 static u8 get_pwrkey(void) 中的值就是 KEY_PLAY_PWR_USER_DEF,因此 1 中串联电阻的阻值可以根据 SDK
中推荐的阻值有所偏差。

3、PWRKEY 按键处理

    

    KEY_PLAY_PWR_USER_DEF 上传到 static u8 get_pwrkey(void) 中处理,还不能最终被上传到 void func_bt_message(u16 msg) 等函数中作为按键消息。例如,若想单击 1 中 s2 后在 void func_bt_message(u16 msg) 函数中产生一个 case,则需要将 KEY_PLAY_PWR_USER_DEF 或上 KEY_SHORT_UP得到可以上传到 void func_bt_message(u16 msg) 函数中的宏 KU_PLAY_PWR_USER_DEF,SDK 把 KU_PLAY_PWR_USER_DEF 识别为单击操作。双击或三击操作同理。

    KEY_SHORT、KEY_SHORT_UP、KEY_LONG_UP 、KEY_HOLD 等这些宏都分别对应了不同的的按键操作,大家可自行在相应的按键消息下打印信息探索。

4、添加自定义按键宏

    在bsp_key.h 文件中,有说明:普通按键定义,可以支持短按,长按,双击等;范围是 0 ~ 0xdf。若要自定义按键,这个按键值只要是 0 ~ 0xdf 范围内且未被使用的即可。如下便定义好按键单击宏:



    

    接着需要把 KEY_DIY 放到 pwrkey_table[6] 需要自定义按键的数组元素中即可:

    

    最后把 KU_DIY 放到消息处理函数中即可,如下放到 void func_bt_message(u16 msg) 函数中:

    

    单击 1 中 的 s3 后可在 Downloader 中观察打印情况,便可以确定自定义按键是否成功。

5、setting 工具 PWRKEY 按键定制

    首先要开启 PWRKEY:

    

    注意,只要使用到 PWRKEY 这里都要是打开状态。

    

    注意,1 中的 s2、s3、s4 分别对应按键 1、按键 4、按键 5,这是由它们串联的电阻决定的,并且setting 工具中定制按键功能之后,SDK 中pwrkey_table[6] 数组定义的按键功能将失效。

    PWRKEY 按键功能的内容就介绍到这里,ADKEY 的功能也是相似的,可以相互借鉴参考,有错误欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。

参考文档:

1、中科蓝讯蓝皮书

2、BT892X DataSheet.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论