Hi3861点灯
Hi3861点灯
自带的源码分析
// app/iothardware/led_example.c 自带源码#include #include #include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"#define LED_INTERVAL_TIME_US 300000 // interval 闪烁间隔 微秒#define LED_TASK_STACK_SIZE 512#define LED_TASK_PRIO 25#define LED_TEST_GPIO 9 // for hispark_pegasus 端口9// 灯的三种状态enum LedState { LED_ON = 0, // 开 LED_OFF, // 关 LED_SPARK, // 闪烁};enum LedState g_ledState = LED_SPARK; //设置状态为闪烁static void *LedTask(const char *arg){ (void)arg; // 死循环 每种状态对应的操作 while (1) { switch (g_ledState) { case LED_ON: IoTGpioSetOutputVal(LED_TEST_GPIO, 1);// 设置灯关闭 usleep(LED_INTERVAL_TIME_US); break; case LED_OFF: IoTGpioSetOutputVal(LED_TEST_GPIO, 0);// 设置灯开启 usleep(LED_INTERVAL_TIME_US); break; case LED_SPARK: IoTGpioSetOutputVal(LED_TEST_GPIO, 0); usleep(LED_INTERVAL_TIME_US); IoTGpioSetOutputVal(LED_TEST_GPIO, 1); usleep(LED_INTERVAL_TIME_US); break; default: usleep(LED_INTERVAL_TIME_US); break; } } return NULL;}static void LedExampleEntry(void){ osThreadAttr_t attr; IoTGpioInit(LED_TEST_GPIO); // 初始化 IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT); attr.name = "LedTask"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = LED_TASK_STACK_SIZE; attr.priority = LED_TASK_PRIO; if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { printf("[LedExample] Falied to create LedTask!\n"); } // 新线程打开失败,输出错误}SYS_RUN(LedExampleEntry); // 用户代码入口
尝试 点灯实现SOS
app目录下新建文件夹 LED_SOS
在文件夹LED_SOS 新建 LED_SOS.c BUILD.gn两个文件
内容如下
// LED_SOS.c#include #include #include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"#define LED_INTERVAL_TIME_US 300000#define LED_INTERVAL1 100000#define LED_INTERVAL2 200000#define LED_INTERVAL3 600000#define LED_INTERVAL4 5000000 #define LED_TASK_STACK_SIZE 512#define LED_TASK_PRIO 25#define LED_TEST_GPIO 9 // for hispark_pegasusenum LedState { LED_ON = 0, LED_OFF, LED_SPARK,};enum LedState g_ledState = LED_SPARK;static void *LedTask(const char *arg) { (void)arg; int i=0; while (1) { switch (g_ledState) { case LED_ON: IoTGpioSetOutputVal(LED_TEST_GPIO, 1); usleep(LED_INTERVAL_TIME_US); break; case LED_OFF: IoTGpioSetOutputVal(LED_TEST_GPIO, 0); usleep(LED_INTERVAL_TIME_US); break; case LED_SPARK: // 三个快闪烁来表示字母“S” for (i = 0; i < 3; i++) { IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯 usleep(LED_INTERVAL2); //延时200毫秒 IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯 usleep(LED_INTERVAL1); //延时100毫秒 } //100毫秒延时产生字母之间的间隙 usleep(LED_INTERVAL1); //延时100毫秒 // 三个慢闪烁来表示字母“O” for (i = 0; i < 3; i++) { IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯 usleep(LED_INTERVAL3); //延时600毫秒 IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯 usleep(LED_INTERVAL1); //延时100毫秒 } //100毫秒延时产生字母之间的间隙 usleep(LED_INTERVAL1); //延时100毫秒 // 三个快闪烁来表示字母“S” for (i = 0; i < 3; i++) { IoTGpioSetOutputVal(LED_TEST_GPIO, 0); //打开灯 usleep(LED_INTERVAL2); //延时200毫秒 IoTGpioSetOutputVal(LED_TEST_GPIO, 1); //关闭灯 usleep(LED_INTERVAL1); //延时100毫秒 } //5秒延时产生字母sos的间隙 usleep(LED_INTERVAL4); //延时5秒 break; default: usleep(LED_INTERVAL_TIME_US); break; } } return NULL;}static void LedExampleEntry(void) { osThreadAttr_t attr; IoTGpioInit(LED_TEST_GPIO); IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT); attr.name = "LedTask"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = LED_TASK_STACK_SIZE; attr.priority = LED_TASK_PRIO; if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { printf("[LedExample] Falied to create LedTask!\n"); }}SYS_RUN(LedExampleEntry);
# BUILD.gnstatic_library("led_sos") { sources = [ "LED_SOS.c" ] include_dirs = [ "//utils/native/lite/include", "//kernel/liteos_m/kal/cmsis", "//base/iot_hardware/peripheral/interfaces/kits", ]}
app目录下的BUILD.gn修改
import("//build/lite/config/component/lite_component.gni")lite_component("app") { features = [ "LED_SOS:led_sos", ]}