|
|
|
|
@ -52,9 +52,6 @@ TaskHandle_t SensorDataRequestTask_Handler;
|
|
|
|
|
void SyncEnvironmentDataRequestTask(void *pvParameters);
|
|
|
|
|
// task handle
|
|
|
|
|
TaskHandle_t SyncEnvironmentDataRequestTask_Handler;
|
|
|
|
|
/**
|
|
|
|
|
* 定时制热test
|
|
|
|
|
*/
|
|
|
|
|
void HotTestRequestTask(void *pvParameters);
|
|
|
|
|
// task handle
|
|
|
|
|
TaskHandle_t HotTestRequestTask_Handler;
|
|
|
|
|
@ -75,16 +72,16 @@ extern float ki;
|
|
|
|
|
u8 batch_sync_buf[11]; // Array obtained by single synchronous cutting
|
|
|
|
|
u8 ins_1 = 0;
|
|
|
|
|
int diff = 0;
|
|
|
|
|
u8 gpio_state = 0x00; // relay status
|
|
|
|
|
u8 NUM = 1; // 批量同步发送的阶段号
|
|
|
|
|
u8 n; // 阶段号
|
|
|
|
|
u16 i; // 序列号
|
|
|
|
|
u8 chour; // 已运行小时数
|
|
|
|
|
u8 cminute; // 运行分钟数
|
|
|
|
|
u8 hot_clod_flag = 0; // 加热制冷标志位。hot_clod_flag=0, 不加热不制冷;hot_clod_flag=2,加热;hot_clod_flag=1,制冷
|
|
|
|
|
u8 humidity_flag = 0; // 加湿除湿标志位。 humidity_flag=0,不加湿不除湿; humidity_flag=2,加湿; humidity_flag=1,除湿
|
|
|
|
|
u8 ALARM = 0; // 报警标志位。ALARM=0,不报警;ALARM=1,报警
|
|
|
|
|
u16 tick = 0; // tick大于600,触发报警条件会报警;小于600则不报警
|
|
|
|
|
u8 gpio_state = 0x00;
|
|
|
|
|
u8 NUM = 1;
|
|
|
|
|
u8 n;
|
|
|
|
|
u16 i;
|
|
|
|
|
u8 chour;
|
|
|
|
|
u8 cminute;
|
|
|
|
|
u8 hot_clod_flag = 0;
|
|
|
|
|
u8 humidity_flag = 0;
|
|
|
|
|
u8 ALARM = 0;
|
|
|
|
|
u16 tick = 0;
|
|
|
|
|
u8 Feed_Dog_Count = 0; // Feeding dog timing
|
|
|
|
|
u8 now_stage = 1; // Current operational phase
|
|
|
|
|
u16 tem, hum;
|
|
|
|
|
@ -94,7 +91,7 @@ u8 hour, min;
|
|
|
|
|
// u8 rs485buf[8] = {SENSOR_ADDRESS, 0x03, 0x00, 0x01, 0x00, 0x09, 0xD4, 0x3F}; // Sensor exchange data
|
|
|
|
|
u8 INNER_SENSOR_485_REQUEST_COMMAND[8] = {INNER_SENSOR_ADDRESS, 0x03, 0x00, 0x01, 0x00, 0x09, 0xD4, 0x3F}; // Inner sensor exchange data
|
|
|
|
|
u8 OUTER_SENSOR_485_REQUEST_COMMAND[8] = {OUTER_SENSOR_ADDRESS, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x5E}; // Outer sensor exchange data
|
|
|
|
|
u16 sync_cnt = 0; // 同步环境控制参数的计数器,到0同步
|
|
|
|
|
u16 sync_cnt = 0;
|
|
|
|
|
int T = 0, H = 0, C = 0, G = 0, current_T = 0;
|
|
|
|
|
extern u8 total[];
|
|
|
|
|
float Humidity = 0;
|
|
|
|
|
@ -158,9 +155,8 @@ Start function: Create other functions and timers
|
|
|
|
|
void start_task(void *pvParameters)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
taskENTER_CRITICAL(); // 进入临界区
|
|
|
|
|
taskENTER_CRITICAL();
|
|
|
|
|
|
|
|
|
|
// 创建与传感器通信任务
|
|
|
|
|
xTaskCreate(
|
|
|
|
|
(TaskFunction_t)Sensor_Communication_task,
|
|
|
|
|
(const char *)"Sensor_Communication_task",
|
|
|
|
|
@ -168,20 +164,19 @@ void start_task(void *pvParameters)
|
|
|
|
|
(void *)NULL,
|
|
|
|
|
(UBaseType_t)Sensor_Communication_TASK_PRIO,
|
|
|
|
|
(TaskHandle_t *)&Sensor_CommunicationTask_Handler);
|
|
|
|
|
// if(handler==pdPASS){printf("与传感器通信任务创建成功\r\n");}
|
|
|
|
|
// else{printf("与传感器通信任务创建失败\r\n");}
|
|
|
|
|
// if(handler==pdPASS){printf("<EFBFBD>봫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>\r\n");}
|
|
|
|
|
// else{printf("<EFBFBD>봫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\r\n");}
|
|
|
|
|
|
|
|
|
|
// //创建控灯任务
|
|
|
|
|
// //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// handler4=xTaskCreate((TaskFunction_t )led_task,
|
|
|
|
|
// (const char* )"led_task",
|
|
|
|
|
// (uint16_t )LED_STK_SIZE,
|
|
|
|
|
// (void* )NULL,
|
|
|
|
|
// (UBaseType_t )LED_TASK_PRIO,
|
|
|
|
|
// (TaskHandle_t* )&LEDTask_Handler);
|
|
|
|
|
// if(handler4==pdPASS){printf("控灯任务创建成功\r\n");}
|
|
|
|
|
// else{printf("控灯任务创建失败\r\n");}
|
|
|
|
|
// if(handler4==pdPASS){printf("<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>\r\n");}
|
|
|
|
|
// else{printf("<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\r\n");}
|
|
|
|
|
|
|
|
|
|
// 创建传感器数据请求任务
|
|
|
|
|
xTaskCreate(
|
|
|
|
|
(TaskFunction_t)SensorDataRequestTask,
|
|
|
|
|
(const char *)"SensorDataRequestTask",
|
|
|
|
|
@ -208,14 +203,13 @@ void start_task(void *pvParameters)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelete(StartTask_Handler); // 删除开始任务
|
|
|
|
|
taskEXIT_CRITICAL(); // 退出临界区
|
|
|
|
|
vTaskDelete(StartTask_Handler);
|
|
|
|
|
taskEXIT_CRITICAL();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SensorDataRequestTask(void *pvParameters) {
|
|
|
|
|
while (1) {
|
|
|
|
|
// 发送传感器数据请求的操作
|
|
|
|
|
RS485_1_Send_Data_1(INNER_SENSOR_485_REQUEST_COMMAND, 8);
|
|
|
|
|
delay_xms(100);
|
|
|
|
|
// vTaskDelay(100);
|
|
|
|
|
@ -237,9 +231,6 @@ void SyncEnvironmentDataRequestTask(void *pvParameters) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int hot = 0;
|
|
|
|
|
/**
|
|
|
|
|
* pid计算,每5秒一次
|
|
|
|
|
*/
|
|
|
|
|
void HotTestRequestTask(void *pvParameters) {
|
|
|
|
|
while (1) {
|
|
|
|
|
// if (!(T == 0 && H == 0)) {
|
|
|
|
|
@ -264,8 +255,8 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
// Humidity=H*0.1;
|
|
|
|
|
// temperature=T*0.1;
|
|
|
|
|
// delay_ms(50);
|
|
|
|
|
// sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d,\"red_light\":%d,\"white_light\":%d,\"blue_light\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C,red/10,white/10,blue/10); //构建数据
|
|
|
|
|
// //sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C); //构建数据
|
|
|
|
|
// sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d,\"red_light\":%d,\"white_light\":%d,\"blue_light\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C,red/10,white/10,blue/10); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// //sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// if(cnt_flag==0){sub_flag=0;pub_flag=0;time=0;}
|
|
|
|
|
// if(cnt_flag&&sub_flag==0)sub_flag=!subscribMqtt(MQTT_SOCK,subTopic);
|
|
|
|
|
// if(cnt_flag&&sub_flag&&pub_flag==0)pub_flag=!publishMqtt(MQTT_SOCK,pubTopic,wet_temp);
|
|
|
|
|
@ -275,7 +266,7 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
// pingMqtt(MQTT_SOCK);
|
|
|
|
|
// }
|
|
|
|
|
now_stage = timelong_Compare();
|
|
|
|
|
Array(&now_stage, &hour, &min, &tem, &hum, lights); // 更新对应阶段号的参数
|
|
|
|
|
Array(&now_stage, &hour, &min, &tem, &hum, lights);
|
|
|
|
|
|
|
|
|
|
delay_xms(50);
|
|
|
|
|
|
|
|
|
|
@ -331,11 +322,18 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
Analysis(&n, &i, RS485_RX_BUF_COPY);
|
|
|
|
|
Array(&now_stage, &hour, &min, &tem, &hum, lights); // update param correspond to current stage
|
|
|
|
|
Write_Init();
|
|
|
|
|
bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 9);
|
|
|
|
|
bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 9, 13);
|
|
|
|
|
RS485_1_Send_Data_1(RS485_DATA_TMP, 13);
|
|
|
|
|
// bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 9);
|
|
|
|
|
// bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 9, 13);
|
|
|
|
|
// RS485_1_Send_Data_1(RS485_DATA_TMP, 13);
|
|
|
|
|
RX_BUF_Transfer(0, 9);
|
|
|
|
|
light_set_all();
|
|
|
|
|
// if temp or humidity is been change, then calc pid right now, and upload params
|
|
|
|
|
if (i == 4 || i == 5) {
|
|
|
|
|
// take tem to set_tem immediately
|
|
|
|
|
pid.set_tem = tem / 10.0;
|
|
|
|
|
PID_Calc();
|
|
|
|
|
}
|
|
|
|
|
RS485_1_Upload_Params();
|
|
|
|
|
}
|
|
|
|
|
else if (RS485_RX_BUF_COPY[0] == 0xEE && RS485_RX_BUF_COPY[1] == 0xB6 && RS485_RX_BUF_COPY[2] == 0x04 && CRC16_check(RS485_RX_BUF_COPY, 4) == 1)
|
|
|
|
|
{
|
|
|
|
|
@ -351,7 +349,7 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
RS485_1_Send_Data_1(RS485_DATA_TMP, 10);
|
|
|
|
|
// delay_ms(10);
|
|
|
|
|
PID_Calc();
|
|
|
|
|
RS485_1_Upload_Params(); // 上传参数
|
|
|
|
|
RS485_1_Upload_Params();
|
|
|
|
|
RX_BUF_Transfer(0, 6);
|
|
|
|
|
}
|
|
|
|
|
else if (RS485_RX_BUF_COPY[0] == 0xEE && RS485_RX_BUF_COPY[1] == 0xB6 && RS485_RX_BUF_COPY[2] == 0x05)
|
|
|
|
|
@ -465,17 +463,13 @@ void process_inner_sensor_data(u8 *data) {
|
|
|
|
|
C = data[19];
|
|
|
|
|
C = C << 8 | data[20];
|
|
|
|
|
|
|
|
|
|
/*GPIO1->报警铃 GPIO3->加热棒 GPIO4—>新风风扇 GPIO5->加湿器 GPIO6->压缩机 */
|
|
|
|
|
|
|
|
|
|
if ((T < (tem - 20) || T > (tem + 20) || H < (hum - 100) || H > (hum + 100)) && (tick > 600)) // 温度偏差2℃报警,湿度偏差10报警
|
|
|
|
|
if ((T < (tem - 20) || T > (tem + 20) || H < (hum - 100) || H > (hum + 100)) && (tick > 600))
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state |= 0x01); // 打开报警铃 GPIO1->PB1 |=0000 0001 0x01
|
|
|
|
|
gpio_state |= 0x01;
|
|
|
|
|
ALARM = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state &= 0xFE); // 关闭报警铃 &=1111 1110 0xFE
|
|
|
|
|
gpio_state &= 0xFE;
|
|
|
|
|
ALARM = 0;
|
|
|
|
|
}
|
|
|
|
|
@ -490,41 +484,35 @@ void process_inner_sensor_data(u8 *data) {
|
|
|
|
|
// out: 0-200
|
|
|
|
|
current_T = T;
|
|
|
|
|
|
|
|
|
|
if (H > (hum + 50)) // 湿度高于设定值5,打开新风风扇 GPIO4->PD1
|
|
|
|
|
if (H > (hum + 50))
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state |= 0x08); // 打开新风风扇 |=0000 1000 0x08
|
|
|
|
|
gpio_state |= 0x08;
|
|
|
|
|
// HC595_Send_Byte(gpio_state &= 0xEF); // 关闭加湿器 &=1110 1111 0xEF
|
|
|
|
|
gpio_state &= 0xEF;
|
|
|
|
|
humidity_flag = 1; // 除湿
|
|
|
|
|
humidity_flag = 1;
|
|
|
|
|
}
|
|
|
|
|
if (H < (hum - 50)) // 湿度低于设定值5,打开加湿器 GPIO5->PD0
|
|
|
|
|
if (H < (hum - 50))
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state |= 0x10); // 启动加湿器 |=0001 0000 0x10
|
|
|
|
|
gpio_state |= 0x10;
|
|
|
|
|
// HC595_Send_Byte(gpio_state &= 0xF7); // 关闭风扇 &=1111 0111 0xF7
|
|
|
|
|
gpio_state &= 0xF7;
|
|
|
|
|
humidity_flag = 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (humidity_flag == 1 && H <= hum)
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state &= 0xE7); // 关闭风扇 关闭加湿器 &=1110 0111 0xE7
|
|
|
|
|
gpio_state &= 0xE7;
|
|
|
|
|
humidity_flag = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (humidity_flag == 2 && H >= hum)
|
|
|
|
|
{
|
|
|
|
|
// HC595_Send_Byte(gpio_state &= 0xE7); // 关闭加湿器 关闭风扇 &=1110 0111 0xE7
|
|
|
|
|
gpio_state &= 0xE7;
|
|
|
|
|
humidity_flag = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// HC595_Send_Byte(gpio_state);
|
|
|
|
|
|
|
|
|
|
PID_Calc();
|
|
|
|
|
RS485_1_Upload_Params(); // 上传参数
|
|
|
|
|
// HC595_Send_Byte(gpio_state);
|
|
|
|
|
RS485_1_Upload_Params();
|
|
|
|
|
// delay_xms(200);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -567,7 +555,7 @@ void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) {
|
|
|
|
|
store_stage = target_stage;
|
|
|
|
|
Write_Init();
|
|
|
|
|
PID_Calc();
|
|
|
|
|
RS485_1_Upload_Params(); // 上传参数
|
|
|
|
|
RS485_1_Upload_Params();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|