【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】[soon][第二篇]按键学习分享

描述

本文来源电子发烧友社区,作者:soon顺soon, 帖子地址:https://bbs.elecfans.com/jishu_2008614_1_1.html

声明:关于Wifi-IoT的按键部分,以下两片文章做了很好的分享,本文基于对以下两篇文章的学习修改完成的,感谢原作者
@狄泰软件学院客服 的分享,如本文中有任何不妥请联系修改。先附上原文链接
tang实现物理按键的“长按事件”(按键通用框架 V0.0.2)
https://bbs.elecfans.com/jishu_2006297_1_1.html

Delphi Tang实现S1,S2,User三个物理按键的独立事件-上(解决思路分析)
https://bbs.elecfans.com/jishu_2007516_1_1.html


相关的理论知识以上两篇已经写得很好了,本人在其基础上进行了代码整合按照自己的需求修改代码,实现了四个物理按键USER(GPIO5)、显示板S1和S2、智能红绿灯板S1的按下、长按、释放事件。主要代码如附件1  使用方式请参考附件2
大概步骤如下
1.导入头文件,具体路径依据你放的位置而定,相同目录下使用
#include "KeyEvent.h"
2.回调函数以及按键功能的定义

  1. static void KeyEvent_Callback(KEY_ID_TYPE keyid, KEY_EVENT_TYPE event)
  2. {
  3.     printf("[soon] KeyEvent_Callback() : keyid=%d event= %dn", (int)keyid, (int)event);
  4.     switch (keyid)
  5.     {
  6.     case KEY_ID_GPIO8:
  7.          printf("[soon] KEY_ID_USERn");
  8.         if( event == KEY_EVENT_PRESSED )      { /*  按下事件处理代码 */ }
  9.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  长按事件处理代码 */ }
  10.         if( event == KEY_EVENT_RELEESED )     { /*  释放事件处理代码 */ }
  11.         break;
  12.     case KEY_ID_USER:
  13.          printf("[soon] KEY_ID_USERn");
  14.         if( event == KEY_EVENT_PRESSED )      { /*  按下事件处理代码 */ }
  15.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  长按事件处理代码 */ }
  16.         if( event == KEY_EVENT_RELEESED )     { /*  释放事件处理代码 */ }
  17.         break;
  18.     case KEY_ID_S1:
  19.          printf("[soon] KEY_ID_S1n");
  20.         if( event == KEY_EVENT_PRESSED )      { /*  按下事件处理代码 */ }
  21.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  长按事件处理代码 */ }
  22.         if( event == KEY_EVENT_RELEESED )     { /*  释放事件处理代码 */ }
  23.         break;
  24.     case KEY_ID_S2:
  25.          printf("[soon] KEY_ID_S2n");
  26.         if( event == KEY_EVENT_PRESSED )      { /*  按下事件处理代码 */ }
  27.         if( event == KEY_EVENT_LONG_PRESSED ) { /*  长按事件处理代码 */ }
  28.         if( event == KEY_EVENT_RELEESED )     { /*  释放事件处理代码 */ }
  29.         break;
  30.  
  31.     default:
  32.         break;
  33.     }
  34. }
复制代码

3.在task中调用,对按键进行初始化和配置,相关API如下。

  1. // 初始化按键事件处理
  2. KeyEvent_Init();
  3. /* 设置GPIO_8按键的回调函数*/
  4. KeyEvent_Connect("GPIO_8", KeyEvent_Callback, KEY_EVENT_PRESSED | KEY_EVENT_LONG_PRESSED | KEY_EVENT_RELEESED);
  5. /* 设置GPIO_5按键的回调函数*/
  6. KeyEvent_Connect("GPIO_5", KeyEvent_Callback, KEY_EVENT_PRESSED | KEY_EVENT_LONG_PRESSED | KEY_EVENT_RELEESED);
复制代码

附件1:
HarmonyOS keyevent_demo.c 

附件2:  
HarmonyOS keyevent.7z 

下载文件见作者原帖子内容。

加上OLED显示的展示效果如下。https://v.youku.com/v_show/id_XNDk2MzU4OTY5Mg==.html  
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分