鸿蒙硬件HI3861点灯

鸿蒙硬件HI3861点灯

鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html

创建文件

 BUILD.gn

static_library("mmled") {
    sources = [
        "mmled.c"
    ]
    include_dirs = [
        "//domains/iot/link/ledlib",
        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
        "//kernel/liteos_m/components/cmsis/2.0",
    ]
}

mmled.c

#include "mmled.h"
#include <stdio.h>
#include <unistd.h>
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "cmsis_os2.h"

// LED状态
enum LedState {
    LED_ON = 0,
    LED_OFF,
    LED_SPARK,
};

enum LedState g_ledState = LED_SPARK;

// LED初始化
void Led_Init(void){
    GpioInit();
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
}

static void *LedBTask(const char *arg){
    (void)arg;
    while (1) {
        switch (g_ledState) {
            case LED_ON:
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
                usleep(LED_INTERVAL_TIME_US);
                break;
            case LED_OFF:
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
                usleep(LED_INTERVAL_TIME_US);
                break;
            case LED_SPARK:
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
                usleep(LED_INTERVAL_TIME_US);
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
                usleep(LED_INTERVAL_TIME_US);
                break;
            default:
                usleep(LED_INTERVAL_TIME_US);
                break;
        }
    }

    return NULL;
}

// LED模块初始化线程
void Start_Led_Thread(void){
    osThreadAttr_t ledattr;
    ledattr.name = "LedTask";
    ledattr.attr_bits = 0U;
    ledattr.cb_mem = NULL;
    ledattr.cb_size = 0U;
    ledattr.stack_mem = NULL;
    ledattr.stack_size = LED_TASK_STACK_SIZE;
    ledattr.priority = LED_TASK_PRIO;

    if (osThreadNew((osThreadFunc_t)LedBTask, NULL, &ledattr) == NULL) {
        printf("[LedExample] Falied to create LedTask!\n");
    }
}

 mmled.c

#ifndef MMLED_H
#define MMLED_H

#define LED_INTERVAL_TIME_US 3000000
#define LED_TASK_STACK_SIZE 512
#define LED_TASK_PRIO 25

/**
 * LED初始化
 */
void Led_Init(void);

void Start_Led_Thread(void);

//static void *LedBTask(const char *arg);

#endif

这些弄完之后需要修改code-1.0\applications\sample\wifi-iot\app\BUILD.gn把刚才的mmled添加进去进行

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "my_first_app:myapp",
        "//domains/iot/link/ledlib:mmled"   ##  需要把mmled添加进去
    ]
}

在\code-1.0\applications\sample\wifi-iot\app\my_first_app\BUILD.gn



static_library("myapp") {
    sources = [
        "hello_world.c"
    ]

    include_dirs = [
        "//utils/native/lite/include",
        "//domains/iot/link/ledlib",     ## 添加ledlib
    ]
}

在\code-1.0\applications\sample\wifi-iot\app\my_first_app\hello_world.c

#include <stdio.h>
#include "ohos_init.h"
#include "ohos_types.h"
#include "mmled.h"


void HelloWorld(void)
{
    printf("[DEMO] Hello world.\n");
    Led_Init();
    Start_Led_Thread();
}

SYS_RUN(HelloWorld);

然后就OK了

如果在过程中遇到什么问题可以来联系我B站

https://space.bilibili.com/309103931

猜你喜欢

转载自blog.csdn.net/qq_33259323/article/details/109353986