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

描述

本文来源电子发烧友社区,作者:soon顺soon, 帖子地址:https://bbs.elecfans.com/jishu_2023113_1_1.html

分享一个比较简单的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.  
  3. lite_component("app") {
  4.     features = [
  5.         "startup",
  6.         "sensor_light:sensor_light",
  7.         
  8.     ]
  9. }
复制代码


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.  
  6.     include_dirs = [
  7.         "//utils/native/lite/include",
  8.         "//kernel/liteos_m/components/cmsis/2.0",
  9.         "//base/iot_hardware/interfaces/kits/wifiiot_lite",
  10.     ]
  11. }
复制代码


4.applicationssamplewifi-iotappsensor_lightsensor_light.c 修改如下
  1. #include
  2. #include
  3.  
  4. #include "ohos_init.h"
  5. #include "cmsis_os2.h"
  6. #include "wifiiot_gpio.h"
  7. #include "wifiiot_gpio_ex.h"
  8. #include "wifiiot_adc.h"
  9. #include "wifiiot_errno.h"
  10.  
  11. static void SensorLightTask(void *arg)
  12. {
  13.     (void)arg;
  14.     //人体感应ADC 值
  15.     unsigned short humandata = 0;
  16.     //光敏电阻ADC值
  17.     unsigned short lightdata = 0;
  18.     while(1){
  19.         if (AdcRead(WIFI_IOT_ADC_CHANNEL_3, &humandata, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0)
  20.             == WIFI_IOT_SUCCESS) {
  21.                 printf("[SensorLight] humandata =%dn",humandata);
  22.         }
  23.         if (AdcRead(WIFI_IOT_ADC_CHANNEL_4, &lightdata, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0)
  24.             == WIFI_IOT_SUCCESS) {
  25.                 printf("[SensorLight] lightdata =%dn",lightdata);
  26.         }
  27.         //从串口log中来看ADC值感应到是18xx,没有感应到是12x,所以这里用500做一个阈值
  28.         if(humandata > 500){
  29.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE1);//R on
  30.         }else{
  31.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE0);//R off
  32.         }
  33.         if(lightdata > 500){
  34.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE1);//G on
  35.         }else{
  36.             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE0);//G off
  37.         }
  38.         usleep(10000);
  39.     }
  40.  
  41. }
  42.  
  43. static void SensorLight(void)
  44. {
  45.     osThreadAttr_t attr;
  46.  
  47.     GpioInit();
  48.     //RLED init
  49.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
  50.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
  51.  
  52.     //GLED init
  53.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
  54.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
  55.  
  56.     //BLED init
  57.     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
  58.     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
  59.  
  60.     attr.name = "SensorLightTask";
  61.     attr.attr_bits = 0U;
  62.     attr.cb_mem = NULL;
  63.     attr.cb_size = 0U;
  64.     attr.stack_mem = NULL;
  65.     attr.stack_size = 4096;
  66.     attr.priority = osPriorityNormal;
  67.  
  68.     if (osThreadNew(SensorLightTask, NULL, &attr) == NULL) {
  69.         printf("[SensorLight] Falied to create SensorLightTask!n");
  70.     }
  71. }
  72.  
  73. SYS_RUN(SensorLight);
复制代码



打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分