#include "RunEnvTask.h" #include "WatchDogTask.h" #include "ToolDataTypeSwitch.h" #include "FileSysTask.h" #include "UpcCommTask.h" #include "TempAndHumiDrv.h" #include "McuBspAdc.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include #include #define LEAK1_ADC_ID MCU_BSP_ADC5 /* 光电分离舱漏水 */ static uint32_t gLeak1_u32 = 0; static float gLeak1_f = 0.0f; /* 光电分离舱温湿度 */ static uint32_t gTemp_u32 = 0; static float gTemp_f = 0.0f; static uint32_t gHumi_u32 = 0; static float gHumi_f = 0.0f; /* OTN光电分李舱 */ static uint32_t gTempOtn_u32 = 0; static float gTempOtn_f = 0.0f; static uint32_t gHumiOtn_u32 = 0; static float gHumiOtn_f = 0.0f; static unsigned short gTaskRunEnvSendSerial = 0; static int gTaskRunEnvWatchDogId = -1; // 心跳包看门狗事件ID static int gTaskRunEnvPickEnable = -1; // 端口输出状态采集使能 static unsigned char gTaskRunEnvSendBuf[21] = {0}; // 端口输出发送的状态缓存,13因为该消息体大小为13 static char gTaskRunEnvFileDataBuf[1024] = {0}; void TaskRunEnvInit(void) { /* 初始化ADC */ McuBspAdcInit(); /* 初始化温湿度 */ DrvTempAndHumiInit(); /* 看门狗事件注册 */ gTaskRunEnvWatchDogId = TaskWatchdogRegEvent("TaskRunEnv"); } void TaskRunEnv(void *arg) { unsigned int RealWbyte; int ret = 0; int i = 0; /* 将时钟同步任务开启写入日志 */ do { ret = TaskFileLogWrite("TaskRunEnv: Join in!!\n", strlen("TaskRunEnv: Join in!!\n"), &RealWbyte); TaskWatchdogFreed(gTaskRunEnvWatchDogId); OSTimeDly(1); } while (ret > 0); while (1) { OSTimeDly(100); TaskWatchdogFreed(gTaskRunEnvWatchDogId); if (gTaskRunEnvPickEnable != 1) { continue; } /* 获取光电分李舱温湿度数据 */ i = 0; while (0 > DrvTempAndHumiGet(&gTemp_f, &gHumi_f)) { i++; OSTimeDly(10); TaskWatchdogFreed(gTaskRunEnvWatchDogId); if (i > 1000) { gTemp_f = 0; gHumi_f = 0; break; } } ToolFloatToUint32(gTemp_f, &gTemp_u32); ToolFloatToUint32(gHumi_f, &gHumi_u32); /* OTN获取光电分李舱温湿度数据 */ i = 0; while (0 > DrvTempAndHumiGet2(&gTempOtn_f, &gHumiOtn_f)) { i++; OSTimeDly(10); TaskWatchdogFreed(gTaskRunEnvWatchDogId); if (i > 1000) { gTemp_f = 0; gHumi_f = 0; break; } } ToolFloatToUint32(gTempOtn_f, &gTempOtn_u32); ToolFloatToUint32(gHumiOtn_f, &gHumiOtn_u32); /* 获取漏水信号 */ McuBspAdcGetValue(LEAK1_ADC_ID, &gLeak1_f); ToolFloatToUint32(gLeak1_f, &gLeak1_u32); /* 打包 */ gTaskRunEnvSendBuf[0] = 1; gTaskRunEnvSendBuf[1] = (gTemp_u32 >> 24) & 0xff; gTaskRunEnvSendBuf[2] = (gTemp_u32 >> 16) & 0xff; gTaskRunEnvSendBuf[3] = (gTemp_u32 >> 8) & 0xff; gTaskRunEnvSendBuf[4] = gTemp_u32 & 0xff; gTaskRunEnvSendBuf[5] = (gHumi_u32 >> 24) & 0xff; gTaskRunEnvSendBuf[6] = (gHumi_u32 >> 16) & 0xff; gTaskRunEnvSendBuf[7] = (gHumi_u32 >> 8) & 0xff; gTaskRunEnvSendBuf[8] = gHumi_u32 & 0xff; gTaskRunEnvSendBuf[9] = (gLeak1_u32 >> 24) & 0xff; gTaskRunEnvSendBuf[10] = (gLeak1_u32 >> 16) & 0xff; gTaskRunEnvSendBuf[11] = (gLeak1_u32 >> 8) & 0xff; gTaskRunEnvSendBuf[12] = gLeak1_u32 & 0xff; gTaskRunEnvSendBuf[13] = (gTempOtn_u32 >> 24) & 0xff; gTaskRunEnvSendBuf[14] = (gTempOtn_u32 >> 16) & 0xff; gTaskRunEnvSendBuf[15] = (gTempOtn_u32 >> 8) & 0xff; gTaskRunEnvSendBuf[16] = gTempOtn_u32 & 0xff; gTaskRunEnvSendBuf[17] = (gHumiOtn_u32 >> 24) & 0xff; gTaskRunEnvSendBuf[18] = (gHumiOtn_u32 >> 16) & 0xff; gTaskRunEnvSendBuf[19] = (gHumiOtn_u32 >> 8) & 0xff; gTaskRunEnvSendBuf[20] = gHumiOtn_u32 & 0xff; /* 发送函数 */ TaskUpcCommSendMessage(TASK_RUN_ENV_MESSGAE_ID, &gTaskRunEnvSendSerial, gTaskRunEnvSendBuf, sizeof(gTaskRunEnvSendBuf)); gTaskRunEnvSendSerial++; TaskRunEnvDisable(); sprintf(gTaskRunEnvFileDataBuf, "Temp:%.02f,Humi:%.02f,,Leak1:%0.2f", gTemp_f,gHumi_f, gLeak1_f); TaskFileDataWrite(TASK_RUN_FILE_TYPE, gTaskRunEnvFileDataBuf, strlen(gTaskRunEnvFileDataBuf),&RealWbyte); } } void TaskRunEnvEnable(void) { gTaskRunEnvPickEnable = 1; } void TaskRunEnvDisable(void) { gTaskRunEnvPickEnable = 0; }