57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
|
|
// #include <rtthread.h>
|
|
// #include <rtdevice.h>
|
|
// #include "math.h"
|
|
// #include <board.h>
|
|
// #include <drv_gpio.h>
|
|
// #ifndef RT_USING_NANO
|
|
// #endif /* RT_USING_NANO */
|
|
// #define PM25_READ_TIMES 20
|
|
// #define GPIO_PIN GET_PIN(G, 5)
|
|
// extern float ADC_Read();
|
|
// extern float ADC1_Read();
|
|
// float PM25_GetData(void)
|
|
// {
|
|
// int ADCVal;
|
|
// int dustVal = 0;
|
|
// float Voltage;
|
|
|
|
// rt_pin_write(GPIO_PIN, PIN_HIGH);//置1 开启内部LED
|
|
|
|
// rt_hw_us_delay(280);
|
|
// ADCVal = ADC1_Read();
|
|
// rt_hw_us_delay(25);
|
|
// rt_pin_write(GPIO_PIN, PIN_LOW); //置0 关闭内部LED
|
|
// rt_hw_us_delay(9680); //需要脉宽比0.32ms/10ms的PWM信号驱动传感器中的LED
|
|
|
|
// Voltage = 3.3f * ADCVal / 4096.f * 2; //获得AO输出口的电压值
|
|
|
|
// dustVal = (0.17*Voltage-0.1)*1000; //乘以1000单位换成ug/m3//
|
|
|
|
// if (dustVal < 0)
|
|
// dustVal = 0; //限位//
|
|
|
|
// if (dustVal>500)
|
|
// dustVal=500;
|
|
|
|
// return dustVal;
|
|
// }
|
|
|
|
// /**
|
|
// * @brief 平均值滤波法
|
|
// * @param 无
|
|
// * @retval 返回滤波后的数据
|
|
// */
|
|
// float Get_PM25_Average_Data(void)
|
|
// {
|
|
// float temp_val=0;
|
|
// float t;
|
|
// for(t=0;t<PM25_READ_TIMES;t++) //#define PM25_READ_TIMES 20 定义读取次数,读这么多次,然后取平均值
|
|
|
|
// {
|
|
// temp_val+=PM25_GetData(); //读取ADC值
|
|
// rt_thread_mdelay(5);
|
|
// }
|
|
// temp_val/=PM25_READ_TIMES;//得到平均值
|
|
// return temp_val;//返回算出的ADC平均值
|
|
// }
|