[文章]【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】感应灯Demo

阅读量0
0
1
分享一个比较简单的Demo
硬件模块:
HiSpark_WiFi_IoT_3861_CH340G_主板
HiSpark_WiFi_IoT_智能(炫彩)灯板

实现功能:
1.模拟红外人体感应灯,人到亮起红灯,人走红灯灭。
2.光敏电阻,暗环境亮绿灯,亮环境灭灯。

代码分享如下
1.在 applicationssamplewifi-iotappBUILD.gn 修改如下
  1. import("//build/lite/config/component/lite_component.gni")

  2. lite_component("app") {
  3.     features = [
  4.         "startup",
  5.         "sensor_light:sensor_light",
  6.         
  7.     ]
  8. }
复制代码


2.新建applicationssamplewifi-iotappsensor_light 目录并添加以下两个文件
applicationssamplewifi-iotappsensor_lightBUILD.gn
applicationssamplewifi-iotappsensor_lightsensor_light.c


3.applicationssamplewifi-iotappsensor_lightBUILD.gn  修改如下
  1. static_library("sensor_light") {
  2.     sources = [
  3.         "sensor_light.c"
  4.     ]

  5.     include_dirs = [
  6.         "//utils/native/lite/include",
  7.         "//kernel/liteos_m/components/cmsis/2.0",
  8.         "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  9.     ]
  10. }
复制代码


4.applicationssamplewifi-iotappsensor_lightsensor_light.c 修改如下
  1. #include <stdio.h>
  2. #include <unistd.h>

  3. #include "ohos_init.h"
  4. #include "cmsis_os2.h"
  5. #include "wifiiot_gpio.h"
  6. #include "wifiiot_gpio_ex.h"
  7. #include "wifiiot_adc.h"
  8. #include "wifiiot_errno.h"

  9. static void SensorLightTask(void *arg)
  10. {
  11.     (void)arg;
  12.     //人体感应ADC 值
  13.     unsigned short humandata = 0;
  14.     //光敏电阻ADC值
  15.     unsigned short lightdata = 0;
  16.     while(1){
  17.         if (AdcRead(WIFI_IOT_ADC_CHANNEL_3, &humandata, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0)
  18.             == WIFI_IOT_SUCCESS) {
  19.                 printf("[SensorLight] humandata =%dn",humandata);
  20.         }
  21.         if (AdcRead(WIFI_IOT_ADC_CHANNEL_4, &lightdata, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0)
  22.             == WIFI_IOT_SUCCESS) {
  23.                 printf("[SensorLight] lightdata =%dn",lightdata);
  24.         }
  25.         //从串口log中来看ADC值感应到是18xx,没有感应到是12x,所以这里用500做一个阈值
  26.         if(humandata > 500){
  27.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE1);//R on
  28.         }else{
  29.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE0);//R off
  30.         }
  31.         if(lightdata > 500){
  32.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE1);//G on
  33.         }else{
  34.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE0);//G off
  35.         }
  36.         usleep(10000);
  37.     }

  38. }

  39. static void SensorLight(void)
  40. {
  41.     osThreadAttr_t attr;

  42.     GpioInit();
  43.     //RLED init
  44.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  45.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);

  46.     //GLED init
  47.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  48.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);

  49.     //BLED init
  50.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  51.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);

  52.     attr.name = "SensorLightTask";
  53.     attr.attr_bits = 0U;
  54.     attr.cb_mem = NULL;
  55.     attr.cb_size = 0U;
  56.     attr.stack_mem = NULL;
  57.     attr.stack_size = 4096;
  58.     attr.priority = osPriorityNormal;

  59.     if (osThreadNew(SensorLightTask, NULL, &attr) == NULL) {
  60.         printf("[SensorLight] Falied to create SensorLightTask!n");
  61.     }
  62. }

  63. SYS_RUN(SensorLight);
复制代码








回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友