代码整理,增加外部传感器

check
Zeng wei (曾威) 2 years ago
parent ab9582ce1b
commit a61b9dfd5f

@ -40,7 +40,7 @@ void PID_Init()
pid.hp_l = 19.2;
pid.hi_l = 0.08;
pid.hd_l = 0;
pid.h_base_l = 30;
pid.h_base_l = 53;
pid.cp = 4.8;
pid.ci = 0;

@ -338,6 +338,9 @@ void RS485_3_Init(u32 bound)
RS485_3_TX_EN = 0;
}
/**
* send data to Serial 1
*/
void RS485_1_Send_Data(u8 *buf, u8 len)
{
u8 t;
@ -353,7 +356,7 @@ void RS485_1_Send_Data(u8 *buf, u8 len)
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
;
RS485_RX_CNT = 0;
// RS485_RX_CNT = 0;
RS485_1_TX_EN = 0;
}
@ -378,7 +381,10 @@ void RS485_1_Send_Data_1(u8 *buf, u8 len)
RS485_1_TX_EN = 0;
}
void RS485_1_Send_Data_2(void)
/**
* upload params to serial 1, HMI
*/
void RS485_1_Upload_Params(void)
{
// when T eq 0 and H eq 0, don't send
if (T == 0 && H == 0) {
@ -392,7 +398,7 @@ void RS485_1_Send_Data_2(void)
sendbuf[46] = 0xFC;
sendbuf[47] = 0xFF;
sendbuf[48] = 0xFF;
// u8 a;
if (T <= 1000 && T >= -1000)
{
if (T < 0) {
@ -497,12 +503,12 @@ void RS485_1_Send_Data_2(void)
// u8 tmpabc[] = {0xAA, 0xBB, 0xCC};
// RS485_1_Send_Data(tmpabc, 3);
// only when modify happen, then send
if (cmp_str(prev_sendbuf, sendbuf, 49) != 0) {
// if (cmp_str(prev_sendbuf, sendbuf, 49) != 0) {
RS485_1_Send_Data(sendbuf, 49);
cp_str_to_prev(prev_sendbuf, sendbuf, 49);
}
// }
}

@ -21,7 +21,7 @@ void RS485_3_Init(u32 bound);
void RS485_1_Send_Data(u8 *buf,u8 len);
void RS485_1_Send_Data_1(u8 *buf,u8 len);
//void RS485_3_Send_Data_1(void);
void RS485_1_Send_Data_2(void);
void RS485_1_Upload_Params(void);
void RS485_1_Send_Data_3(void);
void RS485_3_Send_Data(u8 *buf,u8 len);
void RS485_Receive_Data(u8 *buf,u8 *len);

File diff suppressed because one or more lines are too long

@ -118,7 +118,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U16004A002933353739303541 -O239 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
<Name>-U16004A002933353739303541 -O239 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO19 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>

@ -47,7 +47,7 @@
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\build\Keil\</OutputDirectory>
<OutputDirectory>..\OBJ\</OutputDirectory>
<OutputName>apk</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>

@ -1,6 +1,8 @@
#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 subTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/service/property/set"; // Subscribe topic
@ -8,7 +10,7 @@ char subTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/service/property/set"; // S
#define MQTT_SOCK 5
// task priority
#define START_TASK_PRIO 0
#define START_TASK_PRIO 1
// Task stack size
#define START_STK_SIZE 128
// task handle
@ -41,15 +43,21 @@ void Host_Computer_Communication(void);
* sensor data request: 02 03
*/
void SensorDataRequestTask(void *pvParameters);
// task handle
TaskHandle_t SensorDataRequestTask_Handler;
/**
* sync environment data: EE B5 01
*/
void SyncEnvironmentDataRequestTask(void *pvParameters);
// task handle
TaskHandle_t SyncEnvironmentDataRequestTask_Handler;
/**
* test
*/
void HotTestRequestTask(void *pvParameters);
// task handle
TaskHandle_t HotTestRequestTask_Handler;
@ -81,7 +89,9 @@ u8 Feed_Dog_Count = 0; // Feeding dog timing
u8 now_stage = 1; // Current operational phase
u16 tem, hum, red, blue, white;
u8 hour, min;
u8 rs485buf[8] = {SENSOR_ADDRESS, 0x03, 0x00, 0x01, 0x00, 0x09, 0xD4, 0x3F}; // Sensor exchange data
// 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同步
int T = 0, H = 0, C = 0, G = 0, current_T = 0;
extern u8 total[];
@ -116,13 +126,6 @@ void os_init(void)
(UBaseType_t)START_TASK_PRIO,
(TaskHandle_t *)&StartTask_Handler);
// 创建传感器数据请求任务
xTaskCreate(SensorDataRequestTask, "SensorDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
xTaskCreate(SyncEnvironmentDataRequestTask, "SyncEnvironmentDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL);
xTaskCreate(HotTestRequestTask, "HotTestRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);
vTaskStartScheduler();
}
@ -156,7 +159,8 @@ void start_task(void *pvParameters)
taskENTER_CRITICAL(); // 进入临界区
// 创建与传感器通信任务
handler = xTaskCreate((TaskFunction_t)Sensor_Communication_task,
xTaskCreate(
(TaskFunction_t)Sensor_Communication_task,
(const char *)"Sensor_Communication_task",
(uint16_t)Sensor_Communication_STK_SIZE,
(void *)NULL,
@ -175,6 +179,31 @@ void start_task(void *pvParameters)
// if(handler4==pdPASS){printf("控灯任务创建成功\r\n");}
// else{printf("控灯任务创建失败\r\n");}
// 创建传感器数据请求任务
xTaskCreate(
(TaskFunction_t)SensorDataRequestTask,
(const char *)"SensorDataRequestTask",
(uint16_t)configMINIMAL_STACK_SIZE,
(void *)NULL,
(UBaseType_t)tskIDLE_PRIORITY + 2,
(TaskHandle_t* )&SensorDataRequestTask_Handler);
xTaskCreate(
(TaskFunction_t)SyncEnvironmentDataRequestTask,
(const char *)"SyncEnvironmentDataRequestTask",
(uint16_t)configMINIMAL_STACK_SIZE,
(void *)NULL,
(UBaseType_t)tskIDLE_PRIORITY + 3,
(TaskHandle_t* )&SyncEnvironmentDataRequestTask_Handler);
xTaskCreate(
(TaskFunction_t)HotTestRequestTask,
(const char *)"HotTestRequestTask",
(uint16_t)configMINIMAL_STACK_SIZE,
(void *)NULL,
(UBaseType_t)tskIDLE_PRIORITY + 4,
(TaskHandle_t* )&HotTestRequestTask_Handler);
vTaskDelete(StartTask_Handler); // 删除开始任务
taskEXIT_CRITICAL(); // 退出临界区
@ -184,12 +213,14 @@ void start_task(void *pvParameters)
void SensorDataRequestTask(void *pvParameters) {
while (1) {
// 发送传感器数据请求的操作
RS485_1_Send_Data_1(rs485buf, 8);
delay_xms(100);
RS485_1_Send_Data_1(INNER_SENSOR_485_REQUEST_COMMAND, 8);
vTaskDelay(100);
RS485_1_Send_Data_1(OUTER_SENSOR_485_REQUEST_COMMAND, 8);
vTaskDelay(100);
// RS485_1_Send_Data_1(RS485_RX_BUF, 48);
vTaskDelay(SENSOR_DATA_REQUEST_PERIOD);
vTaskDelay(SENSOR_DATA_REQUEST_PERIOD - 200);
}
}
@ -257,9 +288,8 @@ void Sensor_Communication_task(void *pvParameters)
u8 c = 0;
RS485_RX_CNT = 0;
while (isAllZeros(RS485_RX_BUF_COPY, 128) == 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
@ -267,11 +297,22 @@ void Sensor_Communication_task(void *pvParameters)
for (int i=0;i<23;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);
// 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)
{
// batch update params in a stage
@ -317,7 +358,7 @@ void Sensor_Communication_task(void *pvParameters)
bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 6, 10);
RS485_1_Send_Data_1(RS485_DATA_TMP, 10);
// delay_ms(10);
RS485_1_Send_Data_2(); // 上传参数
RS485_1_Upload_Params(); // 上传参数
// }
RX_BUF_Transfer(0, 6);
}
@ -419,7 +460,7 @@ void Sensor_Communication_task(void *pvParameters)
/**
* process sensor data
*/
void process_sensor_data(u8 *data) {
void process_inner_sensor_data(u8 *data) {
T = data[3];
T = T << 8 | data[4];
// Negative temperature treatment
@ -504,10 +545,34 @@ void process_sensor_data(u8 *data) {
// HC595_Send_Byte(gpio_state);
RS485_1_Send_Data_2(); // 上传参数
RS485_1_Upload_Params(); // 上传参数
// delay_xms(200);
}
/**
* process outer 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
*/
@ -522,93 +587,9 @@ void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) {
now_stage = target_stage;
store_stage = target_stage;
Write_Init();
// delay_ms(10);
RS485_1_Send_Data_2(); // 上传参数
RS485_1_Upload_Params(); // 上传参数
}
break;
}
}
}
// 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");
// }
//}

@ -24,7 +24,8 @@
#include "mqtt_api.h"
void os_init(void);
void process_sensor_data(u8 *data);
void process_inner_sensor_data(u8 *data);
void process_outer_sensor_data(u8 *data);
void process_hmi_btn_event(u8 page_index, u8 btn_index, u8 value);
#endif

Loading…
Cancel
Save