
前言
一、代码及编译 1.代码
#include2.配置BUILD.gn 3.编译及烧写 二、功能解释 1.白天时人体靠近无反应(灯不亮) 2.夜晚 3.人靠近灯不亮 三、改进: 1.代码:#include #include "ohos_init.h" #include "cmsis_os2.h" #include "wifiiot_gpio.h" #include "wifiiot_gpio_ex.h" #include "wifiiot_adc.h" #define PHOTO_SENSOR_CHAN_NAME WIFI_IOT_ADC_CHANNEL_4 unsigned short data = 0; static void HummanSensorLightTask(void *arg) { (void)arg; WifiIotGpioValue rel = 0; while (1) { GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_7, &rel) ; AdcRead(PHOTO_SENSOR_CHAN_NAME, &data, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0); if((int)data>1800) { GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, (int)rel); GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, (int)rel); GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, (int)rel); usleep(2000); }else{ GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0); GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0); GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0); } } } static void HummanSensorLightDemo(void) { GpioInit(); //设置红色,蓝 色,绿色 LED IO为输出状态 IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO); GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO); GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO); GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO); GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_IN); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_IO_FUNC_GPIO_7_GPIO); GpioSetDir(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_GPIO_DIR_IN); IoSetPull(WIFI_IOT_IO_NAME_GPIO_7, WIFI_IOT_IO_PULL_UP); osThreadAttr_t attr; attr.name = "HummanSensorLightTask"; 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(HummanSensorLightTask, NULL, &attr) == NULL) { printf("[HummanSensorDemo] Falied to create HummanSensorTask!n"); } } APP_FEATURE_INIT(HummanSensorLightDemo);
#include2.实现:#include #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 ADC_RESOLUTION 4096 #define PWM_FREQ_DIVITION 64000 void initLightGPIO(void) { GpioInit(); // GpioDeinit(); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT); IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_PWM2_OUT); PwmInit(WIFI_IOT_PWM_PORT_PWM1); // R PwmInit(WIFI_IOT_PWM_PORT_PWM2); // G } void sasTask(void){ initLightGPIO(); int state = 0; unsigned short humanData = 0; unsigned short photosensitiveData = 0; while(1){ //读取 光敏电阻或 人体红外感应器的值, AdcRead(WIFI_IOT_ADC_CHANNEL_3, &humanData, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0); AdcRead(WIFI_IOT_ADC_CHANNEL_4, &photosensitiveData, WIFI_IOT_ADC_EQU_MODEL_4, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0); state = photosensitiveData>=800 && humanData >=800; if(state){ //满足条件 红灯亮,报警 //红灯亮 PwmStart(WIFI_IOT_PWM_PORT_PWM2, PWM_FREQ_DIVITION, PWM_FREQ_DIVITION); //绿灯灭 PwmStop(WIFI_IOT_PWM_PORT_PWM1); }else{//绿灯 PwmStop(WIFI_IOT_PWM_PORT_PWM2);//红灯 灭 //绿灯闪烁 PwmStart(WIFI_IOT_PWM_PORT_PWM1, PWM_FREQ_DIVITION, PWM_FREQ_DIVITION); sleep(1); PwmStop(WIFI_IOT_PWM_PORT_PWM1); } sleep(1); } } APP_FEATURE_INIT(sasTask);
人不在:绿
人在:红
总结
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)