|
|
|
|
@ -37,7 +37,7 @@ extern float ki;
|
|
|
|
|
u8 batch_sync_buf[11];//单个同步剪切得到的数组
|
|
|
|
|
u8 ins_1=0;
|
|
|
|
|
int diff=0;
|
|
|
|
|
u8 gpio_state=0x02;//继电器状态
|
|
|
|
|
u8 gpio_state=0x00;//继电器状态
|
|
|
|
|
u8 NUM=1;//批量同步发送的阶段号
|
|
|
|
|
u8 n;//阶段号
|
|
|
|
|
u16 i;//序列号
|
|
|
|
|
@ -59,7 +59,7 @@ int T=0,H=0,C=0,G=0, current_T=0;
|
|
|
|
|
extern u8 total[];
|
|
|
|
|
float Humidity=0;
|
|
|
|
|
float temperature=0;
|
|
|
|
|
unsigned int num=0;
|
|
|
|
|
|
|
|
|
|
//u8 RS485_RX_BUF[64];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -192,7 +192,7 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
//printf("now_tem=%d.%d℃,now_hum=%d.%d%% ,co2=%d\r\n",T/10,T%10,H/10,H%10,C);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*GPIO1->报警铃 GPIO2->压缩机 GPIO3->四通阀 GPIO4—>新风风扇 GPIO5->加湿器 */
|
|
|
|
|
/*GPIO1->报警铃 GPIO6->压缩机 GPIO3->加热棒 GPIO4—>新风风扇 GPIO5->加湿器 */
|
|
|
|
|
|
|
|
|
|
if((T<(tem-20)||T>(tem+20)||H<(hum-100)||H>(hum+100))&&(tick>610))//温度偏差2℃报警,湿度偏差10报警
|
|
|
|
|
{
|
|
|
|
|
@ -213,8 +213,11 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
pid.set_tem=tem/10.0;
|
|
|
|
|
pid.now_tem=T/10.0;
|
|
|
|
|
PID_Calc();
|
|
|
|
|
num=(((pid.OUT*400)/pid.pwmcycle)-1);//请问这个pid.OUT与pwm占空比的值是如何换算过来的
|
|
|
|
|
TIM_SetCompare3(TIM3,0.845*num); //0-200对应0-100%,如果pid.out=50,占空比就是25%,//num=50*400/200=100,100/400=25%
|
|
|
|
|
//num=(((pid.OUT*400)/pid.pwmcycle)-1);//请问这个pid.OUT与pwm占空比的值是如何换算过来的
|
|
|
|
|
//TIM_SetCompare3(TIM3,num);
|
|
|
|
|
//TIM_SetCompare3(TIM3,0.845*num);
|
|
|
|
|
//printf("%d\r\n",num);
|
|
|
|
|
//0-200对应0-100%,如果pid.out=50,占空比就是25%,//num=50*400/200=100,100/400=25%
|
|
|
|
|
//printf("%d ,%d ,%d ,%d ,%f ,%f ,%f ,%f ,%f ,%f ,%f ,%.3f\r\n",T,H,C,num,(pid.set_tem*10),pid.Kp,ki,kd,pid.Pout,pid.Iout,pid.Dout,num/399.0);
|
|
|
|
|
current_T=T;
|
|
|
|
|
}
|
|
|
|
|
@ -252,64 +255,17 @@ void Sensor_Communication_task(void *pvParameters)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Host_Computer_Communication();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// int index=0;
|
|
|
|
|
// //if()与while()的顺序不能变
|
|
|
|
|
// if((RS485_RX_BUF_COPY[0]!=0x00))//不为0,处理掉
|
|
|
|
|
// {
|
|
|
|
|
// RX_BUF_Transfer(0,1);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// while(RS485_RX_BUF_COPY[index]==0x00)
|
|
|
|
|
// {
|
|
|
|
|
// index++;
|
|
|
|
|
// }
|
|
|
|
|
// RX_BUF_Transfer(0,index);
|
|
|
|
|
// printf("previous array cut\r\n");
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("%d,%d,%d\r\n",T,H,C);
|
|
|
|
|
//printf("current params: %d:%d,hot or cold flag:%d, humidity flag:%d, alarm: %d\r\n",chour, cminute, hot_clod_flag, humidity_flag, ALARM);
|
|
|
|
|
//printf("led!!!\r\n");
|
|
|
|
|
if(red<=1000&&blue<=1000)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
PWM_SetCompare1((red/100.0*3.5+28));//J9
|
|
|
|
|
PWM_SetCompare2((blue/100.0*3.5+28));//J11
|
|
|
|
|
PWM_SetCompare4((white/100.0*3.5+28));//J10
|
|
|
|
|
//printf("red=%d\r\n",red);
|
|
|
|
|
//printf("bule=%d\r\n",blue);
|
|
|
|
|
}
|
|
|
|
|
RS485_RX_CNT=0;
|
|
|
|
|
//printf("end data to serial monitor end");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)//单个同步
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB6&&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);
|
|
|
|
|
|
|
|
|
|
//printf("batch sync over\r\n");
|
|
|
|
|
//RX_BUF_Printf(128);
|
|
|
|
|
}
|
|
|
|
|
if(RS485_RX_BUF_COPY[2]==0x04)//阶段切换
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB6&&RS485_RX_BUF_COPY[2]==0x04)
|
|
|
|
|
{
|
|
|
|
|
change_stage_rev1=RS485_RX_BUF_COPY[3];
|
|
|
|
|
//printf("B6 04 cmd: change stage\r\n");
|
|
|
|
|
@ -318,67 +274,166 @@ void Host_Computer_Communication(void)
|
|
|
|
|
store_stage=change_stage_rev1;
|
|
|
|
|
Write_Init();
|
|
|
|
|
RX_BUF_Transfer(0,8);
|
|
|
|
|
//printf("change stage over\r\n");
|
|
|
|
|
//RX_BUF_Printf(128);
|
|
|
|
|
}
|
|
|
|
|
if(RS485_RX_BUF_COPY[2]==0x01)//批量同步
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB6&&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();减少擦写的次数
|
|
|
|
|
//printf("get one over\r\n");
|
|
|
|
|
RX_BUF_Transfer(0,20);
|
|
|
|
|
//RX_BUF_Printf(128);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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)//单个同步默认带的数据
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1&&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)//单个同步默认带的数据
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1&&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)//阶段切换默认带的数据
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1&&RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[12]==0xFF&&RS485_RX_BUF[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)//上位机默认带的数据
|
|
|
|
|
else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1&&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;
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if((RS485_RX_BUF_COPY[0]!=0x00))//不为0,处理掉
|
|
|
|
|
{
|
|
|
|
|
RX_BUF_Transfer(0,1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while(RS485_RX_BUF_COPY[ZERO_Count]==0x00)
|
|
|
|
|
{
|
|
|
|
|
ZERO_Count++;
|
|
|
|
|
}
|
|
|
|
|
RX_BUF_Transfer(0,ZERO_Count);
|
|
|
|
|
//printf("previous array cut\r\n");
|
|
|
|
|
//RX_BUF_Printf(128);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// printf("%d,%d,%d\r\n",T,H,C);
|
|
|
|
|
//printf("current params: %d:%d,hot or cold flag:%d, humidity flag:%d, alarm: %d\r\n",chour, cminute, hot_clod_flag, humidity_flag, ALARM);
|
|
|
|
|
//printf("led!!!\r\n");
|
|
|
|
|
if(red<=1000&&blue<=1000)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
PWM_SetCompare1((red/100.0*3.5+28));//J9
|
|
|
|
|
PWM_SetCompare2((blue/100.0*3.5+28));//J11
|
|
|
|
|
PWM_SetCompare4((white/100.0*3.5+28));//J10
|
|
|
|
|
//printf("red=%d\r\n",red);
|
|
|
|
|
//printf("bule=%d\r\n",blue);
|
|
|
|
|
}
|
|
|
|
|
RS485_RX_CNT=0;
|
|
|
|
|
//printf("end data to serial monitor end");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//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");
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|