feat: 06-17 신규 작업본 반영 (개발사양서/기능검토/승인원/Source 등 추가)

.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-18 07:54:58 +09:00
parent 5a96a696b1
commit 096111e983
529 changed files with 12439 additions and 1166 deletions
@@ -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);
}