電子產業(yè)一站式賦能平臺

PCB聯(lián)盟網

搜索
查看: 692|回復: 0
收起左側

Hi3861板LED仿空調風速控制

[復制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉到指定樓層
樓主
發(fā)表于 2020-10-10 09:56:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Hi3861板LED仿空調風速控制,   
本帖最后由 pschen083 于 2020-10-9 23:40 編輯



        對于剛接觸Hi3861 HarmonyOS device小伙子不知如何開始編寫應用程序,現在我為編寫一些簡單的入門實戰(zhàn)范例,并附上代碼和錄屏,讓大家快速上手HarmonyOS IOT device  應用開發(fā);

   1.   軟件開發(fā)環(huán)境參考華為的官方文檔:

        https://device.harmonyos.com/cn/docs/start/introduce/oem_start_guide-0000001054913231



   2.    Hi3861板LED仿空調風速控制程序

/*

   * HiSpark_WiFi_IoT_SSL板

   * GPIO_8  Key

   * GPIO_10 紅色LED,高電平點亮

   * GPIO_12 黃色LED,高電平點亮

   * GPIO_11 綠色LED,高電平點亮

*/



#include <stdio.h>

#include <unistd.h>



#include “ohos_init.h“

#include “cmsis_os2.h“

#include “wifiiot_gpio.h“

#include “wifiiot_gpio_ex.h“

#include “wifiiot_watchdog.h“

//#include “hi_boot_err.h“



#define R_LED WIFI_IOT_GPIO_IDX_10

#define Y_LED WIFI_IOT_GPIO_IDX_12

#define G_LED WIFI_IOT_GPIO_IDX_11



static int g_keyState = 0, g_keyState_b = 0, g_keyDelay = 0;

static int g_ledStatus = 0;



static void *ledTask(const char *arg)

{



     int delay = 0;

     (void)arg;



     printf(“l(fā)edTask start!\r\n“);



     while (1)

     {



         if (g_keyState_b != g_keyState)

         {

             switch (g_keyState)

             {

             case 0:

             { //空調送風關閉



                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);

                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE0);

                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE0);

             }

             break;

             case 1:

             { //空調手動送風--1檔

                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);

                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE0);

                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);

             }

             break;

             case 2:

             { //空調手動送風--2檔

                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE0);

                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE1);

                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);

             }

             break;

             case 3:

             { //空調手動送風--3檔

                 GpioSetOutputVal(R_LED, WIFI_IOT_GPIO_VALUE1);

                 GpioSetOutputVal(Y_LED, WIFI_IOT_GPIO_VALUE1);

                 GpioSetOutputVal(G_LED, WIFI_IOT_GPIO_VALUE1);

             }

             break;

             case 4:

             { //空調自動送風



                 g_ledStatus = 1;

             }

             break;

             default:

                 break;

             }

             g_keyState_b = g_keyState;

         }

         if (g_keyState == 4)

         { //空調自動檔送風-3個LED閃爍



             if (++delay > 50)

             {

                 delay=0;

                 if (g_ledStatus > 0)

                 {

                     g_ledStatus = 0;

                 }

                 else

                 {

                     g_ledStatus = 1;

                 }

                 GpioSetOutputVal(R_LED, g_ledStatus);

                 GpioSetOutputVal(Y_LED, g_ledStatus);

                 GpioSetOutputVal(G_LED, g_ledStatus);

             }

         }



         usleep(5 * 1000);

         if (g_keyDelay > 0)

         {

             g_keyDelay--;

         }

     }



     return NULL;

}



static void OnKeyPressed(char *arg)

{

     (void)arg;

     if (g_keyDelay == 0)

     {

         g_keyDelay = 10;

         ++g_keyState;

         if (g_keyState > 4)

         {

             g_keyState = 0;

         }



     }

/*     WifiIotGpioValue *val;

     if(GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_8, &val)== HI_ERR_SUCCESS){

        printf(“val=%d“,*val);

     } */

}



static void StartLedTask(void)

{

     osThreadAttr_t attr;



     GpioInit();

     //設置紅色,黃色,綠色 LED IO為輸出狀態(tài)

     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);

     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);



     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);

     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);



     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);

     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);



     //設置KEY IO為輸入狀態(tài),并許能中斷

     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);

     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_IN);

     IoSetPull(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_PULL_UP);

     GpioRegisterIsRFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH, OnKeyPressed, NULL);



     WatchDogDisable();



     //設置任務參數,并Start一個ledTask任務線程

     attr.name = “LedTask“;

     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((osThreadFunc_t)ledTask, NULL, &attr) == NULL)

     {

         printf(“[Demo1] Falied to create LedTask!\n“);

     }

}



APP_FEATURE_INIT(StartLedTask); //在APP中初始化中回調StartLedTask(void)



3. 附上代碼:

Hi3861板LED仿空調風速控制程序_代碼.zip
(3.33 KB, 下載次數: 0) 昨天 23:39 上傳 點擊文件名下載附件

下載積分: 積分 -1 分

4. 學習視頻

Hi3861板LED仿空調風速控制程序_視頻.zip
(14.21 MB, 下載次數: 0) 昨天 23:36 上傳 點擊文件名下載附件

下載積分: 積分 -1 分
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表