|
|
|
@ -1,6 +1,7 @@
|
|
|
|
#include "myfreertos.h"
|
|
|
|
#include "myfreertos.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define SENSOR_ADDRESS 0x02
|
|
|
|
#define INNER_SENSOR_ADDRESS 0x02
|
|
|
|
|
|
|
|
#define OUTER_SENSOR_ADDRESS 0x04
|
|
|
|
|
|
|
|
|
|
|
|
char pubTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/event/property/post"; // Publish topic
|
|
|
|
char pubTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/event/property/post"; // Publish topic
|
|
|
|
char subTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/service/property/set"; // Subscribe topic
|
|
|
|
char subTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/service/property/set"; // Subscribe topic
|
|
|
|
@ -36,7 +37,6 @@ void Host_Computer_Communication(void);
|
|
|
|
// 1seconds delay
|
|
|
|
// 1seconds delay
|
|
|
|
#define MAIN_TASK_PERIOD pdMS_TO_TICKS(1000)
|
|
|
|
#define MAIN_TASK_PERIOD pdMS_TO_TICKS(1000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* sensor data request: 02 03
|
|
|
|
* sensor data request: 02 03
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@ -51,8 +51,6 @@ void SyncEnvironmentDataRequestTask(void *pvParameters);
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void HotTestRequestTask(void *pvParameters);
|
|
|
|
void HotTestRequestTask(void *pvParameters);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int isZeros(u8 arr[]);
|
|
|
|
int isZeros(u8 arr[]);
|
|
|
|
u8 RS485_RX_BUF_COPY[128] = {0};
|
|
|
|
u8 RS485_RX_BUF_COPY[128] = {0};
|
|
|
|
u8 RS485_DATA_TMP[128] = {0};
|
|
|
|
u8 RS485_DATA_TMP[128] = {0};
|
|
|
|
@ -81,14 +79,14 @@ u8 Feed_Dog_Count = 0; // Feeding dog timing
|
|
|
|
u8 now_stage = 1; // Current operational phase
|
|
|
|
u8 now_stage = 1; // Current operational phase
|
|
|
|
u16 tem, hum, red, blue, white;
|
|
|
|
u16 tem, hum, red, blue, white;
|
|
|
|
u8 hour, min;
|
|
|
|
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; // 同步环境控制参数的计数器,到0同步
|
|
|
|
int T = 0, H = 0, C = 0, G = 0, current_T = 0;
|
|
|
|
int T = 0, H = 0, C = 0, G = 0, current_T = 0;
|
|
|
|
extern u8 total[];
|
|
|
|
extern u8 total[];
|
|
|
|
float Humidity = 0;
|
|
|
|
float Humidity = 0;
|
|
|
|
float temperature = 0;
|
|
|
|
float temperature = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// pages in hmi
|
|
|
|
// pages in hmi
|
|
|
|
#define page_index 43
|
|
|
|
#define page_index 43
|
|
|
|
#define page_curve 45
|
|
|
|
#define page_curve 45
|
|
|
|
@ -101,6 +99,24 @@ float temperature = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// u8 RS485_RX_BUF[64];
|
|
|
|
// u8 RS485_RX_BUF[64];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************
|
|
|
|
|
|
|
|
**********************
|
|
|
|
|
|
|
|
Create handles for tasks, queues, signal sets, etc., which can also be tested using
|
|
|
|
|
|
|
|
**********************
|
|
|
|
|
|
|
|
*********************/
|
|
|
|
|
|
|
|
BaseType_t handler = 0;
|
|
|
|
|
|
|
|
BaseType_t handler1 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler2 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler3 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler4 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler5 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler6 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler7 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler8 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler9 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler10 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler11 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/*********************
|
|
|
|
/*********************
|
|
|
|
**********************
|
|
|
|
**********************
|
|
|
|
entry function
|
|
|
|
entry function
|
|
|
|
@ -117,33 +133,13 @@ void os_init(void)
|
|
|
|
(TaskHandle_t *)&StartTask_Handler);
|
|
|
|
(TaskHandle_t *)&StartTask_Handler);
|
|
|
|
|
|
|
|
|
|
|
|
// 创建传感器数据请求任务
|
|
|
|
// 创建传感器数据请求任务
|
|
|
|
xTaskCreate(SensorDataRequestTask, "SensorDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
|
|
|
|
xTaskCreate(SensorDataRequestTask, "SensorDataRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 6, NULL);
|
|
|
|
|
|
|
|
xTaskCreate(SyncEnvironmentDataRequestTask, "SyncEnvironmentDataRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 7, NULL);
|
|
|
|
xTaskCreate(SyncEnvironmentDataRequestTask, "SyncEnvironmentDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL);
|
|
|
|
xTaskCreate(HotTestRequestTask, "HotTestRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 8, NULL);
|
|
|
|
xTaskCreate(HotTestRequestTask, "HotTestRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vTaskStartScheduler();
|
|
|
|
vTaskStartScheduler();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*********************
|
|
|
|
|
|
|
|
**********************
|
|
|
|
|
|
|
|
Create handles for tasks, queues, signal sets, etc., which can also be tested using
|
|
|
|
|
|
|
|
**********************
|
|
|
|
|
|
|
|
*********************/
|
|
|
|
|
|
|
|
BaseType_t handler = 0;
|
|
|
|
|
|
|
|
BaseType_t handler1 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler2 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler3 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler4 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler5 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler6 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler7 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler8 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler9 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler10 = 0;
|
|
|
|
|
|
|
|
BaseType_t handler11 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
|
|
Start function: Create other functions and timers
|
|
|
|
Start function: Create other functions and timers
|
|
|
|
@ -160,7 +156,8 @@ void start_task(void *pvParameters)
|
|
|
|
(const char *)"Sensor_Communication_task",
|
|
|
|
(const char *)"Sensor_Communication_task",
|
|
|
|
(uint16_t)Sensor_Communication_STK_SIZE,
|
|
|
|
(uint16_t)Sensor_Communication_STK_SIZE,
|
|
|
|
(void *)NULL,
|
|
|
|
(void *)NULL,
|
|
|
|
(UBaseType_t)Sensor_Communication_TASK_PRIO,
|
|
|
|
// (UBaseType_t)Sensor_Communication_TASK_PRIO,
|
|
|
|
|
|
|
|
tskIDLE_PRIORITY + 4,
|
|
|
|
(TaskHandle_t *)&Sensor_CommunicationTask_Handler);
|
|
|
|
(TaskHandle_t *)&Sensor_CommunicationTask_Handler);
|
|
|
|
// if(handler==pdPASS){printf("与传感器通信任务创建成功\r\n");}
|
|
|
|
// if(handler==pdPASS){printf("与传感器通信任务创建成功\r\n");}
|
|
|
|
// else{printf("与传感器通信任务创建失败\r\n");}
|
|
|
|
// else{printf("与传感器通信任务创建失败\r\n");}
|
|
|
|
@ -175,25 +172,33 @@ void start_task(void *pvParameters)
|
|
|
|
// if(handler4==pdPASS){printf("控灯任务创建成功\r\n");}
|
|
|
|
// if(handler4==pdPASS){printf("控灯任务创建成功\r\n");}
|
|
|
|
// else{printf("控灯任务创建失败\r\n");}
|
|
|
|
// else{printf("控灯任务创建失败\r\n");}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelete(StartTask_Handler); // 删除开始任务
|
|
|
|
vTaskDelete(StartTask_Handler); // 删除开始任务
|
|
|
|
taskEXIT_CRITICAL(); // 退出临界区
|
|
|
|
taskEXIT_CRITICAL(); // 退出临界区
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SensorDataRequestTask(void *pvParameters)
|
|
|
|
void SensorDataRequestTask(void *pvParameters) {
|
|
|
|
{
|
|
|
|
while (1) {
|
|
|
|
while (1)
|
|
|
|
|
|
|
|
{
|
|
|
|
// 发送传感器数据请求的操作
|
|
|
|
// 发送传感器数据请求的操作
|
|
|
|
RS485_1_Send_Data_1(rs485buf, 8);
|
|
|
|
RS485_1_Send_Data_1(INNER_SENSOR_485_REQUEST_COMMAND, 8);
|
|
|
|
// delay_xms(100);
|
|
|
|
vTaskDelay(100);
|
|
|
|
|
|
|
|
RS485_1_Send_Data_1(OUTER_SENSOR_485_REQUEST_COMMAND, 8);
|
|
|
|
|
|
|
|
vTaskDelay(100);
|
|
|
|
|
|
|
|
process_485_task();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PID_Calc();
|
|
|
|
// RS485_1_Send_Data_1(RS485_RX_BUF, 48);
|
|
|
|
// RS485_1_Send_Data_1(RS485_RX_BUF, 48);
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelay(SENSOR_DATA_REQUEST_PERIOD);
|
|
|
|
vTaskDelay(4800);
|
|
|
|
|
|
|
|
// vTaskDelay(SENSOR_DATA_REQUEST_PERIOD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SyncEnvironmentDataRequestTask(void *pvParameters) {
|
|
|
|
void SyncEnvironmentDataRequestTask(void *pvParameters)
|
|
|
|
while (1) {
|
|
|
|
{
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
|
|
|
{
|
|
|
|
RS485_1_Send_Data_3();
|
|
|
|
RS485_1_Send_Data_3();
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelay(SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD);
|
|
|
|
vTaskDelay(SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD);
|
|
|
|
@ -204,117 +209,54 @@ int hot = 0;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* pid计算,每5秒一次
|
|
|
|
* pid计算,每5秒一次
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void HotTestRequestTask(void *pvParameters) {
|
|
|
|
void HotTestRequestTask(void *pvParameters)
|
|
|
|
while (1) {
|
|
|
|
{
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
PID_Calc();
|
|
|
|
{
|
|
|
|
// if (T >= 350) {
|
|
|
|
|
|
|
|
// hot = 0;
|
|
|
|
|
|
|
|
// hot_clod_flag = 0;
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// hot = 52;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// hot_clod_flag = 2;
|
|
|
|
|
|
|
|
// // hot += 10;
|
|
|
|
|
|
|
|
// // if (hot > 100) {
|
|
|
|
|
|
|
|
// // hot = 10;
|
|
|
|
|
|
|
|
// // }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// u8 temp_data[8] = { 0x10, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// temp_data[4] = hot / 256;
|
|
|
|
|
|
|
|
// temp_data[5] = hot % 256;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// GetCRC16(temp_data, 6, temp_data + 6, temp_data + 7);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RS485_3_Init(9600);
|
|
|
|
|
|
|
|
// RS485_3_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// // RS485_1_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// delay_xms(30);
|
|
|
|
|
|
|
|
// RS485_1_Init(9600);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HC595_Send_Byte(gpio_state |= 0x04); // open heater |=0000 0100 0x04
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// vTaskDelay(60000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// temp_data[4] = 0;
|
|
|
|
|
|
|
|
// temp_data[5] = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// GetCRC16(temp_data, 6, temp_data + 6, temp_data + 7);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // RS485_3_Init(9600);
|
|
|
|
|
|
|
|
// RS485_1_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// // RS485_3_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// // delay_xms(30);
|
|
|
|
|
|
|
|
// // RS485_1_Init(9600);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // HC595_Send_Byte(gpio_state &= 0xFB); // close heater &=1111 1011 0xFB
|
|
|
|
// PID_Calc();
|
|
|
|
// hot_clod_flag = 0;
|
|
|
|
RS485_1_Send_Data_2(); // 上传参数
|
|
|
|
|
|
|
|
|
|
|
|
vTaskDelay(5000);
|
|
|
|
vTaskDelay(5000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u8 temp[4] = {0xaa, 0xbb, 0xcc, 0xdd};
|
|
|
|
u8 temp[4] = {0xaa, 0xbb, 0xcc, 0xdd};
|
|
|
|
u8 times = 0;
|
|
|
|
u8 times = 0;
|
|
|
|
void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
void process_485_task(void) {
|
|
|
|
{
|
|
|
|
|
|
|
|
// RS485_3_Init(9600);
|
|
|
|
|
|
|
|
// // temp[2] = (int)pid.Ki / 256;
|
|
|
|
|
|
|
|
// // temp[3] = (int)pid.Ki % 256;
|
|
|
|
|
|
|
|
// temp[2] = 4800 / 256;
|
|
|
|
|
|
|
|
// temp[3] = 4800 % 256;
|
|
|
|
|
|
|
|
// RS485_3_Send_Data(temp, 4);
|
|
|
|
|
|
|
|
// // RS485_1_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// delay_xms(30);
|
|
|
|
|
|
|
|
// RS485_1_Init(9600);
|
|
|
|
|
|
|
|
// RS485_1_Send_Data(temp, 4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HC595_Send_Byte(0x00);
|
|
|
|
|
|
|
|
// cnt_flag=do_mqtt(MQTT_SOCK,NET_CONFIG.rip,1883,5500);
|
|
|
|
|
|
|
|
// 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); //构建数据
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// if(cnt_flag)time++;
|
|
|
|
|
|
|
|
// if(time==50){
|
|
|
|
|
|
|
|
// time=0;
|
|
|
|
|
|
|
|
// pingMqtt(MQTT_SOCK);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
now_stage = timelong_Compare();
|
|
|
|
now_stage = timelong_Compare();
|
|
|
|
Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // 更新对应阶段号的参数
|
|
|
|
Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // 更新对应阶段号的参数
|
|
|
|
|
|
|
|
|
|
|
|
delay_xms(50);
|
|
|
|
delay_xms(50);
|
|
|
|
|
|
|
|
|
|
|
|
bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128);
|
|
|
|
bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128);
|
|
|
|
u8 c = 0;
|
|
|
|
|
|
|
|
RS485_RX_CNT = 0;
|
|
|
|
RS485_RX_CNT = 0;
|
|
|
|
while (isAllZeros(RS485_RX_BUF_COPY, 128) == 0)
|
|
|
|
while (isAllZeros(RS485_RX_BUF_COPY, 128) == 0)
|
|
|
|
// while (RS485_RX_CNT > 0)
|
|
|
|
// while (RS485_RX_CNT > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (RS485_RX_BUF_COPY[0] == 0x02 && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1)
|
|
|
|
if (RS485_RX_BUF_COPY[0] == INNER_SENSOR_ADDRESS && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
c++;
|
|
|
|
|
|
|
|
// receive message from sensor
|
|
|
|
// receive message from sensor
|
|
|
|
u8 temp_data[23] = {0};
|
|
|
|
u8 temp_data[23] = {0};
|
|
|
|
for (int i=0;i<23;i++) {
|
|
|
|
for (int i = 0; i < 23; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
temp_data[i] = RS485_RX_BUF_COPY[i];
|
|
|
|
temp_data[i] = RS485_RX_BUF_COPY[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
process_sensor_data(temp_data);
|
|
|
|
process_inner_sensor_data(temp_data);
|
|
|
|
RX_BUF_Transfer(0, 23);
|
|
|
|
RX_BUF_Transfer(0, 23);
|
|
|
|
// u8 tmpaaa[] = {c};
|
|
|
|
}
|
|
|
|
// RS485_1_Send_Data_1(tmpaaa, 1);
|
|
|
|
else if (RS485_RX_BUF_COPY[0] == OUTER_SENSOR_ADDRESS && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 7) == 1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// receive message from sensor
|
|
|
|
|
|
|
|
u8 temp_data[9] = {0};
|
|
|
|
|
|
|
|
for (int i = 0; i < 9; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
temp_data[i] = RS485_RX_BUF_COPY[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
process_outer_sensor_data(temp_data);
|
|
|
|
|
|
|
|
RX_BUF_Transfer(0, 9);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (RS485_RX_BUF_COPY[0] == 0xEE && RS485_RX_BUF_COPY[1] == 0xB6 && RS485_RX_BUF_COPY[2] == 0x01 && CRC16_check(RS485_RX_BUF_COPY, 16) == 1)
|
|
|
|
else if (RS485_RX_BUF_COPY[0] == 0xEE && RS485_RX_BUF_COPY[1] == 0xB6 && RS485_RX_BUF_COPY[2] == 0x01 && CRC16_check(RS485_RX_BUF_COPY, 16) == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -370,7 +312,8 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
// change pid params
|
|
|
|
// change pid params
|
|
|
|
// total length: 8
|
|
|
|
// total length: 8
|
|
|
|
int param_index = RS485_RX_BUF_COPY[3];
|
|
|
|
int param_index = RS485_RX_BUF_COPY[3];
|
|
|
|
switch(param_index) {
|
|
|
|
switch (param_index)
|
|
|
|
|
|
|
|
{
|
|
|
|
case 0x01:
|
|
|
|
case 0x01:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pid.Kp = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5];
|
|
|
|
pid.Kp = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5];
|
|
|
|
@ -389,7 +332,7 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
case 0x04:
|
|
|
|
case 0x04:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int tem_offset_10times = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5];
|
|
|
|
int tem_offset_10times = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5];
|
|
|
|
// Negative tem offset treatment
|
|
|
|
// Negative temperature offset treatment
|
|
|
|
if (tem_offset_10times & 0x8000)
|
|
|
|
if (tem_offset_10times & 0x8000)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
tem_offset_10times = ((~tem_offset_10times + 1) & 0xFFFF);
|
|
|
|
tem_offset_10times = ((~tem_offset_10times + 1) & 0xFFFF);
|
|
|
|
@ -454,16 +397,49 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
// PWM_SetCompare4((white / 100.0 * 3.5 + 28)); // J10
|
|
|
|
// PWM_SetCompare4((white / 100.0 * 3.5 + 28)); // J10
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
RS485_RX_CNT = 0;
|
|
|
|
RS485_RX_CNT = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// RS485_3_Init(9600);
|
|
|
|
|
|
|
|
// // temp[2] = (int)pid.Ki / 256;
|
|
|
|
|
|
|
|
// // temp[3] = (int)pid.Ki % 256;
|
|
|
|
|
|
|
|
// temp[2] = 4800 / 256;
|
|
|
|
|
|
|
|
// temp[3] = 4800 % 256;
|
|
|
|
|
|
|
|
// RS485_3_Send_Data(temp, 4);
|
|
|
|
|
|
|
|
// // RS485_1_Send_Data(temp_data, 8);
|
|
|
|
|
|
|
|
// delay_xms(30);
|
|
|
|
|
|
|
|
// RS485_1_Init(9600);
|
|
|
|
|
|
|
|
// RS485_1_Send_Data(temp, 4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HC595_Send_Byte(0x00);
|
|
|
|
|
|
|
|
// cnt_flag=do_mqtt(MQTT_SOCK,NET_CONFIG.rip,1883,5500);
|
|
|
|
|
|
|
|
// 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); //构建数据
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// if(cnt_flag)time++;
|
|
|
|
|
|
|
|
// if(time==50){
|
|
|
|
|
|
|
|
// time=0;
|
|
|
|
|
|
|
|
// pingMqtt(MQTT_SOCK);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
process_485_task();
|
|
|
|
vTaskDelay(MAIN_TASK_PERIOD);
|
|
|
|
vTaskDelay(MAIN_TASK_PERIOD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* process sensor data
|
|
|
|
* process inner sensor data
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void process_sensor_data(u8 *data) {
|
|
|
|
void process_inner_sensor_data(u8 *data)
|
|
|
|
|
|
|
|
{
|
|
|
|
T = data[3];
|
|
|
|
T = data[3];
|
|
|
|
T = T << 8 | data[4];
|
|
|
|
T = T << 8 | data[4];
|
|
|
|
// Negative temperature treatment
|
|
|
|
// Negative temperature treatment
|
|
|
|
@ -508,6 +484,10 @@ void process_sensor_data(u8 *data) {
|
|
|
|
// // }
|
|
|
|
// // }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果目标温度变化(新的目标温度和现在的目标温度相差大于等于0.1度),则清除误差累计
|
|
|
|
|
|
|
|
if (pid.set_tem - tem / 10.0 >= 0.1 || pid.set_tem - tem / 10.0 <= -0.1) {
|
|
|
|
|
|
|
|
pid.SEk = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
pid.set_tem = tem / 10.0;
|
|
|
|
pid.set_tem = tem / 10.0;
|
|
|
|
pid.now_tem = T / 10.0;
|
|
|
|
pid.now_tem = T / 10.0;
|
|
|
|
// PID_Calc();
|
|
|
|
// PID_Calc();
|
|
|
|
@ -552,15 +532,42 @@ void process_sensor_data(u8 *data) {
|
|
|
|
// delay_xms(200);
|
|
|
|
// delay_xms(200);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* process inner sensor data
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
void process_outer_sensor_data(u8 *data)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int out_tem = data[3];
|
|
|
|
|
|
|
|
out_tem = out_tem << 8 | data[4];
|
|
|
|
|
|
|
|
// Negative temperature treatment
|
|
|
|
|
|
|
|
if (out_tem & 0x8000)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
out_tem = ((~out_tem + 1) & 0xFFFF);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pid.out_tem = (float)out_tem / 10;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int out_humidity = data[5];
|
|
|
|
|
|
|
|
out_humidity = out_humidity << 8 | data[6];
|
|
|
|
|
|
|
|
// Negative temperature treatment
|
|
|
|
|
|
|
|
if (out_humidity & 0x8000)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
out_humidity = ((~out_humidity + 1) & 0xFFFF);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pid.out_humidity = out_humidity;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* hmi event process
|
|
|
|
* hmi event process
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) {
|
|
|
|
void process_hmi_btn_event(u8 page, u8 btn_index, u8 value)
|
|
|
|
switch(page) {
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (page)
|
|
|
|
|
|
|
|
{
|
|
|
|
case page_param_adjust:
|
|
|
|
case page_param_adjust:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// change current stage
|
|
|
|
// change current stage
|
|
|
|
if (btn_index >= 45 && btn_index <= 50 && value == 0x01) {
|
|
|
|
if (btn_index >= 45 && btn_index <= 50 && value == 0x01)
|
|
|
|
|
|
|
|
{
|
|
|
|
int target_stage = btn_index - 44;
|
|
|
|
int target_stage = btn_index - 44;
|
|
|
|
RTC_synchronization_ins(2023, 9, 1, 0, 00, 00);
|
|
|
|
RTC_synchronization_ins(2023, 9, 1, 0, 00, 00);
|
|
|
|
now_stage = target_stage;
|
|
|
|
now_stage = target_stage;
|
|
|
|
@ -573,86 +580,3 @@ void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// void Host_Computer_Communication(void)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB6)
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x03)//单个同步
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// Analysis(&n,&i,RS485_RX_BUF_COPY);
|
|
|
|
|
|
|
|
// //printf("B6 03 cmd: batch sync\r\n");
|
|
|
|
|
|
|
|
// Array(&now_stage,&hour,&min,&tem,&hum,&red,&blue,&white);//更新对应阶段号的参数
|
|
|
|
|
|
|
|
// Write_Init();
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,11);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x04)//阶段切换
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// change_stage_rev1=RS485_RX_BUF_COPY[3];
|
|
|
|
|
|
|
|
// //printf("B6 04 cmd: change stage\r\n");
|
|
|
|
|
|
|
|
// RTC_synchronization_ins(2023,9,1,0,00,00);
|
|
|
|
|
|
|
|
// now_stage=change_stage_rev1;
|
|
|
|
|
|
|
|
// store_stage=change_stage_rev1;
|
|
|
|
|
|
|
|
// Write_Init();
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,8);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x01)//批量同步
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// Batch_synchronization(&n,RS485_RX_BUF_COPY);
|
|
|
|
|
|
|
|
// //printf("B6 01 cmd: get one %d\r\n", n);
|
|
|
|
|
|
|
|
// Array(&now_stage,&hour,&min,&tem,&hum,&red,&blue,&white);//更新对应阶段号的参数
|
|
|
|
|
|
|
|
// //Write_Init();减少擦写的次数
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,20);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1)
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[15]==0xFF&&RS485_RX_BUF[16]==0xFF)//单个同步默认带的数据
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// //printf("cut overdata of B6 03 \r\n");
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,17);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[14]==0xFF&&RS485_RX_BUF[15]==0xFF)//单个同步默认带的数据
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// //printf("cut overdata of B6 03 \r\n");
|
|
|
|
|
|
|
|
// //RX_BUF_Printf(128);
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,16);
|
|
|
|
|
|
|
|
// //RX_BUF_Printf(128);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[12]==0xFF&&RS485_RX_BUF_COPY[13]==0xFF)//阶段切换默认带的数据
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// //printf("cut overdata of B6 04 \r\n");
|
|
|
|
|
|
|
|
// //RX_BUF_Printf(128);
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,14);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if(RS485_RX_BUF_COPY[2]==0x01&&RS485_RX_BUF_COPY[7]==0xFF&&RS485_RX_BUF_COPY[8]==0xFF)//上位机默认带的数据
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// //printf("cut overdata of Upper computer \r\n");
|
|
|
|
|
|
|
|
// //RX_BUF_Printf(128);
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,9);
|
|
|
|
|
|
|
|
// //RX_BUF_Printf(128);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// //int ZERO_Count=0;
|
|
|
|
|
|
|
|
// //if()与while()的顺序不能变
|
|
|
|
|
|
|
|
//// if((RS485_RX_BUF_COPY[0]!=0x00))//不为0,处理掉
|
|
|
|
|
|
|
|
//// {
|
|
|
|
|
|
|
|
//// RX_BUF_Transfer(0,1);
|
|
|
|
|
|
|
|
//// //printf("the number is no zero\r\n");
|
|
|
|
|
|
|
|
//// }
|
|
|
|
|
|
|
|
////
|
|
|
|
|
|
|
|
//// while(RS485_RX_BUF_COPY[ZERO_Count]==0x00)
|
|
|
|
|
|
|
|
//// {
|
|
|
|
|
|
|
|
//// ZERO_Count++;
|
|
|
|
|
|
|
|
//// }
|
|
|
|
|
|
|
|
//// RX_BUF_Transfer(0,ZERO_Count);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// RX_BUF_Transfer(0,1);
|
|
|
|
|
|
|
|
// //printf("previous array cut\r\n");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|