实现方案
关键代码
btn_ctl_led.c
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
static void F1_Pressed(char *arg)
{
(void)arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
}
static void F2_Pressed(char *arg)
{
(void)arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
}
static void ButtonCtrlLedInit(void) {
// GPIO 初始化
GpioInit();
// 初始化 LED 灯泡(设置引脚功能为GPIO:有些引脚是复合功能)
IoGetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
// 设置 GPIO 12 为输出模式
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
// 默认关灯(0 可以理解 关灯)
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
// 设置F1按键 GPIO (11) (按键是一个复杂的GPIO)
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
// 设置GPIO 为输入模式
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_IN);
// GPIO 上拉 (上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平)
IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
// 注册函数
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL);
// 设置F2按键 GPIO(12)(按键是一个复杂的GPIO)
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
// 设置GPIO 为输入模式
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);
// GPIO 上拉 (上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平)
IoSetPull(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_PULL_UP);
// 注册函数
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL);
}
APP_FEATURE_INIT(ButtonCtrlLedInit);
BUILD.gn
static_library("btn_ctrl_led") {
sources = [
"btn_ctrl_led.c"
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
]
}