[文章]鸿蒙Hi3861小视频参赛:自家开发版上实现人体红外感应

阅读量0
0
3
这里使用的是hi3861的三色灯板块,使用到的功能是上面的人体红外感应,当有人靠近的时候,灯光变亮,周围无人灯光暗淡。
代码如下:
#include<stdio.h>
#include<unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_pwm.h"
#include "wifiiot_adc.h"
#include "wifiiot_errno.h"

#define PWM_FREQ_DIVITION 64000
#define ADC_RESOLUTION 4996

static void jltfcloudcom(void *arg)
{
    (void)arg;
    //由于炫彩灯板中红色led灯的GIPO10,这里初始化控制GPIO10的控制方式为PWM模式
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10,WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);

    //调用函数初始化PWM模式
    PwmInit(WIFI_IOT_PWM_PORT_PWM1);

   while(1){
       unsigned short data = 0;
       unsigned short duty = 0;
       //使用AdcRead函数对3通道进行ADC信号读取,读取到的结果存储在data
       if(AdcRead(WIFI_IOT_ADC_CHANNEL_3,&data,WIFI_IOT_ADC_EQU_MODEL_4,WIFI_IOT_ADC_CUR_BAIS_DEFAULT,0)==WIFI_IOT_SUCCESS)
       {
           printf("data:%d",data);
           duty = PWM_FREQ_DIVITION *(unsigned int)data / ADC_RESOLUTION;
           //128 1820
            //duty = PWM_FREQ_DIVITION * (1948-(unsigned int)data) / ADC_RESOLUTION;

       }
       //PWM模式开启对红色led灯的控制
       PwmStart(WIFI_IOT_PWM_PORT_PWM1,duty,PWM_FREQ_DIVITION);
       usleep(10000);
       //PWM模式关闭对红色led灯的控制
       PwmStop(WIFI_IOT_PWM_PORT_PWM1);

   }
}
static void jltfcloudcn(void)
{
    osThreadAttr_t attr;
    GpioInit();
    attr.name="jltfcloudcom";
    attr.attr_bits=0U;
    attr.cb_mem=NULL;
    attr.cb_size=0U;
    attr.stack_mem=NULL;
    attr.stack_size=4096;
    attr.priority=osPriorityNormal;

    if(osThreadNew(jltfcloudcom,NULL,&attr) == NULL){
        printf("[jltfcloudcn] Failed to create jltfcloudcom!n");
    }

}
APP_FEATURE_INIT(jltfcloudcn);
本部分功能实现,参考了网上的公开代码。

回帖

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