HiHope开发者社区
直播中

HiHope

4年用户 809经验值
擅长:嵌入式技术
私信 关注
[经验]

【HarmonyOS HiSpark Wi-Fi IoT套件】鸿蒙HiSpark Wi-Fi IoT开发套件试用05(按键)

本帖最后由 l_xy 于 2020-11-2 18:47 编辑

提示:此案例为单主板案例,主板不要放到底板上。

按键点亮主板的板载LED灯的步骤如下:
1. 在applicationssamplewifi-iotapp下新建文件夹“key_demo”,在key_demo文件夹下新建BUILD.gn和key_demo.c 两个文件,具体目录结构如下:
.
└── applications
    └── sample
        └── wifi-iot
            └── app
                │── key_demo
                │  │── BUILD.gn
                │  └── key_demo.c
                └── BUILD.gn

2. applicationssamplewifi-iotappkey_demo下的BUILD.gn代码如下:
  1. static_library("key_demo") {
  2.     sources = [
  3.         "key_demo.c"
  4.     ]


  5.     include_dirs = [
  6.         "//utils/native/lite/include",
  7.         "//kernel/liteos_m/components/cmsis/2.0",
  8.         "//base/iot_hardware/interfaces/kits/wifiiot_lite"
  9.     ]
  10. }


3. applicationssamplewifi-iotappkey_demo下的key_demo.c代码如下:

  1. #include
  2. #include "stdio.h"
  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. #include "wifiiot_gpio.h"
  6. #include "wifiiot_gpio_ex.h"
  7. #include
  8. #include
  9. #include
  10. #include

  11. static int volatile BtnPressed = 0;
  12. static void OnButtonPressed(char* arg);
  13. static void OnButtonReleased(char* arg);

  14. static void OnButtonPressed(char* arg)
  15. {
  16.     (void)arg;
  17.     printf("[Key_demo] OnButtonPressed()n");
  18.     BtnPressed = 1;
  19.     GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,OnButtonReleased, NULL);
  20. }

  21. static void OnButtonReleased(char* arg)
  22. {
  23.     (void)arg;
  24.     printf("[Key_demo] OnButtonReleased()n");
  25.     BtnPressed = 0;
  26.     GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW,OnButtonPressed, NULL);
  27. }

  28. static void* Key_Task(const char* arg)
  29. {
  30.     (void)arg;
  31.     while(1)
  32.     {
  33.         if( BtnPressed )
  34.         {
  35.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  36.         }
  37.         else
  38.         {
  39.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  40.         }           
  41.     }
  42.     return NULL;
  43. }


  44. static void key_demo(void)
  45. {
  46.     osThreadAttr_t attr = {0};
  47.     GpioInit();
  48.     //复用引脚为 GPIO
  49.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
  50.     //设置为输出
  51.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
  52.     //复用引脚为 GPIO
  53.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
  54.     //设置为输入
  55.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
  56.     IoSetPull(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_PULL_UP);
  57.     GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW,OnButtonPressed, NULL);
  58.     attr.name = "Key_Task";
  59.     attr.attr_bits = 0U;
  60.     attr.cb_mem = NULL;
  61.     attr.cb_size = 0U;
  62.     attr.stack_mem = NULL;
  63.     attr.stack_size = 1024;
  64.     attr.priority = osPriorityNormal;

  65.     if (osThreadNew((osThreadFunc_t)Key_Task, NULL, &attr) == NULL)
  66.     {
  67.         printf("[key_demo] Falied to create KedTask!n");
  68.     }
  69. }

  70. SYS_RUN(key_demo);

保存,烧录重启后,按下主板上USER按钮点亮LED,释放按钮LED灯熄灭。

4. 不要忘修改applicationssamplewifi-iotapp下的BUILD.gn代码
  1. import("//build/lite/config/component/lite_component.gni")

  2. lite_component("app") {
  3.     features = [
  4.         "key_demo:key_demo",
  5.     ]
  6. }


注意:此案例为单主板案例,主板不要放到底板上。

文章来自51CTO社区

更多回帖

发帖
×
20
完善资料,
赚取积分