total数据数组的更新函数更新,主函数整理

check
Zeng wei (曾威) 2 years ago
parent 17379dd00e
commit 6e0866a990

@ -164,7 +164,7 @@ void Analysis(u8 *n, u16 *i, u8 *rs485_rx_buf)
total[(2 * (*i) - 3) + 18 * (*n - 1)] = rs485_rx_buf[5];
total[(2 * (*i) - 2) + 18 * (*n - 1)] = rs485_rx_buf[6];
}
if (*i >= 6 && *i <= 8) // ¹âÕÕ
if (*i >= 6 && *i <= 14) // ¹âÕÕ
{
total[*i + 3 + 18 * (*n - 1)] = rs485_rx_buf[6];
}

@ -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;
/**
* pid5
*/
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;
}

Loading…
Cancel
Save