[文章]Hi3861板LED仿空调风速控制

阅读量0
0
4
       对于刚接触Hi3861 HarmonyOS device小伙子不知如何开始编写应用程序,现在我为编写一些简单的入门实战范例,并附上代码和录屏,让大家快速上手HarmonyOS IOT device  应用开发;
  1.   软件开发环境参考华为的官方文档:
       https://device.harmonyos.com/cn/docs/start/introduce/oem_start_guide-0000001054913231

  2.    Hi3861板LED仿空调风速控制程序
  1. /*
  2.   * HiSpark_WiFi_IoT_SSL板
  3.   * GPIO_8  Key
  4.   * GPIO_10 红色LED,高电平点亮
  5.   * GPIO_12 黄色LED,高电平点亮
  6.   * GPIO_11 绿色LED,高电平点亮
  7. */

  8. #include <stdio.h>
  9. #include <unistd.h>

  10. #include "ohos_init.h"
  11. #include "cmsis_os2.h"
  12. #include "wifiiot_gpio.h"
  13. #include "wifiiot_gpio_ex.h"
  14. #include "wifiiot_watchdog.h"
  15. //#include "hi_boot_err.h"

  16. #define R_LED WIFI_IOT_GPIO_IDX_10
  17. #define Y_LED WIFI_IOT_GPIO_IDX_12
  18. #define G_LED WIFI_IOT_GPIO_IDX_11

  19. static int g_keyState = 0, g_keyState_b = 0, g_keyDelay = 0;
  20. static int g_ledStatus = 0;

  21. static void *ledTask(const char *arg)
  22. {

  23.     int delay = 0;
  24.     (void)arg;

  25.     printf("ledTask start!rn");

  26.     while (1)
  27.     {

  28.         if (g_keyState_b != g_keyState)
  29.         {
  30.             switch (g_keyState)
  31.             {
  32.             case 0:
  33.             { //空调送风关闭

  34.                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);
  35.                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE0);
  36.                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE0);
  37.             }
  38.             break;
  39.             case 1:
  40.             { //空调手动送风--1档
  41.                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);
  42.                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE0);
  43.                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);
  44.             }
  45.             break;
  46.             case 2:
  47.             { //空调手动送风--2档
  48.                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);
  49.                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE1);
  50.                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);
  51.             }
  52.             break;
  53.             case 3:
  54.             { //空调手动送风--3档
  55.                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE1);
  56.                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE1);
  57.                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);
  58.             }
  59.             break;
  60.             case 4:
  61.             { //空调自动送风

  62.                 g_ledStatus = 1;
  63.             }
  64.             break;
  65.             default:
  66.                 break;
  67.             }
  68.             g_keyState_b = g_keyState;
  69.         }
  70.         if (g_keyState == 4)
  71.         { //空调自动档送风-3个LED闪烁

  72.             if (++delay > 50)
  73.             {
  74.                 delay=0;
  75.                 if (g_ledStatus > 0)
  76.                 {
  77.                     g_ledStatus = 0;
  78.                 }
  79.                 else
  80.                 {
  81.                     g_ledStatus = 1;
  82.                 }
  83.                 GpioSetOutputVal(R_LED, g_ledStatus);
  84.                 GpioSetOutputVal(Y_LED, g_ledStatus);
  85.                 GpioSetOutputVal(G_LED, g_ledStatus);
  86.             }
  87.         }

  88.         usleep(5 * 1000);
  89.         if (g_keyDelay > 0)
  90.         {
  91.             g_keyDelay--;
  92.         }
  93.     }

  94.     return NULL;
  95. }

  96. static void OnKeyPressed(char *arg)
  97. {
  98.     (void)arg;
  99.     if (g_keyDelay == 0)
  100.     {
  101.         g_keyDelay = 10;
  102.         ++g_keyState;
  103.         if (g_keyState > 4)
  104.         {
  105.             g_keyState = 0;
  106.         }

  107.     }
  108. /*     WifiIotGpioValue *val;
  109.     if(GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_8, &val)== HI_ERR_SUCCESS){
  110.        printf("val=%d",*val);
  111.     } */
  112. }

  113. static void StartLedTask(void)
  114. {
  115.     osThreadAttr_t attr;

  116.     GpioInit();
  117.     //设置红色,黄色,绿色 LED IO为输出状态
  118.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  119.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);

  120.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  121.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);

  122.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  123.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);

  124.     //设置KEY IO为输入状态,并许能中断
  125.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);
  126.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_IN);
  127.     IoSetPull(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_PULL_UP);
  128.     GpioRegisterIsRFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH, OnKeyPressed, NULL);

  129.     WatchDogDisable();

  130.     //设置任务参数,并Start一个ledTask任务线程
  131.     attr.name = "LedTask";
  132.     attr.attr_bits = 0U;
  133.     attr.cb_mem = NULL;
  134.     attr.cb_size = 0U;
  135.     attr.stack_mem = NULL;
  136.     attr.stack_size = 2048;
  137.     attr.priority = osPriorityNormal;

  138.     if (osThreadNew((osThreadFunc_t)ledTask, NULL, &attr) == NULL)
  139.     {
  140.         printf("[Demo1] Falied to create LedTask!n");
  141.     }
  142. }

  143. APP_FEATURE_INIT(StartLedTask); //在APP中初始化中回调StartLedTask(void)
复制代码

3. 附上代码:

4. 学习视频






app.zip
(3.33 KB, 下载次数: 3)

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友