From 6e0866a990a4e89ec0574a4cfc4ceaf66dddb89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zeng=20wei=20=28=E6=9B=BE=E5=A8=81=29?= Date: Fri, 17 May 2024 17:16:14 +0800 Subject: [PATCH] =?UTF-8?q?total=E6=95=B0=E6=8D=AE=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=96=B0=E5=87=BD=E6=95=B0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=8C=E4=B8=BB=E5=87=BD=E6=95=B0=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HARDWARE/write.c | 2 +- myfreertos/myfreertos.c | 92 ++++++++++++++++++----------------------- 2 files changed, 41 insertions(+), 53 deletions(-) diff --git a/HARDWARE/write.c b/HARDWARE/write.c index 51a1ee2..379d09c 100644 --- a/HARDWARE/write.c +++ b/HARDWARE/write.c @@ -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]; } diff --git a/myfreertos/myfreertos.c b/myfreertos/myfreertos.c index 3ec827f..f87e4c7 100644 --- a/myfreertos/myfreertos.c +++ b/myfreertos/myfreertos.c @@ -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("锟诫传锟斤拷锟斤拷通锟斤拷锟斤拷锟今创斤拷锟缴癸拷\r\n");} + // else{printf("锟诫传锟斤拷锟斤拷通锟斤拷锟斤拷锟今创斤拷失锟斤拷\r\n");} - // //创建控灯任务 + // //锟斤拷锟斤拷锟截碉拷锟斤拷锟斤拷 // 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("锟截碉拷锟斤拷锟今创斤拷锟缴癸拷\r\n");} + // else{printf("锟截碉拷锟斤拷锟今创斤拷失锟斤拷\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); //锟斤拷锟斤拷锟斤拷锟斤拷 + // //sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C); //锟斤拷锟斤拷锟斤拷锟斤拷 // 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; }