上一篇帖子
《实现物理按键的“长按事件”(按键通用框架 V0.0.2)》
中开源了 DTButton – V0.0.2 的完整代码,这个版本的实现完全封装了 Hi3861 的原生 SDK,实现了开箱即用,所见即所得。
👇
扫码关注
HarmonyOS技术社区
👇
专注开源技术,共建鸿蒙生态
然而,相信大家也发现了一个有趣的现象:S1,S2 和 User 三个物理按键同时对应了 GPIO_5 端口。
程序中将 GPIO_5 作为按键端口连接使用后,无论按下 S1,S2,User 中的哪一个都会触发事件,就好像“同一个 GPIO 按键有了3个不同分身”。
为什么会这样呢?因为在硬件连接上,这三个物理按键确实共用了 GPIO_5 ,所以才有了这个问题。
就目前来看,想要区分 S1,S2 和 User 只能从电气特性来入手了,根据上图中黄色下划线处的提示翻看原理图
《HiSpark_WiFi_IoT_OLED_VER.A》
,可以发现 S1 和 S2 的连接如下:
明显可知:
S1 和 S2 按下之后红框位置 Switch 处的电压肯定会发生变化,并且 S1 按下后的电压与 S2 按下后的电压不同。
所以,可以考虑通过检测电压的方式来判断究竟哪个键被按下了!!!
看起来是不是有点疯狂!然而,确实可以这么解决问题。
通过实验发现这 3 个物理按键按下后的电压范围大致如下:
并且,通过查阅文档
《Hi3861V100/Hi3861LV100 设备驱动 开发指南》
中的第 5 章可以找到读取 ADC 值的 API 接口,以及 ADC 值到电压值的转换公式: