将气压传感器(HP203B)的温度作为备用温度,添加了温度与气压传感器错误日志
This commit is contained in:
parent
9d53c5dae7
commit
e96230cbd3
|
@ -1,6 +1,6 @@
|
||||||
EWARM/micro_climate/
|
EWARM/micro_climate/
|
||||||
|
EWARM/REMOTE_UPDATE/
|
||||||
EWARM/settings/
|
EWARM/settings/
|
||||||
frt_protocol.c
|
|
||||||
软件框架图.vsdx
|
软件框架图.vsdx
|
||||||
软件流程图.vsdx
|
软件流程图.vsdx
|
||||||
赛联-微气象传感器软件设计说明书.docx
|
赛联-微气象传感器软件设计说明书.docx
|
||||||
|
|
|
@ -125,8 +125,8 @@ extern mcs_para g_stMcs_Para;
|
||||||
typedef struct _error_log{
|
typedef struct _error_log{
|
||||||
uint16_t tof_error_NS:1; /* 接受南北信号(tofy,tofx<0)很小 */
|
uint16_t tof_error_NS:1; /* 接受南北信号(tofy,tofx<0)很小 */
|
||||||
uint16_t tof_error_WE:1; /* 接受东西信号(tofy,tofx<0)很小 */
|
uint16_t tof_error_WE:1; /* 接受东西信号(tofy,tofx<0)很小 */
|
||||||
uint16_t error_2:1; /* 保留 */
|
uint16_t temp_error_SHT30:1; /* SHT30错误日志(温湿度) */
|
||||||
uint16_t error_3:1; /* 保留 */
|
uint16_t temp_error_HP203B:1; /* HP203B错误日志(大气压) */
|
||||||
uint16_t error_4:1; /* 保留 */
|
uint16_t error_4:1; /* 保留 */
|
||||||
uint16_t error_5:1; /* 保留 */
|
uint16_t error_5:1; /* 保留 */
|
||||||
uint16_t error_6:1; /* 保留 */
|
uint16_t error_6:1; /* 保留 */
|
||||||
|
|
|
@ -858,26 +858,50 @@ void tem_hum_update_task(void const * argument)
|
||||||
int time_s_temp_humi = 0;
|
int time_s_temp_humi = 0;
|
||||||
uint32_t time_s_1Day = 0;
|
uint32_t time_s_1Day = 0;
|
||||||
|
|
||||||
|
float backupTemperature;
|
||||||
get_temp_humi_data(&g_stMcs_Para.temperature, &g_stMcs_Para.humidity);//开机先采集一次
|
get_temp_humi_data(&g_stMcs_Para.temperature, &g_stMcs_Para.humidity);//开机先采集一次
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
osDelay(1000);
|
osDelay(1000);
|
||||||
time_s_temp_humi ++;
|
time_s_temp_humi ++;
|
||||||
time_s_1Day ++;
|
time_s_1Day ++;
|
||||||
|
// 温湿度大气压更新
|
||||||
if (time_s_temp_humi >= g_stConfigInfo.temp_hum_update_time)
|
if (time_s_temp_humi >= 1/*g_stConfigInfo.temp_hum_update_time*/)
|
||||||
{
|
{
|
||||||
get_temp_humi_data(&g_stMcs_Para.temperature, &g_stMcs_Para.humidity);
|
// 采集HP203B传感器数据(大气压)
|
||||||
|
if(get_HP203_data(&backupTemperature, &g_stMcs_Para.pressure) == FALSE)
|
||||||
|
{
|
||||||
|
g_error_log.temp_error_HP203B = 1;
|
||||||
|
/// 错误处理
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 没出问题清除错误日志
|
||||||
|
g_error_log.temp_error_HP203B = 0;
|
||||||
|
}
|
||||||
|
// 采集SHT30传感器数据(温湿度)
|
||||||
|
if(get_temp_humi_data(&g_stMcs_Para.temperature, &g_stMcs_Para.humidity) == FALSE)
|
||||||
|
{
|
||||||
|
g_error_log.temp_error_SHT30 = 1;
|
||||||
|
/// 错误处理
|
||||||
|
g_stMcs_Para.temperature = backupTemperature;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 没出问题清除错误日志
|
||||||
|
g_error_log.temp_error_SHT30 = 0;
|
||||||
|
}
|
||||||
|
// 计时重置
|
||||||
time_s_temp_humi = 0;
|
time_s_temp_humi = 0;
|
||||||
}
|
}
|
||||||
|
// 一天重启
|
||||||
if (time_s_1Day >= 86400)
|
if (time_s_1Day >= 86400)
|
||||||
{
|
{
|
||||||
__iar_builtin_set_FAULTMASK(1);
|
__iar_builtin_set_FAULTMASK(1);
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
// 风速风向更新
|
||||||
my_update_mcs_param(av_speed, av_angle);
|
my_update_mcs_param(av_speed, av_angle);
|
||||||
//采集HP203B数据(大气压)
|
|
||||||
get_press_data();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
#include "anemometer_dev.h"
|
#include "anemometer_dev.h"
|
||||||
|
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
*名称:set_mode
|
*名称:set_mode
|
||||||
*功能:配置从机模式,设置通道及采样率
|
*功能:配置从机模式,设置通道及采样率
|
||||||
|
@ -22,10 +21,10 @@ void hp203_set_mode()
|
||||||
/****************************
|
/****************************
|
||||||
*名称:Hp203bReadPressure
|
*名称:Hp203bReadPressure
|
||||||
*功能:获取气压数据
|
*功能:获取气压数据
|
||||||
*参数:Press--气压值
|
*参数:
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*返回:无
|
*返回:气压
|
||||||
*****************************/
|
*****************************/
|
||||||
float Hp203bReadPressure(void)
|
float Hp203bReadPressure(void)
|
||||||
{
|
{
|
||||||
|
@ -48,36 +47,95 @@ float Hp203bReadPressure(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************
|
||||||
|
*名称:Hp203bReadTempture
|
||||||
|
*功能:获取温度数据
|
||||||
|
*参数:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*返回:温度
|
||||||
|
*****************************/
|
||||||
|
float Hp203bReadTempture(void)
|
||||||
|
{
|
||||||
|
float ret = 0.0;
|
||||||
|
long Hp203b_tempture = 0;
|
||||||
|
uint8_t Hp203bPressure_Temp[3] = {0};
|
||||||
|
uint8_t read_command[1] = {0x32};
|
||||||
|
|
||||||
|
HAL_I2C_Master_Transmit(&hi2c3, HP20X_ADDRESSCMD, read_command, 1, 0xff);
|
||||||
|
HAL_I2C_Master_Receive(&hi2c3, HP20X_ADDRESSCMD, Hp203bPressure_Temp, 3, 0xff);
|
||||||
|
|
||||||
|
Hp203b_tempture = Hp203bPressure_Temp[0];
|
||||||
|
Hp203b_tempture <<= 8;
|
||||||
|
Hp203b_tempture |= Hp203bPressure_Temp[1];
|
||||||
|
Hp203b_tempture <<= 8;
|
||||||
|
Hp203b_tempture |= Hp203bPressure_Temp[2];
|
||||||
|
|
||||||
|
Hp203b_tempture = Hp203b_tempture / 100;
|
||||||
|
ret = Hp203b_tempture;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************
|
/****************************
|
||||||
*名称:get_press_data
|
*名称:get_press_data
|
||||||
*功能:获取气压数据
|
*功能:获取气压与备用温度数据
|
||||||
*参数:Press--气压值
|
*参数:Press--气压值
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*返回:无
|
*返回:无
|
||||||
*****************************/
|
*****************************/
|
||||||
#define COLLECT_PRESS_DATA_NUM 10
|
#define COLLECT_HB203_DATA_NUM 10
|
||||||
BOOL get_press_data(void)
|
BOOL get_HP203_data(float* tempdata, float* press)
|
||||||
{
|
{
|
||||||
U_DataType collect_pressure[30]={0x00};
|
// 压强
|
||||||
|
U_DataType collect_pressure[COLLECT_HB203_DATA_NUM]={0x00};
|
||||||
|
|
||||||
for(int i=0; i<COLLECT_PRESS_DATA_NUM; i++){
|
for(int i=0; i<COLLECT_HB203_DATA_NUM; i++){
|
||||||
collect_pressure[i].fValue = Hp203bReadPressure();
|
collect_pressure[i].fValue = Hp203bReadPressure();
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
U_DataType tmp_press = filter_middle(collect_pressure, COLLECT_PRESS_DATA_NUM, FILTER_DATA_TYPE_FLOAT);
|
U_DataType tmp_press = filter_middle(collect_pressure, COLLECT_HB203_DATA_NUM, FILTER_DATA_TYPE_FLOAT);
|
||||||
if(tmp_press.fValue < 300)
|
if(tmp_press.fValue < 300)
|
||||||
{
|
{
|
||||||
tmp_press.fValue = 300;
|
tmp_press.fValue = 300;
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_press.fValue > 1200)
|
if(tmp_press.fValue > 1200)
|
||||||
{
|
{
|
||||||
tmp_press.fValue = 1200;
|
tmp_press.fValue = 1200;
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
// 温度
|
||||||
|
U_DataType collect_tempture[COLLECT_HB203_DATA_NUM]={0x00};
|
||||||
|
|
||||||
|
for(int i=0; i<COLLECT_HB203_DATA_NUM; i++){
|
||||||
|
collect_tempture[i].fValue = Hp203bReadTempture();
|
||||||
|
osDelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_stMcs_Para.pressure = tmp_press.fValue;
|
U_DataType tmp_tempture = filter_middle(collect_tempture, COLLECT_HB203_DATA_NUM, FILTER_DATA_TYPE_FLOAT);
|
||||||
|
if(tmp_tempture.fValue < -40)
|
||||||
|
{
|
||||||
|
tmp_tempture.fValue = -40;
|
||||||
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
if(tmp_tempture.fValue > 85)
|
||||||
|
{
|
||||||
|
tmp_tempture.fValue = 85;
|
||||||
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*tempdata = tmp_tempture.fValue;
|
||||||
|
*press = tmp_press.fValue;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
error_return:
|
||||||
|
*tempdata = 0;
|
||||||
|
*press = 0;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
|
@ -25,9 +25,7 @@ extern "C" {
|
||||||
#define HP20X_CONVERT_OSR1024 0x48
|
#define HP20X_CONVERT_OSR1024 0x48
|
||||||
|
|
||||||
void hp203_set_mode();
|
void hp203_set_mode();
|
||||||
float Hp203bReadPressure(void);
|
BOOL get_HP203_data(float* tempdata, float* press);
|
||||||
BOOL get_press_data(void);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,15 +127,16 @@ u_int8_t sht30_collect_data(stTempHumiSensor stSensorDev, float *temp, float *hu
|
||||||
#define COLLECT_DATA_NUM 10
|
#define COLLECT_DATA_NUM 10
|
||||||
BOOL get_temp_humi_data(float* temdata, float* humidata)
|
BOOL get_temp_humi_data(float* temdata, float* humidata)
|
||||||
{
|
{
|
||||||
U_DataType collect_temdata[30]={0x00};
|
U_DataType collect_temdata[COLLECT_DATA_NUM]={0x00};
|
||||||
U_DataType collect_humidata[30]={0x00};
|
U_DataType collect_humidata[COLLECT_DATA_NUM]={0x00};
|
||||||
U_DataType tmp_temdata,tmp_humidata;
|
U_DataType tmp_temdata,tmp_humidata;
|
||||||
|
|
||||||
for(int i=0; i<COLLECT_DATA_NUM; i++){
|
for(int i=0; i<COLLECT_DATA_NUM; i++){
|
||||||
int ret = sht30_collect_data(g_stTempHumiSensor,&collect_temdata[i].fValue, &collect_humidata[i].fValue);
|
int ret = sht30_collect_data(g_stTempHumiSensor,&collect_temdata[i].fValue, &collect_humidata[i].fValue);
|
||||||
// AssertError(ret == HAL_OK, return FALSE, "sht30²ÉÑùʧ°Ü");
|
// AssertError(ret == HAL_OK, return FALSE, "sht30²ÉÑùʧ°Ü");
|
||||||
if(ret == HAL_ERROR)
|
if(ret == HAL_ERROR)
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,25 +150,29 @@ BOOL get_temp_humi_data(float* temdata, float* humidata)
|
||||||
{
|
{
|
||||||
tmp_temdata.fValue = -40;
|
tmp_temdata.fValue = -40;
|
||||||
// term_printf("sht30ζÈֵУÑéʧ°Ü");
|
// term_printf("sht30ζÈֵУÑéʧ°Ü");
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_temdata.fValue > 125)
|
if(tmp_temdata.fValue > 125)
|
||||||
{
|
{
|
||||||
tmp_temdata.fValue = 125;
|
tmp_temdata.fValue = 125;
|
||||||
// term_printf("sht30ζÈֵУÑéʧ°Ü");
|
// term_printf("sht30ζÈֵУÑéʧ°Ü");
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_humidata.fValue < 0)
|
if(tmp_humidata.fValue < 0)
|
||||||
{
|
{
|
||||||
tmp_humidata.fValue = 0;
|
tmp_humidata.fValue = 0;
|
||||||
// term_printf("sht30ʪ¶ÈֵУÑéʧ°Ü");
|
// term_printf("sht30ʪ¶ÈֵУÑéʧ°Ü");
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_humidata.fValue > 100)
|
if(tmp_humidata.fValue > 100)
|
||||||
{
|
{
|
||||||
tmp_humidata.fValue = 100;
|
tmp_humidata.fValue = 100;
|
||||||
// term_printf("sht3ʪ¶ÈֵУÑéʧ°Ü");
|
// term_printf("sht3ʪ¶ÈֵУÑéʧ°Ü");
|
||||||
return FALSE;
|
// return FALSE;
|
||||||
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*temdata = tmp_temdata.fValue;
|
*temdata = tmp_temdata.fValue;
|
||||||
|
@ -176,6 +181,11 @@ BOOL get_temp_humi_data(float* temdata, float* humidata)
|
||||||
//g_stTempHumiData.temp = tmp_temdata.fValue;
|
//g_stTempHumiData.temp = tmp_temdata.fValue;
|
||||||
//g_stTempHumiData.humi = tmp_humidata.fValue;
|
//g_stTempHumiData.humi = tmp_humidata.fValue;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
error_return:
|
||||||
|
*temdata = 0;
|
||||||
|
*humidata = 0;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue