0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】更加优雅的使用OLED板的按键

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-04 16:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:杜潇泊, 帖子地址:https://bbs.elecfans.com/jishu_2009065_1_1.html

开发板OLED板下面有两个按键,上手开发板第一件事肯定是调试输入输出手段。串口几乎不需要调试什么,上手就能用。这个按键就成了第一个下手的目标。
起初没把这俩按键当回事,以为只是直接接在GPIO上的,顶多设置一下触发点平就行了。拿到原理图才发现,这俩按键居然是这样接的。
180048xlfdlcgqu5ffquq4.png
也就是说必须使用ADC才能确认按下的是哪一个键。开发板官方给出了OLED板的demo,其中也包含了对屏幕下面两个按键的使用。但是查看代码发现,是使用死循环不断进行ADC转换来捕捉按键操作的。这样做会导致系统功耗上升,并且会持续占用CPU

其实我们可以更加优雅的使用这俩按键,使用按键终端触发按键事件,再由按键线程完成按键事件的处理。这样做在平时不按按键时,系统CPU处于IDLE状态、ADC也处于停止状态。功耗、CPU都能降下来。甚至你可以配置进入低功耗模式。

代码不多
// 全局信号量,记录按键事件
osSemaphoreId_t g_keySem;
void KeyPressed(char *arg) {
(void)arg;
//释放一个信号量,注意这里是中断上下文,最好别调用太多东西
osSemaphoreRelease(g_keySem);
}
void handlePressKeyTask(void* arg) {
(void)arg;
while(true) {
// 这里去消费按键事件
osStatus_t status = osSemaphoreAcquire(g_keySem,65535);
if(status != 0) {
continue;
}
while(true) {
unsigned short data = 0;
AdcRead(ANALOG_KEY_CHAN_NAME, &data, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0);
float voltage = (float)data * 1.8 * 4 / 4096;
if(voltage < 0.8f) {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Key1 Pressed!", Font_7x10, White);
ssd1306_UpdateScreen();
} else if(voltage < 2.0f) {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Key2 Pressed!", Font_7x10, White);
ssd1306_UpdateScreen();
} else {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Released!", Font_7x10, White);
ssd1306_UpdateScreen();
break;
}
}
}
}
void initKey() {
// 端口设置为GPIO
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
// 设置为输入
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
// 设置在下降沿中断。(其实我想设置下降沿和上升沿中断的,然而接口居然不允许)
osSemaphoreAttr_t semAttr = {
.name = "KeyPressSemi",
.attr_bits = 0,
.cb_mem = NULL,
.cb_size = 0
};
g_keySem = osSemaphoreNew(8, 0, &semAttr);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, KeyPressed, NULL);
// 这里启动一个task处理按键事件
osThreadAttr_t attr;
attr.name = "KeyHandleTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 2048;
attr.priority = osPriorityNormal;
if (osThreadNew(handlePressKeyTask, NULL, &attr) == NULL) {
printf("[%s]Falied to create KeyHandleTask!n", __func__);
}
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    15

    文章

    2379

    浏览量

    128891
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35571
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    7686
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ‌Microchip WILCS02 Wi-Fi®模块开发技术解析与应用指南

    Microchip Technology WILCS02 Wi-Fi^®^ 链路控制器SD是一款安全数字 (SD) 卡接口,支持2.4GHz IEEE^®^ 802.11 b/g/n标准。该
    的头像 发表于 10-06 15:54 962次阅读
    ‌Microchip WILCS02 <b class='flag-5'>Wi-Fi</b>®模块开发<b class='flag-5'>板</b>技术解析与应用指南

    浅谈Wi-Fi 6E与Wi-Fi 7的关键器件——BAW滤波器新技术

    作者: Qorvo 亚太区无线连接事业部高级行销经理林健富   2020年1月,Wi-Fi联盟正式宣布开放6GHz频段(5925MHz-7125MHz),并将其命名为Wi-Fi 6E。2020年4月
    发表于 09-19 18:29 1320次阅读
    浅谈<b class='flag-5'>Wi-Fi</b> 6E与<b class='flag-5'>Wi-Fi</b> 7的关键器件——BAW滤波器新技术

    如何在 NuMaker-IoT-M467 上使用 Arduino IDE 控制 Wi-Fi 模块?

    在NuMaker开发上,有一个ESP-12F Wi-Fi模块;但是,Arduino IDE 中的 NuMaker UNO 包不提供该模块的相关控制。如果您希望在 Arduino IDE 中控制此模块,您应该如何进行?
    发表于 09-04 08:28

    如何更新 NuMaker IoT 上的 Wi-Fi 模块固件?

    更新 NuMaker IoT 上的 Wi-Fi 模块固件
    发表于 09-04 08:28

    LitePoint Wi-Fi测试软件减轻客户设计负担

    Wi-Fi 7于一年多前获得Wi-Fi联盟认证以来,作为最新一代通信技术,Wi-Fi正逐步成为用户实现无所不在无线连接的新选择。随着每一代Wi-Fi信号复杂性的提升,建议将硬件测试纳
    的头像 发表于 08-06 15:34 894次阅读
    LitePoint <b class='flag-5'>Wi-Fi</b>测试软件减轻客户设计负担

    如何选择合适的芯科科技Wi-Fi开发

    您正在寻找适用于超低功耗物联网应用项目的Wi-Fi 开发吗?本文将介绍Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗蓝牙5.4解决方案的Wi-Fi
    的头像 发表于 07-09 09:15 2273次阅读

    Wi-Fi 8:开启极高可靠性 (UHR) 连接的新纪元——1

    英国作家狄更斯在《双城记》的开头写道:“这是最好的时代,也是最坏的时代。” 这句话若套用在现今Wi-Fi 的市场现状,何尝不是惊人的相似? 怎么说呢?Wi-Fi 从被发明至今已经经过了20多年的迭代
    发表于 06-13 11:09

    Wi-Fi HaLow如何突破传统Wi-Fi性能瓶颈?

    视频推荐在万物互联的时代,传统Wi-Fi在覆盖范围、功耗、连接数上渐显不足。而Wi-FiHaLow的诞生,正在用黑科技打破传统Wi-Fi的性能瓶颈!今天,我们一起来探究Wi-FiHaL
    的头像 发表于 04-22 11:38 729次阅读
    <b class='flag-5'>Wi-Fi</b> HaLow如何突破传统<b class='flag-5'>Wi-Fi</b>性能瓶颈?

    基于 Wi-Fi 的定位服务

    以下捕获使用 location_wifi_get 函数请求 Wi-Fi 定位服务。该事件的总功耗为 125.85mC,日志显示精确度为 30.0m。 Got location: method
    发表于 04-17 15:16

    nRF Cloud Wi-Fi 定位服务

    、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通过利用 nRF Cloud 的优化定位算法,基于 Nordic SoC 和 模组的产品可在定位用例
    发表于 04-17 15:07

    Wi-Fi 定位服务

    Wi-Fi 是一种著名的无线网络技术,用于设备的局域网和互联网接入。Wi-Fi 通过 Wi-Fi 网络为家庭、办公室和学校等环境提供便捷的无线互联网接入服务。 Wi-Fi 定位是一种
    发表于 04-17 15:01

    如何为驱动添加Wi-Fi功能

    为驱动添加Wi-Fi功能,可以通过硬件和软件两种途径实现。
    的头像 发表于 04-16 14:22 763次阅读

    华为海思正式进入Wi-Fi FEM赛道?

    大家都知道了,2018年11 月离开锐迪科(RDA),前往福建晋江创立三伍微,专注于Wi-Fi射频前端芯片,从路由器Wi-Fi FEM,到手机Wi-Fi FEM,再到IoT FEM全覆
    发表于 12-11 17:42

    摩尔斯微电子发布Wi-Fi HaLow评估套件,加速物联网开发

    近日,全球领先的Wi-Fi HaLow解决方案提供商摩尔斯微电子正式推出一款开创性的评估套件——MM6108-EKH05。这款完全整合的开发平台,旨在推动各行业物联网解决方案的快速发展
    的头像 发表于 12-11 13:40 1052次阅读

    Wi-Fi 4到Wi-Fi 7:网速飙升40倍的无线革命

    1 Wi-Fi技术的快速发展 每一代新的Wi-Fi协议发布,都会带来更高的无线速率。   从Wi-Fi 4到Wi-Fi 7:无线网络技术显著提升,实现了网速的巨大飞跃。    
    的头像 发表于 12-09 10:10 1604次阅读
    从<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:网速飙升40倍的无线革命