【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】[soon][第二篇]按键学习分享 ... - HarmonyOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

[文章]

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

声明:关于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.     default:
  31.         break;
  32.     }
  33. }

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:
keyevent_demo.c (3.08 KB)
(下载次数: 0, 2020-11-15 08:47 上传)


附件2:  
keyevent.7z (2.25 KB)
(下载次数: 1, 2020-11-15 08:37 上传)


加上OLED显示的展示效果如下。[media]https://v.youku.com/v_show/id_XNDk2MzU4OTY5Mg==.html[/media]  









回帖(1)

dianzi

2020-11-16 10:15:03
效果可以!

代码请用插入代码哈!
1

更多回帖

×
发帖