|
鸿蒙Hi3861小视频参赛:自家开发版上实现人体红外感应, 这里使用的是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 灯的 GIPO 为 10 ,这里初始化控制 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); 本部分功能实现,参考了网上的公开代码。 |
|