|
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 分 |
|