feat: 06-17 신규 작업본 반영 (개발사양서/기능검토/승인원/Source 등 추가)
.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,733 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "Nano100Series.h"
|
||||
#include "adc.h"
|
||||
#include "gpio.h"
|
||||
#include "pwm.h"
|
||||
#include "timer.h"
|
||||
#include "uart.h"
|
||||
#include "sys.h"
|
||||
#include "clk.h"
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
extern volatile uint8_t Rx_rs485_TimeOut ;
|
||||
|
||||
extern volatile uint8_t Power_On;
|
||||
extern volatile uint8_t Tx_Run_Mode;
|
||||
extern volatile uint8_t Tx_Fan_Speed;
|
||||
extern volatile uint8_t Tx_Reservation_Hour;
|
||||
|
||||
|
||||
extern uint8_t Ventilation_SA[5];
|
||||
extern uint8_t Ventilation_EA[5];
|
||||
extern uint8_t AirClean_SA[5];
|
||||
extern uint8_t AirClean_EA[5];
|
||||
extern uint8_t Bypass_SA[5];
|
||||
extern uint8_t Bypass_EA[5];
|
||||
extern uint8_t Test_Mode_Step;
|
||||
|
||||
volatile uint8_t Tx_Data_Mode = TX_DATA_MODE_REQUEST1;
|
||||
uint16_t Main_Err_Code = 0;
|
||||
|
||||
volatile uint16_t Update_Event = 0;
|
||||
|
||||
|
||||
const unsigned char auchCRCHi[] = {
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
|
||||
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
|
||||
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
|
||||
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
|
||||
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
|
||||
} ;
|
||||
|
||||
// Table of CRC values for low-order byte
|
||||
const unsigned char auchCRCLo[] = {
|
||||
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
|
||||
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
|
||||
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
|
||||
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
|
||||
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
|
||||
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
|
||||
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
|
||||
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
|
||||
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
|
||||
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
|
||||
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
|
||||
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
|
||||
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
|
||||
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
|
||||
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
|
||||
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
|
||||
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
|
||||
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
|
||||
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
|
||||
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
|
||||
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
|
||||
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
|
||||
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
|
||||
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
|
||||
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
|
||||
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
|
||||
} ;
|
||||
|
||||
uint16_t CRC16(uint8_t *puchMsg, uint16_t usDataLen)
|
||||
{
|
||||
uint8_t uchCRCHi = 0xFF ; // high CRC byte initialized
|
||||
uint8_t uchCRCLo = 0xFF ; // low CRC byte initialized
|
||||
uint8_t uIndex ; // will index into CRC lookup table
|
||||
|
||||
while (usDataLen--) // pass through message buffer
|
||||
{
|
||||
uIndex = uchCRCHi ^ *puchMsg++ ; // calculate the CRC
|
||||
|
||||
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
|
||||
uchCRCLo = auchCRCLo[uIndex] ;
|
||||
}
|
||||
return ((uint16_t)uchCRCHi << 8 | (uint16_t)uchCRCLo) ;
|
||||
|
||||
}
|
||||
|
||||
uint16_t Aeverage_calculator(uint16_t val, uint16_t * array_val)
|
||||
{
|
||||
uint8_t i;
|
||||
uint16_t max = 0;
|
||||
uint16_t min = 10000;
|
||||
uint32_t sum = 0;
|
||||
uint16_t Rval = 0;
|
||||
|
||||
for(i=9; i>0; i--)
|
||||
{
|
||||
*(array_val+i) = *(array_val+i-1);
|
||||
}
|
||||
*array_val = val;
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
{
|
||||
if(array_val[i] >= max)
|
||||
{
|
||||
max = array_val[i];
|
||||
}
|
||||
if(array_val[i] <= min)
|
||||
{
|
||||
min = array_val[i];
|
||||
}
|
||||
sum += array_val[i];
|
||||
}
|
||||
Rval = (uint16_t)((sum - max - min)/8);
|
||||
|
||||
return(Rval);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////
|
||||
extern volatile uint8_t Rx_modbus_TimeOut;
|
||||
|
||||
void Rx_modbus_Check(uint8_t data)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void SC0_IRQHandler(void)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
data = SCUART_READ(SC0);
|
||||
Rx_modbus_Check(data);
|
||||
Rx_modbus_TimeOut = 5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
uint8_t Tx_rs485_buffer[25];
|
||||
uint8_t Rx_rs485_buffer[25];
|
||||
uint8_t Rx_rs485_Pos = 0;
|
||||
volatile uint8_t Rx_rs485_complete = 0;
|
||||
|
||||
void Rx_rs485_Check(uint8_t data)
|
||||
{
|
||||
uint16_t cksum = 0, iTmp = 0;
|
||||
|
||||
if(Rx_rs485_TimeOut == 0)Rx_rs485_Pos = 0;
|
||||
switch(Rx_rs485_Pos)
|
||||
{
|
||||
case 0:
|
||||
if(data != 0xAA)break;
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
break;
|
||||
case 20:
|
||||
Rx_rs485_buffer[Rx_rs485_Pos++] = data;
|
||||
iTmp = (uint16_t)Rx_rs485_buffer[19]<<8;
|
||||
cksum = iTmp + (uint16_t)Rx_rs485_buffer[20] ;
|
||||
if(cksum == CRC16(Rx_rs485_buffer, 19))
|
||||
{
|
||||
Rx_rs485_complete = 1;
|
||||
}
|
||||
Rx_rs485_Pos = 0;
|
||||
break;
|
||||
default:
|
||||
Rx_rs485_Pos = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t In_Com_Error_Count;
|
||||
extern uint8_t Out_Com_Error_Count ;
|
||||
extern uint8_t Sensor_Error_Count;
|
||||
|
||||
void com_rs485_process(void)
|
||||
{
|
||||
if(Rx_rs485_complete == 1)
|
||||
{
|
||||
Rx_rs485_complete = 0;
|
||||
|
||||
if(Rx_rs485_buffer[1] == 0x10)//main
|
||||
{
|
||||
Rx_Main_Parsing();
|
||||
In_Com_Error_Count = 0;
|
||||
Main_Err_Code &= ~ERROR_IN_COM;
|
||||
}
|
||||
else if(Rx_rs485_buffer[1] == 0x01)
|
||||
{
|
||||
if(Rx_rs485_buffer[2] == 1) // id 1 - sensor pack
|
||||
{
|
||||
Rx_Sensor_Parsing();
|
||||
Sensor_Error_Count = 0;
|
||||
Main_Err_Code &= ~(ERROR_CO2 | ERROR_DUST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
volatile uint8_t Filter_Reset_Flag = 0;
|
||||
|
||||
uint16_t Used_Filter_Time = 0;
|
||||
uint16_t Used_Soja_Time = 0;
|
||||
uint8_t Main_BxD_Version = 0;
|
||||
int8_t Ex_Temperature = 0;
|
||||
int8_t In_Temperature = 0;
|
||||
uint16_t SA_rpm = 0, EA_rpm = 0;
|
||||
|
||||
uint8_t Vsp_Mode = 0;
|
||||
uint8_t Wifi_Status = 0;
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
uint8_t Main_BxD_FW_Version[3];
|
||||
|
||||
void Rx_Main_Parsing(void)
|
||||
{
|
||||
uint16_t Tmp_Err = 0;
|
||||
|
||||
if(Rx_rs485_buffer[2] != 0x00)return; // My id = 0
|
||||
|
||||
Vsp_Mode = Rx_rs485_buffer[3];
|
||||
|
||||
switch(Vsp_Mode)
|
||||
{
|
||||
case 0x00: // nomal mode
|
||||
if(Rx_rs485_buffer[4] & 0x10)
|
||||
{
|
||||
Tx_Run_Mode = Rx_rs485_buffer[4]&0x0F;
|
||||
if(Rx_rs485_buffer[4] == 0x10)
|
||||
{
|
||||
if((Power_On == 1)&&(Tx_Run_Mode == MODE_OFF))power_off_process();
|
||||
}
|
||||
else
|
||||
{
|
||||
if((Power_On == 0)&&(Tx_Run_Mode != MODE_OFF))power_on_process_by_roomcon();
|
||||
}
|
||||
}
|
||||
if(Rx_rs485_buffer[5] & 0x10)Tx_Fan_Speed = Rx_rs485_buffer[5]&0x0F;
|
||||
if(Rx_rs485_buffer[6] & 0x10)
|
||||
{
|
||||
Tx_Reservation_Hour = Rx_rs485_buffer[6]&0x0F;
|
||||
}
|
||||
|
||||
Tmp_Err = (((uint16_t)Rx_rs485_buffer[7]<<8) |( (uint16_t)Rx_rs485_buffer[8]&0x00FF))&0x00FF;
|
||||
Main_Err_Code &= ~0x00FF;
|
||||
Main_Err_Code |= Tmp_Err;
|
||||
|
||||
if(Filter_Reset_Flag == 1)
|
||||
{
|
||||
if((Main_Err_Code&0x000F) == 0)Filter_Reset_Flag = 0;
|
||||
}
|
||||
|
||||
Used_Filter_Time = ((uint16_t)Rx_rs485_buffer[11]<<8) |( (uint16_t)Rx_rs485_buffer[12]&0x00FF);
|
||||
Used_Soja_Time = ((uint16_t)Rx_rs485_buffer[13]<<8) |( (uint16_t)Rx_rs485_buffer[14]&0x00FF);
|
||||
|
||||
Main_BxD_FW_Version[0] = Rx_rs485_buffer[15];
|
||||
Main_BxD_FW_Version[1] = Rx_rs485_buffer[16];
|
||||
Main_BxD_FW_Version[2] = Rx_rs485_buffer[17];
|
||||
|
||||
Wifi_Status = Rx_rs485_buffer[18];
|
||||
|
||||
break;
|
||||
case 0x01: // vent request mode
|
||||
Ventilation_SA[0] = Rx_rs485_buffer[4]; // VENT 1 SA
|
||||
Ventilation_EA[0] = Rx_rs485_buffer[5]; // VENT 1 EA
|
||||
Ventilation_SA[1] = Rx_rs485_buffer[6]; // VENT 2 SA
|
||||
Ventilation_EA[1] = Rx_rs485_buffer[7]; // VENT 2 EA
|
||||
Ventilation_SA[2] = Rx_rs485_buffer[8]; // VENT 3 SA
|
||||
Ventilation_EA[2] = Rx_rs485_buffer[9];// VENT 3 EA
|
||||
Ventilation_SA[3] = Rx_rs485_buffer[10]; // VENT 4 SA
|
||||
Ventilation_EA[3] = Rx_rs485_buffer[11]; // VENT 4 EA
|
||||
Ventilation_SA[4] = Rx_rs485_buffer[12]; // VENT 5 SA
|
||||
Ventilation_EA[4] = Rx_rs485_buffer[13]; // VENT 6 EA
|
||||
|
||||
Main_Modbus_ID = Rx_rs485_buffer[14]; // Modbus set id
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST2;
|
||||
break;
|
||||
case 0x02: // air request mode
|
||||
AirClean_SA[0] = Rx_rs485_buffer[4]; // AIR 1 SA
|
||||
AirClean_EA[0] = Rx_rs485_buffer[5]; // AIR 1 EA
|
||||
AirClean_SA[1] = Rx_rs485_buffer[6]; // AIR 2 SA
|
||||
AirClean_EA[1] = Rx_rs485_buffer[7]; // AIR 2 EA
|
||||
AirClean_SA[2] = Rx_rs485_buffer[8]; // AIR 3 SA
|
||||
AirClean_EA[2] = Rx_rs485_buffer[9];// AIR 3 EA
|
||||
AirClean_SA[3] = Rx_rs485_buffer[10]; // AIR 4 SA
|
||||
AirClean_EA[3] = Rx_rs485_buffer[11]; // AIR 4 EA
|
||||
AirClean_SA[4] = Rx_rs485_buffer[12]; // AIR 5 SA
|
||||
AirClean_EA[4] = Rx_rs485_buffer[13]; // AIR 6 EA
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST3;
|
||||
break;
|
||||
case 0x03: // bypass request mode
|
||||
Bypass_SA[0] = Rx_rs485_buffer[4]; // BY 1 SA
|
||||
Bypass_EA[0] = Rx_rs485_buffer[5]; // BY 1 EA
|
||||
Bypass_SA[1] = Rx_rs485_buffer[6]; // BY 2 SA
|
||||
Bypass_EA[1] = Rx_rs485_buffer[7]; // BY 2 EA
|
||||
Bypass_SA[2] = Rx_rs485_buffer[8]; // BY 3 SA
|
||||
Bypass_EA[2] = Rx_rs485_buffer[9];// BY 3 EA
|
||||
Bypass_SA[3] = Rx_rs485_buffer[10]; // BY 4 SA
|
||||
Bypass_EA[3] = Rx_rs485_buffer[11]; // BY 4 EA
|
||||
Bypass_SA[4] = Rx_rs485_buffer[12]; // BY 5 SA
|
||||
Bypass_EA[4] = Rx_rs485_buffer[13]; // BY 6 EA
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_NORMAL;
|
||||
break;
|
||||
case 0x10:
|
||||
SA_rpm = ((uint16_t)Rx_rs485_buffer[10]<<8) |( (uint16_t)Rx_rs485_buffer[11]&0x00FF);
|
||||
EA_rpm = ((uint16_t)Rx_rs485_buffer[12]<<8) |( (uint16_t)Rx_rs485_buffer[13]&0x00FF);
|
||||
break;
|
||||
default:
|
||||
Tx_Data_Mode = TX_DATA_MODE_NORMAL;
|
||||
break;
|
||||
}
|
||||
|
||||
Tx_Main_process();
|
||||
|
||||
}
|
||||
|
||||
uint8_t CheckSum_Creator(uint8_t *buf, uint8_t len)
|
||||
{
|
||||
uint8_t i, rt;
|
||||
|
||||
rt = 0;
|
||||
|
||||
for(i=0; i<len; i++)
|
||||
{
|
||||
rt ^= buf[i];
|
||||
}
|
||||
|
||||
return(rt);
|
||||
}
|
||||
|
||||
extern volatile uint8_t Tx_Mode_Event, Tx_Fan_Event, Tx_Reserve_Event;
|
||||
extern uint8_t Wifi_Command ;
|
||||
void Tx_Main_process(void)
|
||||
{
|
||||
uint16_t cksum = 0;
|
||||
uint8_t i = 0;
|
||||
|
||||
for(i=0; i<20; i++)Tx_rs485_buffer[i] = 0;
|
||||
|
||||
Tx_rs485_buffer[0] = 0xAA;
|
||||
Tx_rs485_buffer[1] = 0x01;
|
||||
Tx_rs485_buffer[2] = 0x00; // ID = 0
|
||||
Tx_rs485_buffer[3] = Tx_Data_Mode;
|
||||
|
||||
switch(Tx_Data_Mode)
|
||||
{
|
||||
case TX_DATA_MODE_NORMAL:
|
||||
Tx_rs485_buffer[4] = Tx_Run_Mode|Tx_Mode_Event;
|
||||
Tx_rs485_buffer[5] = Tx_Fan_Speed|Tx_Fan_Event;
|
||||
Tx_rs485_buffer[6] = Tx_Reservation_Hour|Tx_Reserve_Event;
|
||||
|
||||
Tx_Mode_Event = 0;
|
||||
Tx_Fan_Event = 0;
|
||||
Tx_Reserve_Event = 0;
|
||||
|
||||
Tx_rs485_buffer[7] = 0x00;
|
||||
Tx_rs485_buffer[8] = Filter_Reset_Flag;
|
||||
Tx_rs485_buffer[9] = 0;//(signed char)Out_Temperature;
|
||||
Tx_rs485_buffer[10] = 0;//(signed char)In_Temperature;
|
||||
Tx_rs485_buffer[11] = (uint8_t)(Used_Filter_Time>>8);
|
||||
Tx_rs485_buffer[12] = (uint8_t)(Used_Filter_Time&0x00FF);
|
||||
Tx_rs485_buffer[13] = (uint8_t)(Used_Soja_Time>>8);
|
||||
Tx_rs485_buffer[14] = (uint8_t)(Used_Soja_Time&0x00FF);
|
||||
Tx_rs485_buffer[15] = 'S';
|
||||
Tx_rs485_buffer[16] = 'I';
|
||||
Tx_rs485_buffer[17] = ROOMCON_FW_VERSION;
|
||||
Tx_rs485_buffer[18] = Wifi_Command;
|
||||
Wifi_Command = 0;
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST1:
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST2:
|
||||
break;
|
||||
case TX_DATA_MODE_REQUEST3:
|
||||
break;
|
||||
case TX_DATA_MODE_SETTING:
|
||||
Tx_rs485_buffer[4] = Test_Mode_Step;
|
||||
switch(Test_Mode_Step)
|
||||
{
|
||||
case 0x01:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[0];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[0];
|
||||
break;
|
||||
case 0x02:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[1];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[1];
|
||||
break;
|
||||
case 0x03:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[2];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[2];
|
||||
break;
|
||||
case 0x04:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[3];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[3];
|
||||
break;
|
||||
case 0x05:
|
||||
Tx_rs485_buffer[5] = Ventilation_SA[4];
|
||||
Tx_rs485_buffer[6] = Ventilation_EA[4];
|
||||
break;
|
||||
case 0x06:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[0];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[0];
|
||||
break;
|
||||
case 0x07:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[1];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[1];
|
||||
break;
|
||||
case 0x08:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[2];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[2];
|
||||
break;
|
||||
case 0x09:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[3];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[3];
|
||||
break;
|
||||
case 0x0A:
|
||||
Tx_rs485_buffer[5] = AirClean_SA[4];
|
||||
Tx_rs485_buffer[6] = AirClean_EA[4];
|
||||
break;
|
||||
case 0x0B:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[0];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[0];
|
||||
break;
|
||||
case 0x0C:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[1];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[1];
|
||||
break;
|
||||
case 0x0D:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[2];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[2];
|
||||
break;
|
||||
case 0x0E:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[3];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[3];
|
||||
break;
|
||||
case 0x0F:
|
||||
Tx_rs485_buffer[5] = Bypass_SA[4];
|
||||
Tx_rs485_buffer[6] = Bypass_EA[4];
|
||||
break;
|
||||
case 0x10:
|
||||
Tx_rs485_buffer[5] = Main_Modbus_ID;
|
||||
Tx_rs485_buffer[6] = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
cksum = CRC16(Tx_rs485_buffer, 19) ;
|
||||
|
||||
Tx_rs485_buffer[19] = (uint8_t)(cksum>>8) ;
|
||||
Tx_rs485_buffer[20] = (uint8_t)cksum & 0x00FF ;
|
||||
|
||||
delay_ms(1);
|
||||
|
||||
PB6 = 1; // DIR
|
||||
UART_Write(UART1, Tx_rs485_buffer, 21);
|
||||
while ( !(UART1->FSR & UART_FSR_TX_EMPTY_F_Msk) );
|
||||
while ( !(UART1->FSR & UART_FSR_TE_F_Msk) );
|
||||
PB6 = 0; // DIR
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void UART1_HANDLE() // modbus
|
||||
{
|
||||
uint8_t u8InChar=0xFF;
|
||||
uint32_t u32IntSts= UART1->ISR;
|
||||
|
||||
if(u32IntSts & UART_ISR_RDA_IS_Msk)
|
||||
{
|
||||
u8InChar = UART_READ(UART1); /* Rx trigger level is 1 byte*/
|
||||
|
||||
Rx_rs485_Check(u8InChar);
|
||||
Rx_rs485_TimeOut = 5;
|
||||
}
|
||||
|
||||
if(u32IntSts & UART_ISR_THRE_IS_Msk)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UART1_IRQHandler(void) // modbus
|
||||
{
|
||||
UART1_HANDLE();
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
uint16_t CO2_Value = 0;
|
||||
uint16_t Pm_1_0_value = 0;
|
||||
uint16_t Pm_2_5_value = 0;
|
||||
uint16_t Pm_10_value = 0;
|
||||
signed int temperature_val = 0, humidity_val = 0;
|
||||
signed int tvoc_val = 0;
|
||||
uint8_t Sensor_BxD_Version = 0;
|
||||
extern uint8_t IR_Event_Code;
|
||||
extern volatile uint8_t IR_Event_Flag;
|
||||
void Rx_Sensor_Parsing(void)
|
||||
{
|
||||
uint16_t iTmp, cksum;
|
||||
uint8_t Sensor_id = 0;
|
||||
|
||||
uint16_t temp_pm10 = 0;
|
||||
uint16_t temp_pm2_5 = 0;
|
||||
uint16_t temp_pm1_0 = 0;
|
||||
uint16_t temp_co2 = 0;
|
||||
uint16_t temp_humi = 0;
|
||||
uint16_t temp_temp = 0; // signed
|
||||
uint16_t temp_voc = 0;
|
||||
|
||||
iTmp = (uint16_t)Rx_rs485_buffer[19]<<8;
|
||||
cksum = iTmp + (uint16_t)Rx_rs485_buffer[20] ;
|
||||
if(cksum != CRC16(Rx_rs485_buffer, 19))return;
|
||||
|
||||
|
||||
temp_pm10 = (uint16_t)Rx_rs485_buffer[3]<<8;
|
||||
temp_pm10 += (uint16_t)Rx_rs485_buffer[4];
|
||||
|
||||
temp_pm2_5 = (uint16_t)Rx_rs485_buffer[5]<<8;
|
||||
temp_pm2_5 += (uint16_t)Rx_rs485_buffer[6];
|
||||
|
||||
temp_pm1_0 = (uint16_t)Rx_rs485_buffer[7]<<8;
|
||||
temp_pm1_0 += (uint16_t)Rx_rs485_buffer[8];
|
||||
|
||||
temp_co2 = (uint16_t)Rx_rs485_buffer[9]<<8;
|
||||
temp_co2 += (uint16_t)Rx_rs485_buffer[10];
|
||||
|
||||
temp_humi = (uint16_t)Rx_rs485_buffer[11]<<8;
|
||||
temp_humi += (uint16_t)Rx_rs485_buffer[12];
|
||||
|
||||
temp_temp = (uint16_t)Rx_rs485_buffer[13]<<8;
|
||||
temp_temp += (uint16_t)Rx_rs485_buffer[14];
|
||||
|
||||
temp_voc = (uint16_t)Rx_rs485_buffer[15]<<8;
|
||||
temp_voc += (uint16_t)Rx_rs485_buffer[16];
|
||||
|
||||
IR_Event_Code = Rx_rs485_buffer[18];
|
||||
if(IR_Event_Code)IR_Event_Flag = 1;
|
||||
|
||||
Pm_10_value = temp_pm10;
|
||||
Pm_2_5_value = temp_pm2_5;
|
||||
Pm_1_0_value = temp_pm1_0;
|
||||
CO2_Value = temp_co2;
|
||||
|
||||
if(temp_temp & 0x8000)
|
||||
{
|
||||
temp_temp &= ~0x8000;
|
||||
temperature_val = (signed int)temp_temp * -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
temperature_val = (signed int)temp_temp;
|
||||
}
|
||||
humidity_val = (signed int)temp_humi;
|
||||
tvoc_val = (signed int)temp_voc;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void UART0_HANDLE() // co2
|
||||
{
|
||||
uint8_t u8InChar=0xFF;
|
||||
uint32_t u32IntSts= UART0->ISR;
|
||||
|
||||
if(u32IntSts & UART_ISR_RDA_IS_Msk)
|
||||
{
|
||||
u8InChar = UART_READ(UART0); /* Rx trigger level is 1 byte*/
|
||||
|
||||
}
|
||||
|
||||
if(u32IntSts & UART_ISR_THRE_IS_Msk)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void UART0_IRQHandler(void) // co2
|
||||
{
|
||||
UART0_HANDLE();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
void Tx_modbus_process(void)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
for(i=0; i<7; i++)
|
||||
{
|
||||
//UART_WRITE(UART1, Tx_modbus_Buff[i]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
extern volatile uint8_t Rx_wifi_TimeOut;
|
||||
|
||||
volatile uint8_t Rx_wifi_complete = 0;
|
||||
|
||||
uint8_t Rx_wifi_buffer[40];
|
||||
uint8_t Tx_wifi_buffer[40];
|
||||
|
||||
|
||||
uint8_t Rx_wifi_Pos = 0;
|
||||
|
||||
void Rx_wifi_Check(uint8_t data)
|
||||
{
|
||||
if(Rx_wifi_TimeOut == 0)Rx_wifi_Pos = 0;
|
||||
switch(Rx_wifi_Pos)
|
||||
{
|
||||
case 0:
|
||||
if(data != 0x42){Rx_wifi_Pos = 0;break;}
|
||||
Rx_wifi_buffer[Rx_wifi_Pos++]=data;
|
||||
break;
|
||||
case 31:
|
||||
Rx_wifi_buffer[Rx_wifi_Pos]=data;
|
||||
Rx_wifi_complete = 1;
|
||||
Rx_wifi_Pos = 0;
|
||||
break;
|
||||
default:
|
||||
Rx_wifi_buffer[Rx_wifi_Pos++] = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Tx_wifi_data(uint8_t *buf, uint8_t Len)
|
||||
{
|
||||
SCUART_Write(SC1, buf, Len);
|
||||
}
|
||||
|
||||
void SC1_IRQHandler(void) // wifi
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
data = SCUART_READ(SC1);
|
||||
|
||||
Rx_wifi_Check(data);
|
||||
Rx_wifi_TimeOut = 5;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void Rx_wifi_Parsing(void)
|
||||
{
|
||||
;
|
||||
|
||||
}
|
||||
|
||||
void tx_wifi_data(void)
|
||||
{
|
||||
Tx_wifi_buffer[0] = 0x11;
|
||||
Tx_wifi_buffer[1] = 0x02;
|
||||
Tx_wifi_buffer[2] = 0x0B;
|
||||
Tx_wifi_buffer[3] = 0x07;
|
||||
Tx_wifi_buffer[4] = 0xDB;
|
||||
Tx_wifi_data(Tx_wifi_buffer, 5);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user