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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
|
||||
|
||||
|
||||
|
||||
void Display_update(void);
|
||||
void Display_process(void);
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4,uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
void delay_ms(uint32_t ms);
|
||||
void delay_us(uint32_t us);
|
||||
void PowerDownFunction(void);
|
||||
void GPIO_Init(void);
|
||||
void PWM_Init(void);
|
||||
void Timer0_Init(void);
|
||||
void Timer1_Init(void);
|
||||
void Timer2_Init(void);
|
||||
void SYS_Init(void);
|
||||
void UART0_Init(void);
|
||||
void UART1_Init(void);
|
||||
void SC0_Init();
|
||||
void SC1_Init();
|
||||
void ADC_Init(void);
|
||||
|
||||
|
||||
void Processor_Init(void);
|
||||
void Error_process(void);
|
||||
void Test_exit_process(void);
|
||||
void Test_vsp_into_process(void);
|
||||
|
||||
void Touch_process(void);
|
||||
void power_off_process(void);
|
||||
void power_on_process(void);
|
||||
void power_on_process_by_roomcon(void); //iot
|
||||
void power_off_process_by_roomcon(void);
|
||||
|
||||
|
||||
void IR_Remocon_process(void);
|
||||
|
||||
extern uint8_t touch_i2c_read(uint8_t index, uint8_t *value);
|
||||
extern uint8_t touch_i2c_write(uint8_t index, uint8_t d);
|
||||
extern void touch_i2c_init();
|
||||
|
||||
|
||||
extern void Melody_process(void);
|
||||
|
||||
|
||||
|
||||
void Air_Quality_process(void);
|
||||
|
||||
void com_rs485_process(void);
|
||||
void Tx_Main_process(void);
|
||||
|
||||
void Rx_rs485_Check(uint8_t data);
|
||||
|
||||
void Rx_Main_Parsing(void);
|
||||
void Rx_Sensor_Parsing(void);
|
||||
|
||||
|
||||
void Rx_wifi_Check(uint8_t data);
|
||||
void Rx_wifi_Parsing(void);
|
||||
|
||||
uint8_t CheckSum_Creator(uint8_t *buf, uint8_t len);
|
||||
|
||||
#define TX_EVENT 0x10
|
||||
|
||||
#define MELODY_OFF 0
|
||||
#define MELODY_POWER_ON 1
|
||||
#define MELODY_POWER_OFF 2
|
||||
#define MELODY_TOUCH 3
|
||||
#define MELODY_NG 4
|
||||
|
||||
|
||||
#define MODE_OFF 0
|
||||
#define MODE_VENT 1
|
||||
#define MODE_AUTO 2
|
||||
#define MODE_AIR_CLEAN 3
|
||||
#define MODE_BYPASS 4
|
||||
|
||||
|
||||
#define ERROR_SA 0x0040
|
||||
#define ERROR_EA 0x0080
|
||||
#define ERROR_FILTER_CLEAN 0x0001 // FILTER & SOJA
|
||||
#define ERROR_FILTER_CHANGE 0x0002
|
||||
#define ERROR_SOJA_CHANGE 0x0004
|
||||
#define ERROR_IN_COM 0x0010
|
||||
#define ERROR_OUT_COM 0x0020
|
||||
#define ERROR_TEMP 0x0800
|
||||
#define ERROR_HUMI 0x1000
|
||||
#define ERROR_TVOC 0x2000
|
||||
#define ERROR_DUST 0x4000
|
||||
#define ERROR_CO2 0x8000
|
||||
|
||||
|
||||
|
||||
#define EVENT_POWER 0x01
|
||||
#define EVENT_MODE 0x02
|
||||
#define EVENT_WIND 0x04
|
||||
#define EVENT_TIME 0x08
|
||||
|
||||
#define TX_DATA_MODE_NORMAL 0x00
|
||||
#define TX_DATA_MODE_REQUEST1 0x01
|
||||
#define TX_DATA_MODE_REQUEST2 0x02
|
||||
#define TX_DATA_MODE_REQUEST3 0x03
|
||||
#define TX_DATA_MODE_SETTING 0x10
|
||||
|
||||
|
||||
#define ROOMCON_VERSION 0x01
|
||||
#define CO2_VERSION 0x01
|
||||
|
||||
|
||||
#define EEP_ADDR_START 0x01
|
||||
#define EEP_ADDR_MODBUS_ID 0x05
|
||||
|
||||
|
||||
// S1000
|
||||
#define WIND_CMH_0 0
|
||||
#define WIND_CMH_1 400
|
||||
#define WIND_CMH_2 750
|
||||
#define WIND_CMH_3 1000
|
||||
|
||||
|
||||
|
||||
#define ROOMCON_FW_VERSION 22
|
||||
extern uint8_t Main_BxD_FW_Version[3];
|
||||
extern uint8_t Sensor_BxD_Version;
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
|
||||
|
||||
|
||||
void Display_update(void);
|
||||
void Display_process(void);
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4,uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
void delay_ms(uint32_t ms);
|
||||
void delay_us(uint32_t us);
|
||||
void PowerDownFunction(void);
|
||||
void GPIO_Init(void);
|
||||
void PWM_Init(void);
|
||||
void Timer0_Init(void);
|
||||
void Timer1_Init(void);
|
||||
void Timer2_Init(void);
|
||||
void SYS_Init(void);
|
||||
void UART0_Init(void);
|
||||
void UART1_Init(void);
|
||||
void SC0_Init();
|
||||
void SC1_Init();
|
||||
void ADC_Init(void);
|
||||
|
||||
|
||||
void Processor_Init(void);
|
||||
void Error_process(void);
|
||||
|
||||
|
||||
#define ST_LED PA11
|
||||
#define IN485_DIR PB6
|
||||
|
||||
#define FND_POWER PA1
|
||||
|
||||
#define FND_VERSION 1
|
||||
|
||||
|
||||
extern uint16_t SEN66_pm10p0;
|
||||
extern uint16_t SEN66_pm4p0;
|
||||
extern uint16_t SEN66_pm2p5;
|
||||
extern uint16_t SEN66_pm1p0;
|
||||
extern uint16_t SEN66_humidity_value;
|
||||
extern uint16_t SEN66_temperature_value;
|
||||
extern uint16_t SEN66_VOC_value;
|
||||
extern uint16_t SEN66_NOx_value;
|
||||
extern uint16_t SEN66_CO2_value;
|
||||
|
||||
|
||||
|
||||
extern volatile uint8_t Run_Timer;
|
||||
extern volatile uint16_t mSec_Timer;
|
||||
extern volatile uint16_t Blink_Timer;
|
||||
extern volatile uint8_t Rx_FND_TimeOut;
|
||||
extern volatile uint16_t FastBlink_Timer;
|
||||
@@ -0,0 +1,749 @@
|
||||
#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 "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
|
||||
|
||||
extern uint8_t Melody_Mode;
|
||||
|
||||
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 uint16_t Main_Err_Code;
|
||||
extern uint8_t Vsp_Mode;
|
||||
|
||||
|
||||
void delay_us(uint32_t us)
|
||||
{
|
||||
CLK_SysTickDelay(us);
|
||||
}
|
||||
|
||||
|
||||
void delay_ms(uint32_t ms)
|
||||
{
|
||||
while(ms--)
|
||||
{
|
||||
delay_us(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UART0_Init()//co2
|
||||
{
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
/* Init UART */
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
SYS_ResetModule(UART0_RST);
|
||||
UART_Open(UART0, 115200);
|
||||
|
||||
|
||||
UART_EnableInt(UART0, UART_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(UART0_IRQn);
|
||||
}
|
||||
|
||||
|
||||
void UART1_Init()
|
||||
{
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
/* Init UART */
|
||||
/*---------------------------------------------------------------------------------------------------------*/
|
||||
SYS_ResetModule(UART1_RST);
|
||||
UART_Open(UART1, 115200);
|
||||
|
||||
UART_EnableInt(UART1, UART_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(UART1_IRQn);
|
||||
}
|
||||
|
||||
void SC0_Init() // to main
|
||||
{
|
||||
SCUART_Open(SC0, 1200);
|
||||
// Enable smartcard receive interrupt
|
||||
SCUART_ENABLE_INT(SC0, SC_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(SC0_IRQn);
|
||||
}
|
||||
|
||||
|
||||
void SC1_Init() // to dust
|
||||
{
|
||||
SCUART_Open(SC1, 9600);
|
||||
// Enable smartcard receive interrupt
|
||||
SCUART_ENABLE_INT(SC1, SC_IER_RDA_IE_Msk);
|
||||
NVIC_EnableIRQ(SC1_IRQn);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void PowerDownFunction(void)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define IR_EVENT_POWER 0x01
|
||||
#define IR_EVENT_MODE 0x02
|
||||
#define IR_EVENT_WIND_UP 0x04
|
||||
#define IR_EVENT_WIND_DN 0x05
|
||||
#define IR_EVENT_TIME_1 0x06
|
||||
#define IR_EVENT_TIME_2 0x07
|
||||
#define IR_EVENT_TIME_3 0x08
|
||||
#define IR_EVENT_FILTER_RESET 0x09
|
||||
|
||||
#define IR_START 13500
|
||||
#define IR_HIGH 2260
|
||||
#define IR_LOW 1180
|
||||
#define IR_STOP 600
|
||||
#define IR_REPEAT 11200
|
||||
|
||||
uint16_t long_timer1 = 0;
|
||||
uint16_t remocon_buff[4];
|
||||
uint8_t remocon_pos = 0;
|
||||
uint8_t remocon_bit_count = 0;
|
||||
|
||||
uint8_t IR_Event_Code = 0;
|
||||
volatile uint8_t IR_Event_Flag = 0;
|
||||
void IR_Receive(void)
|
||||
{
|
||||
uint16_t tmp = 0;
|
||||
|
||||
long_timer1 = TIMER2->DR/12;
|
||||
TIMER2->CTL |= TIMER_CTL_SW_RST_Msk;
|
||||
TIMER_Start(TIMER2);
|
||||
|
||||
if((long_timer1 > IR_START-300)&&(long_timer1 < IR_START+300))
|
||||
{
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
else if((long_timer1 > IR_REPEAT-300)&&(long_timer1 < IR_REPEAT+300))
|
||||
{
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
else if((long_timer1 > IR_HIGH-200)&&(long_timer1 < IR_HIGH+200))
|
||||
{
|
||||
remocon_buff[remocon_pos] |= 0x8000;
|
||||
if(remocon_bit_count++ >= 15){remocon_bit_count = 0;remocon_pos=1;}
|
||||
else {remocon_buff[remocon_pos] >>= 1;}
|
||||
}
|
||||
else if((long_timer1 > IR_LOW-200)&&(long_timer1 < IR_LOW+200))
|
||||
{
|
||||
remocon_buff[remocon_pos] &= ~0x8000;
|
||||
if(remocon_bit_count++ >= 15){remocon_bit_count = 0;remocon_pos=1;}
|
||||
else {remocon_buff[remocon_pos] >>= 1;}
|
||||
}
|
||||
|
||||
if((remocon_pos == 1)&&(remocon_bit_count == 15))
|
||||
{
|
||||
if(remocon_buff[0] == 0xA55A)
|
||||
{
|
||||
tmp = remocon_buff[1];
|
||||
/* switch(tmp)
|
||||
{
|
||||
case 0x6E11: // Power
|
||||
IR_Event_Code = IR_EVENT_POWER;
|
||||
break;
|
||||
case 0x6D12: // mode
|
||||
IR_Event_Code = IR_EVENT_MODE;
|
||||
break;
|
||||
case 0x6C13: // up
|
||||
IR_Event_Code = IR_EVENT_WIND_UP;
|
||||
break;
|
||||
case 0x6817: // dn
|
||||
IR_Event_Code = IR_EVENT_WIND_DN;
|
||||
break;
|
||||
case 0x6718: // 1hour
|
||||
IR_Event_Code = IR_EVENT_TIME_1 ;
|
||||
break;
|
||||
case 0x6619: // 2hour
|
||||
IR_Event_Code = IR_EVENT_TIME_2 ;
|
||||
break;
|
||||
case 0x215E: // 3hour
|
||||
IR_Event_Code = IR_EVENT_TIME_3 ;
|
||||
break;
|
||||
case 0x354A: // filter reset
|
||||
IR_Event_Code = IR_EVENT_FILTER_RESET;
|
||||
break;
|
||||
default:
|
||||
IR_Event_Code = 0;
|
||||
break;
|
||||
}
|
||||
if(IR_Event_Code)
|
||||
{
|
||||
IR_Event_Flag = 1;
|
||||
}
|
||||
*/
|
||||
}
|
||||
remocon_buff[0] = 0;
|
||||
remocon_buff[1] = 0;
|
||||
remocon_bit_count = 0;
|
||||
remocon_pos = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
volatile uint8_t Touch_Event = 0;
|
||||
|
||||
void GPABC_IRQHandler(void)
|
||||
{
|
||||
uint32_t reg;
|
||||
|
||||
if(GPIO_GET_INT_FLAG(PB, BIT12))
|
||||
{
|
||||
GPIO_CLR_INT_FLAG(PB, BIT12);
|
||||
CLK->WK_INTSTS = 1; /* clear interrupt status */
|
||||
if(PB12 == 0)Touch_Event = 1;
|
||||
else Touch_Event = 2;
|
||||
}
|
||||
else if(GPIO_GET_INT_FLAG(PB, BIT14))
|
||||
{
|
||||
GPIO_CLR_INT_FLAG(PB, BIT14);
|
||||
CLK->WK_INTSTS = 1; /* clear interrupt status */
|
||||
IR_Receive();
|
||||
}
|
||||
else
|
||||
{
|
||||
reg = PA->ISRC; PA->ISRC = reg;
|
||||
reg = PB->ISRC; PB->ISRC = reg;
|
||||
reg = PC->ISRC; PC->ISRC = reg;
|
||||
}
|
||||
}
|
||||
|
||||
volatile uint8_t Run_Timer = 0;
|
||||
volatile uint16_t mSec_Timer = 0;
|
||||
volatile uint16_t Touch_Event_Timer = 0;
|
||||
volatile uint16_t Blink_Timer = 0;
|
||||
volatile uint8_t Rx_rs485_TimeOut = 0;
|
||||
volatile uint8_t Rx_modbus_TimeOut = 0;
|
||||
volatile uint8_t Rx_wifi_TimeOut = 0;
|
||||
volatile uint16_t FastBlink_Timer = 0;
|
||||
|
||||
void TMR0_IRQHandler(void)
|
||||
{
|
||||
Touch_Event_Timer++;
|
||||
|
||||
if(Run_Timer)Run_Timer--;
|
||||
if(mSec_Timer)mSec_Timer--;
|
||||
if(Blink_Timer)Blink_Timer--;
|
||||
if(FastBlink_Timer)FastBlink_Timer--;
|
||||
if(Rx_rs485_TimeOut)Rx_rs485_TimeOut--;
|
||||
if(Rx_modbus_TimeOut)Rx_modbus_TimeOut--;
|
||||
if(Rx_wifi_TimeOut)Rx_wifi_TimeOut--;
|
||||
|
||||
// clear timer interrupt flag
|
||||
TIMER_ClearIntFlag(TIMER0);
|
||||
}
|
||||
|
||||
// TIMER_ClearWakeupFlag(TIMER0);
|
||||
void Timer0_Init(void)
|
||||
{
|
||||
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000); // 1ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER0);
|
||||
NVIC_EnableIRQ(TMR0_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER0);
|
||||
}
|
||||
|
||||
|
||||
void TMR1_IRQHandler(void)
|
||||
{
|
||||
Melody_process();
|
||||
|
||||
|
||||
// clear timer interrupt flag
|
||||
TIMER_ClearIntFlag(TIMER1);
|
||||
}
|
||||
|
||||
void Timer1_Init(void)
|
||||
{
|
||||
TIMER_Open(TIMER1, TIMER_PERIODIC_MODE, 100); // 10ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER1);
|
||||
NVIC_EnableIRQ(TMR1_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER1);
|
||||
}
|
||||
void Timer2_Init(void) ///////////////////////////////////////////////////////////////////
|
||||
{
|
||||
TIMER_Open(TIMER2, TIMER_PERIODIC_MODE, 1); // 1000ms -> HZ
|
||||
|
||||
// Enable timer interrupt
|
||||
TIMER_EnableInt(TIMER2);
|
||||
// NVIC_EnableIRQ(TMR2_IRQn);
|
||||
|
||||
|
||||
// Start Timer 0
|
||||
TIMER_Start(TIMER2);
|
||||
}/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
void PWM_Init(void)
|
||||
{
|
||||
// PWM0 frequency is 300Hz, duty 50%
|
||||
// PWM_ConfigOutputChannel(PWM0, 3, 960, 50); // LCD Backlight
|
||||
PWM_ConfigOutputChannel(PWM1, 0, 100, 0); // buzzer
|
||||
|
||||
// Enable output of all PWM channels
|
||||
// PWM_EnableOutput(PWM0, 1<<3); // ch3
|
||||
PWM_EnableOutput(PWM1, 0x01);
|
||||
|
||||
// Start
|
||||
// PWM_Start(PWM0, 1<<3); // pwm0_ch3
|
||||
PWM_Start(PWM1, 0x01);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
volatile uint32_t ADC3_Value = 0;;
|
||||
void ADC_IRQHandler(void)
|
||||
{
|
||||
uint32_t u32Flag;
|
||||
|
||||
// Get ADC conversion finish interrupt flag
|
||||
u32Flag = ADC_GET_INT_FLAG(ADC, ADC_ADF_INT);
|
||||
|
||||
if(u32Flag & ADC_ADF_INT)
|
||||
{
|
||||
ADC3_Value = ADC_GET_CONVERSION_DATA(ADC, 3);
|
||||
}
|
||||
ADC_CLR_INT_FLAG(ADC, u32Flag);
|
||||
|
||||
}
|
||||
|
||||
void ADC_Init(void)
|
||||
{
|
||||
|
||||
// Enable channel 1
|
||||
ADC_Open(ADC, ADC_INPUT_MODE_SINGLE_END, ADC_OPERATION_MODE_SINGLE, ADC_CH_1_MASK);
|
||||
|
||||
// Set reference voltage to AVDD
|
||||
ADC_SET_REF_VOLTAGE(ADC, ADC_REFSEL_POWER);
|
||||
|
||||
|
||||
// Power on ADC
|
||||
ADC_POWER_ON(ADC);
|
||||
|
||||
// Enable ADC ADC_IF interrupt
|
||||
ADC_EnableInt(ADC, ADC_ADF_INT);
|
||||
NVIC_EnableIRQ(ADC_IRQn);
|
||||
|
||||
|
||||
ADC_START_CONV(ADC);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GPIO_Init(void)
|
||||
{
|
||||
|
||||
GPIO_SetMode(PA, BIT2|BIT3|BIT4, GPIO_PMD_OUTPUT); // A_2002
|
||||
PA2 = 0;
|
||||
PA3 = 0;
|
||||
PA4 = 0;
|
||||
GPIO_SetMode(PA, BIT13|BIT14|BIT15, GPIO_PMD_OUTPUT); // B_2002
|
||||
PA13 = 0;
|
||||
PA14 = 0;
|
||||
PA15 = 0;
|
||||
GPIO_SetMode(PC, BIT9|BIT10|BIT11, GPIO_PMD_OUTPUT); // C_2002
|
||||
PC9 = 0;
|
||||
PC10 = 0;
|
||||
PC11 = 0;
|
||||
GPIO_SetMode(PD, BIT7|BIT14|BIT15, GPIO_PMD_OUTPUT); // D_2002
|
||||
PD7 = 0;
|
||||
PD14 = 0;
|
||||
PD15 = 0;
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT6, GPIO_PMD_OUTPUT); // 485 DIR
|
||||
PB6 = 0;
|
||||
|
||||
|
||||
GPIO_SetMode(PA, BIT10, GPIO_PMD_OPEN_DRAIN); // touch
|
||||
GPIO_SetMode(PA, BIT11, GPIO_PMD_OPEN_DRAIN);
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT12, GPIO_PMD_INPUT); // touch int
|
||||
GPIO_ENABLE_PULL_UP(PB, BIT12);
|
||||
GPIO_EnableInt(PB, 12, GPIO_INT_BOTH_EDGE);
|
||||
|
||||
|
||||
GPIO_SetMode(PB, BIT14, GPIO_PMD_INPUT); // ir int
|
||||
GPIO_ENABLE_PULL_UP(PB, BIT14);
|
||||
GPIO_EnableInt(PB, 14, GPIO_INT_FALLING);
|
||||
|
||||
NVIC_EnableIRQ(GPABC_IRQn);
|
||||
|
||||
/* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
|
||||
GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_HCLK, GPIO_DBCLKSEL_1);
|
||||
GPIO_ENABLE_DEBOUNCE(PB, BIT12|BIT14);
|
||||
|
||||
}
|
||||
|
||||
void SYS_Init(void)
|
||||
{
|
||||
/* Unlock protected registers */
|
||||
SYS_UnlockReg();
|
||||
|
||||
/* Enable clock source */
|
||||
CLK_EnableXtalRC(CLK_PWRCTL_LIRC_EN_Msk|CLK_PWRCTL_HIRC_EN_Msk);
|
||||
|
||||
/* Waiting for clock source ready */
|
||||
CLK_WaitClockReady(CLK_CLKSTATUS_LIRC_STB_Msk|CLK_CLKSTATUS_HIRC_STB_Msk);
|
||||
|
||||
/* If the defines do not exist in your project, please refer to the related clk.h in the Header folder appended to the tool package. */
|
||||
/* Set HCLK clock */
|
||||
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_HCLK_CLK_DIVIDER(1));
|
||||
|
||||
/* Enable IP clock */
|
||||
CLK_EnableModuleClock(GPIO_MODULE);
|
||||
CLK_EnableModuleClock(WDT_MODULE);
|
||||
// CLK_EnableModuleClock(I2C0_MODULE);
|
||||
// CLK_EnableModuleClock(I2C1_MODULE);
|
||||
// CLK_EnableModuleClock(PWM0_CH23_MODULE);
|
||||
CLK_EnableModuleClock(PWM1_CH01_MODULE);
|
||||
CLK_EnableModuleClock(ISP_MODULE);
|
||||
CLK_EnableModuleClock(SC0_MODULE);
|
||||
// CLK_EnableModuleClock(SC1_MODULE);
|
||||
CLK_EnableModuleClock(SRAM_MODULE);
|
||||
CLK_EnableModuleClock(TICK_MODULE);
|
||||
CLK_EnableModuleClock(TMR0_MODULE);
|
||||
CLK_EnableModuleClock(TMR1_MODULE);
|
||||
CLK_EnableModuleClock(TMR2_MODULE);
|
||||
// CLK_EnableModuleClock(UART0_MODULE);
|
||||
CLK_EnableModuleClock(UART1_MODULE);
|
||||
CLK_EnableModuleClock(WDT_MODULE);
|
||||
|
||||
/* Set IP clock */
|
||||
|
||||
// CLK_SetModuleClock(PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(PWM1_CH01_MODULE, CLK_CLKSEL2_PWM1_CH01_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(SC0_MODULE, CLK_CLKSEL2_SC_S_HIRC, CLK_SC0_CLK_DIVIDER(6));
|
||||
// CLK_SetModuleClock(SC1_MODULE, CLK_CLKSEL2_SC_S_HIRC, CLK_SC1_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HIRC, MODULE_NoMsk);
|
||||
CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL2_TMR2_S_HIRC, MODULE_NoMsk);
|
||||
// CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_UART_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_UART_CLK_DIVIDER(1));
|
||||
CLK_SetModuleClock(WDT_MODULE, 0, 0);
|
||||
|
||||
/* Update System Core Clock */
|
||||
/* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
|
||||
SystemCoreClockUpdate();
|
||||
|
||||
|
||||
|
||||
//If the defines do not exist in your project, please refer to the corresponding sys.h in the Header folder appended to the tool package.
|
||||
SYS->PA_H_MFP = SYS_PA_H_MFP_PA9_MFP_SC0_DAT | SYS_PA_H_MFP_PA8_MFP_SC0_CLK;
|
||||
SYS->PB_H_MFP = SYS_PB_H_MFP_PB11_MFP_PWM1_CH0;
|
||||
SYS->PB_L_MFP = SYS_PB_L_MFP_PB5_MFP_UART1_TX | SYS_PB_L_MFP_PB4_MFP_UART1_RX ;
|
||||
SYS->PC_H_MFP = 0x00000000;
|
||||
SYS->PC_L_MFP = 0x00000000;
|
||||
SYS->PD_H_MFP = 0x00000000;
|
||||
SYS->PD_L_MFP = 0x00000000;
|
||||
SYS->PE_L_MFP = 0x00000000;
|
||||
SYS->PF_L_MFP = SYS_PF_L_MFP_PF1_MFP_ICE_CLK | SYS_PF_L_MFP_PF0_MFP_ICE_DAT;
|
||||
|
||||
|
||||
|
||||
/* Lock protected registers */
|
||||
SYS_LockReg();
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
void Processor_Init(void)
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 , ' ' , E , A
|
||||
|
||||
uint8_t eep_check[20];
|
||||
uint8_t i;
|
||||
|
||||
Power_On = 0;
|
||||
Tx_Run_Mode = 0;
|
||||
Tx_Fan_Speed = 0;
|
||||
Tx_Reservation_Hour = 0;
|
||||
|
||||
|
||||
Led_OnOff(100,1);//all on
|
||||
Disp_Segdata(0, 8, 8, 8, 8);
|
||||
Disp_Segdata(1, 8, 8, 8, 8);
|
||||
Disp_Segdata(2, 8, 8, 8, 8);
|
||||
for(i=0; i<10; i++)Display_process();
|
||||
|
||||
touch_i2c_init() ;
|
||||
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
delay_ms(2000);
|
||||
|
||||
|
||||
Led_OnOff(100, 0); // all off
|
||||
Disp_Segdata(0, 14, 14, 5, 2); // s2
|
||||
Disp_Segdata(1, 1, 0, 0, 0); // 1000
|
||||
Disp_Segdata(2, 16, 13, ROOMCON_VERSION>>4, ROOMCON_VERSION&0x0F); // R-01
|
||||
for(i=0; i<10; i++)Display_process();
|
||||
|
||||
delay_ms(2000);
|
||||
|
||||
power_off_process();
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
{
|
||||
Read_Data(i, &eep_check[i]);
|
||||
}
|
||||
|
||||
if((eep_check[EEP_ADDR_START] == 0x55)&&(eep_check[EEP_ADDR_START+1] == 0xAA))
|
||||
{
|
||||
// Main_Modbus_ID = eep_check[EEP_ADDR_MODBUS_ID];
|
||||
}
|
||||
else
|
||||
{
|
||||
Main_Modbus_ID = 1;
|
||||
|
||||
Write_Data(EEP_ADDR_START, 0x55);
|
||||
Write_Data(EEP_ADDR_START+1, 0xAA);
|
||||
|
||||
// Write_Data(EEP_ADDR_MODBUS_ID, Main_Modbus_ID);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern uint16_t Pm_1_0_value, Pm_2_5_value, Pm_10_value;
|
||||
extern uint16_t CO2_Value;
|
||||
uint8_t CO2_quality = 0;
|
||||
uint8_t PM2_5_quality = 0;
|
||||
uint8_t PM10_quality = 0;
|
||||
uint8_t temp_fan_speed = 0;
|
||||
uint8_t temp_pm_quality = 0;
|
||||
|
||||
#define CO2_HISTERISE 0
|
||||
#define DUST_HISTERISE 0
|
||||
|
||||
void Air_Quality_process(void)
|
||||
{
|
||||
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(CO2_Value <= 500-CO2_HISTERISE) CO2_quality = 0;
|
||||
else if((CO2_Value > 500+CO2_HISTERISE)&&(CO2_Value <= 1000-CO2_HISTERISE)) CO2_quality = 0x01;
|
||||
else if((CO2_Value > 1000+CO2_HISTERISE)&&(CO2_Value <= 1500-CO2_HISTERISE)) CO2_quality = 0x02;
|
||||
else if(CO2_Value > 1500+CO2_HISTERISE)CO2_quality = 0x04;
|
||||
|
||||
//2020.5.26 PM2.5 기준변경
|
||||
if(Pm_2_5_value <= 15-DUST_HISTERISE) PM2_5_quality = 0;
|
||||
else if((Pm_2_5_value > 15+DUST_HISTERISE)&&(Pm_2_5_value <= 35-DUST_HISTERISE)) PM2_5_quality = 0x01;
|
||||
else if((Pm_2_5_value > 35+DUST_HISTERISE)&&(Pm_2_5_value <= 75-DUST_HISTERISE)) PM2_5_quality = 0x02;
|
||||
else if(Pm_2_5_value > 75+DUST_HISTERISE)PM2_5_quality = 0x04;
|
||||
|
||||
if(Pm_10_value <= 30-DUST_HISTERISE) PM10_quality = 0;
|
||||
else if((Pm_10_value > 30+DUST_HISTERISE)&&(Pm_10_value <= 80-DUST_HISTERISE)) PM10_quality = 0x01;
|
||||
else if((Pm_10_value > 80+DUST_HISTERISE)&&(Pm_10_value <= 150-DUST_HISTERISE)) PM10_quality = 0x02;
|
||||
else if(Pm_10_value > 150+DUST_HISTERISE)PM10_quality = 0x04;
|
||||
|
||||
|
||||
temp_pm_quality = PM2_5_quality | PM10_quality;
|
||||
|
||||
|
||||
if(Tx_Run_Mode == MODE_AUTO)
|
||||
{
|
||||
if(CO2_quality == 0)
|
||||
{
|
||||
if(temp_pm_quality < 1)temp_fan_speed = 0;
|
||||
else if(temp_pm_quality < 2)temp_fan_speed = 2;
|
||||
else if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(CO2_quality == 0x01)
|
||||
{
|
||||
if(temp_pm_quality < 2)temp_fan_speed = 2;
|
||||
else if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else if(CO2_quality == 0x02)
|
||||
{
|
||||
if(temp_pm_quality < 4)temp_fan_speed = 3;
|
||||
else temp_fan_speed = 4;
|
||||
}
|
||||
else if(CO2_quality == 0x04)
|
||||
{
|
||||
temp_fan_speed = 4;
|
||||
}
|
||||
}
|
||||
|
||||
Tx_Fan_Speed = temp_fan_speed;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
extern uint8_t Blinking_Count, Blink_Toggle;
|
||||
|
||||
extern volatile uint8_t Filter_Reset_Flag;
|
||||
extern volatile uint8_t Tx_Mode_Event , Tx_Fan_Event , Tx_Reserve_Event ;
|
||||
volatile uint16_t Fan_Setting_Timer = 0;
|
||||
|
||||
void IR_Remocon_process(void)
|
||||
{
|
||||
switch(IR_Event_Code)
|
||||
{
|
||||
case IR_EVENT_POWER:
|
||||
if(Power_On == 0)power_on_process();
|
||||
else power_off_process();
|
||||
break;
|
||||
case IR_EVENT_WIND_UP:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if((Tx_Run_Mode == MODE_AUTO)||(Tx_Run_Mode == MODE_BYPASS))
|
||||
{
|
||||
Melody_Mode = MELODY_NG;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Tx_Fan_Speed<5)Tx_Fan_Speed++;
|
||||
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_WIND_DN:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if((Tx_Run_Mode == MODE_AUTO)||(Tx_Run_Mode == MODE_BYPASS))
|
||||
{
|
||||
Melody_Mode = MELODY_NG;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Tx_Fan_Speed > 1)Tx_Fan_Speed--;
|
||||
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_TIME_1:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 1)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 1;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_TIME_2:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 4)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 4;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
|
||||
break;
|
||||
case IR_EVENT_TIME_3:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Reservation_Hour == 8)Tx_Reservation_Hour = 0;
|
||||
else Tx_Reservation_Hour = 8;
|
||||
|
||||
if(Blinking_Count == 0)
|
||||
{
|
||||
Blink_Timer = 0;
|
||||
Blink_Toggle = 0;
|
||||
}
|
||||
Blinking_Count = 3;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
}
|
||||
|
||||
break;
|
||||
case IR_EVENT_MODE:
|
||||
if(Power_On == 1)
|
||||
{
|
||||
if(Tx_Run_Mode == MODE_VENT)Tx_Run_Mode = MODE_AUTO;
|
||||
else if(Tx_Run_Mode == MODE_AUTO)Tx_Run_Mode = MODE_VENT;
|
||||
|
||||
|
||||
Tx_Reservation_Hour = 0;
|
||||
Tx_Fan_Speed = 3;
|
||||
|
||||
Tx_Mode_Event = TX_EVENT;
|
||||
Tx_Fan_Event = TX_EVENT;
|
||||
Tx_Reserve_Event = TX_EVENT;
|
||||
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
}
|
||||
break;
|
||||
case IR_EVENT_FILTER_RESET:
|
||||
Filter_Reset_Flag = 1;
|
||||
Melody_Mode = MELODY_TOUCH;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(IR_Event_Code)IR_Event_Code = 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
/**************************************************************************//**
|
||||
* @file main.c
|
||||
* @version V1.00
|
||||
* $Revision: 4 $
|
||||
* $Date: 14/09/11 5:23p $
|
||||
* @brief Show how to pixel on and off on LCD panel.
|
||||
*
|
||||
* @note
|
||||
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
|
||||
*****************************************************************************/
|
||||
|
||||
#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 "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
#define __wdt_setting() SYS_UnlockReg(); WDT_Open(WDT_TIMEOUT_2POW14, 0, TRUE, FALSE); SYS_LockReg();
|
||||
#define __wdt_reset() SYS_UnlockReg(); WDT_RESET_COUNTER(); SYS_LockReg();
|
||||
|
||||
extern volatile uint8_t Run_Timer;
|
||||
extern volatile uint16_t mSec_Timer;
|
||||
extern volatile uint16_t Blink_Timer;
|
||||
extern volatile uint8_t Tx_Reservation_Hour, Rx_Reservation_Hour;
|
||||
extern volatile uint8_t Reservation_Min;
|
||||
|
||||
extern volatile uint8_t Rx_Main_complete;
|
||||
extern volatile uint8_t Tx_Data_Mode;
|
||||
extern volatile uint8_t Tx_Main_Event_Flag;
|
||||
|
||||
extern uint16_t Main_Err_Code;
|
||||
|
||||
uint8_t Sec_Timer = 0;
|
||||
uint8_t Blink_Toggle = 0;
|
||||
uint8_t Blinking_Count = 0;
|
||||
uint8_t In_Com_Error_Count = 0;
|
||||
uint8_t Out_Com_Error_Count = 0;
|
||||
uint8_t Sensor_Error_Count = 0;
|
||||
|
||||
extern volatile uint8_t IR_Event_Flag;
|
||||
extern volatile uint8_t Rx_wifi_complete;
|
||||
extern volatile uint16_t FastBlink_Timer;
|
||||
uint8_t FastBlink_Toggle;
|
||||
uint32_t Reset_src_value = 0;
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
__disable_interrupt();
|
||||
SYS_Init();
|
||||
|
||||
SYS_EnableBOD(SYS_BODCTL_BOD25_RST_EN_Msk, SYS_BODCTL_BOD25_EN_Msk);
|
||||
|
||||
// ADC_Init();
|
||||
|
||||
GPIO_Init();
|
||||
PWM_Init();
|
||||
Timer0_Init();
|
||||
Timer1_Init();
|
||||
Timer2_Init();
|
||||
|
||||
// UART0_Init(); //
|
||||
UART1_Init(); // to rs485 - internal
|
||||
SC0_Init(); // to external
|
||||
//SC1_Init(); // to wifi
|
||||
|
||||
Init_EEPROM(eep_data_size, eep_page_amount);
|
||||
Search_Valid_Page();
|
||||
|
||||
__enable_interrupt();
|
||||
|
||||
Reset_src_value = SYS_GetResetSrc();
|
||||
if((Reset_src_value & 0x00000037) != 0x00000004) // WDT reset
|
||||
{
|
||||
Processor_Init();
|
||||
}
|
||||
SYS_ClearResetSrc(Reset_src_value);
|
||||
|
||||
__wdt_setting();
|
||||
|
||||
Tx_Data_Mode = TX_DATA_MODE_REQUEST1;
|
||||
|
||||
while(1)
|
||||
{
|
||||
Touch_process();
|
||||
com_rs485_process();
|
||||
|
||||
if(IR_Event_Flag == 1)
|
||||
{
|
||||
IR_Event_Flag = 0;
|
||||
IR_Remocon_process();
|
||||
}
|
||||
|
||||
|
||||
if(Run_Timer == 0)
|
||||
{
|
||||
Run_Timer = 25;
|
||||
Display_update();
|
||||
Display_process();
|
||||
}
|
||||
|
||||
|
||||
if(mSec_Timer == 0)
|
||||
{
|
||||
mSec_Timer = 999;
|
||||
|
||||
if(In_Com_Error_Count++ >= 10){In_Com_Error_Count = 10;Main_Err_Code |= ERROR_IN_COM;}
|
||||
if(Sensor_Error_Count++ >= 10){Sensor_Error_Count = 10;Main_Err_Code |= ERROR_CO2|ERROR_DUST;}
|
||||
|
||||
Air_Quality_process();
|
||||
|
||||
}
|
||||
|
||||
if(FastBlink_Timer == 0)
|
||||
{
|
||||
FastBlink_Timer = 249;
|
||||
FastBlink_Toggle ^= 1;
|
||||
}
|
||||
|
||||
if(Blink_Timer == 0)
|
||||
{
|
||||
Blink_Timer = 499;
|
||||
|
||||
if(Blink_Toggle == 0)
|
||||
{
|
||||
Blink_Toggle = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Blink_Toggle = 0;
|
||||
if(Blinking_Count)
|
||||
{
|
||||
Blinking_Count--;
|
||||
}
|
||||
}
|
||||
__wdt_reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,986 @@
|
||||
#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 "EEPROM_Emulate.h"
|
||||
|
||||
|
||||
#include "My_define.h"
|
||||
|
||||
|
||||
|
||||
void Initial_Signal();
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1);
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff);
|
||||
|
||||
|
||||
uint8_t Font_Data[18]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67,\
|
||||
0x80, 0x58, 0x79, 0x40, 0x00, 0x50, 0x77, 0x5E };
|
||||
// . , c , E , - , ' ' , r , A , d
|
||||
uint8_t seg_data[4][14];
|
||||
|
||||
|
||||
|
||||
#define A_DATA PA4
|
||||
#define A_CLK PA3
|
||||
#define A_STB PA2
|
||||
|
||||
#define B_DATA PA13
|
||||
#define B_CLK PA14
|
||||
#define B_STB PA15
|
||||
|
||||
#define C_DATA PC9
|
||||
#define C_CLK PC10
|
||||
#define C_STB PC11
|
||||
|
||||
#define D_DATA PD15
|
||||
#define D_CLK PD14
|
||||
#define D_STB PD7
|
||||
|
||||
|
||||
|
||||
|
||||
void Initial_Signal()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0001B) -> 5grid 8seg
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==0)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==6)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
// A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<112; i++) //data
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;B_STB = 0;C_STB = 0;D_STB = 0;
|
||||
A_CLK = 0;B_CLK = 0;C_CLK = 0;D_CLK = 0;
|
||||
if(i==3 || i==7)
|
||||
{
|
||||
A_DATA = 1;B_DATA = 1;C_DATA = 1;D_DATA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
A_DATA = 0;B_DATA = 0;C_DATA = 0;D_DATA = 0;
|
||||
}
|
||||
A_CLK = 1;B_CLK = 1;C_CLK = 1;D_CLK = 1;
|
||||
}
|
||||
A_STB = 1;B_STB = 1;C_STB = 1;D_STB = 1;
|
||||
}
|
||||
|
||||
uint16_t one_sec = 0;
|
||||
extern uint8_t Tmperature_Error;
|
||||
|
||||
void Disp_Segdata(uint8_t Sel, uint8_t digit4, uint8_t digit3, uint8_t digit2, uint8_t digit1)
|
||||
{
|
||||
|
||||
seg_data[Sel][0] = Font_Data[digit4];
|
||||
seg_data[Sel][1] = Font_Data[digit4]>>3;
|
||||
|
||||
seg_data[Sel][2] = Font_Data[digit3];
|
||||
seg_data[Sel][3] = Font_Data[digit3]>>3;
|
||||
|
||||
seg_data[Sel][4] = Font_Data[digit2];
|
||||
seg_data[Sel][5] = Font_Data[digit2]>>3;
|
||||
|
||||
seg_data[Sel][6] = Font_Data[digit1];
|
||||
seg_data[Sel][7] = Font_Data[digit1]>>3;
|
||||
|
||||
}
|
||||
|
||||
enum{
|
||||
K_VENT,
|
||||
K_AUTO,
|
||||
K_AIR,
|
||||
K_WIND1,
|
||||
K_WIND2,
|
||||
K_WIND3,
|
||||
K_WIND4,
|
||||
K_WIND5,
|
||||
K_PM25_1,
|
||||
K_PM25_2,
|
||||
K_PM25_4,
|
||||
K_PM25_3,
|
||||
|
||||
K_PM10_1,
|
||||
K_PM10_2,
|
||||
K_PM10_4,
|
||||
K_PM10_3,
|
||||
|
||||
K_TIME_1,
|
||||
K_TIME_4,
|
||||
K_TIME_8,
|
||||
K_LOCK,
|
||||
|
||||
K_JUMKEOM,
|
||||
K_FILTER_CLEAN,
|
||||
K_FILTER_CHANGE,
|
||||
K_EXTRA1,
|
||||
|
||||
K_CO2_1,
|
||||
K_CO2_2,
|
||||
K_CO2_4,
|
||||
K_CO2_3,
|
||||
|
||||
K_SOJA_CLEAN,
|
||||
K_SOJA_CHANGE,
|
||||
K_IOT,
|
||||
K_EXTRA2,
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
void Led_OnOff(uint8_t kind, uint8_t onoff)
|
||||
{
|
||||
if(onoff == 1)
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] |= 0x01<<kind;
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] |= 0x01<<(kind-3);
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] |= 0x01<<(kind-8);
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] |=0x01<<(kind-8-3);
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] |= 0x01<<(kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] |=0x01<<(kind-16-3);
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] |= 0x01<<(kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] |=0x01<<(kind-24-3);
|
||||
}
|
||||
else // all on
|
||||
{
|
||||
seg_data[3][0] = 0xFF;
|
||||
seg_data[3][1] = 0xFF;
|
||||
seg_data[3][2] = 0xFF;
|
||||
seg_data[3][3] = 0xFF;
|
||||
seg_data[3][4] = 0xFF;
|
||||
seg_data[3][5] = 0xFF;
|
||||
seg_data[3][6] = 0xFF;
|
||||
seg_data[3][7] = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(kind < 6)
|
||||
{
|
||||
seg_data[3][0] &= ~(0x01<<kind);
|
||||
}
|
||||
else if(kind < 8)
|
||||
{
|
||||
seg_data[3][1] &= ~(0x01<<(kind-3));
|
||||
}
|
||||
else if(kind < 14)
|
||||
{
|
||||
seg_data[3][2] &= ~(0x01<<(kind-8));
|
||||
}
|
||||
else if(kind < 16)
|
||||
{
|
||||
seg_data[3][3] &= ~(0x01<<(kind-8-3));
|
||||
}
|
||||
else if(kind < 22)
|
||||
{
|
||||
seg_data[3][4] &= ~(0x01<<kind-16);
|
||||
}
|
||||
else if(kind < 24)
|
||||
{
|
||||
seg_data[3][5] &= ~(0x01<<(kind-16-3));
|
||||
}
|
||||
else if(kind < 30)
|
||||
{
|
||||
seg_data[3][6] &= ~(0x01<<kind-24);
|
||||
}
|
||||
else if(kind < 32)
|
||||
{
|
||||
seg_data[3][7] &= ~(0x01<<(kind-24-3));
|
||||
}
|
||||
else // all off
|
||||
{
|
||||
seg_data[3][0] = 0;
|
||||
seg_data[3][1] = 0;
|
||||
seg_data[3][2] = 0;
|
||||
seg_data[3][3] = 0;
|
||||
seg_data[3][4] = 0;
|
||||
seg_data[3][5] = 0;
|
||||
seg_data[3][6] = 0;
|
||||
seg_data[3][7] = 0;
|
||||
} }
|
||||
}
|
||||
|
||||
void Make_A(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
A_STB = 1;
|
||||
A_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
if(seg_data[0][i] & Mask)A_DATA = 1;
|
||||
else A_DATA = 0;
|
||||
A_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
A_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
A_STB = 0;
|
||||
A_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
A_DATA = 1;
|
||||
else
|
||||
A_DATA = 0;
|
||||
|
||||
A_CLK = 1;
|
||||
}
|
||||
A_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Make_B(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
B_STB = 1;
|
||||
B_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
if(seg_data[1][i] & Mask)B_DATA = 1;
|
||||
else B_DATA = 0;
|
||||
B_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
B_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
B_STB = 0;
|
||||
B_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
B_DATA = 1;
|
||||
else
|
||||
B_DATA = 0;
|
||||
|
||||
B_CLK = 1;
|
||||
}
|
||||
B_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
void Make_C(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
C_STB = 1;
|
||||
C_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
if(seg_data[2][i] & Mask)C_DATA = 1;
|
||||
else C_DATA = 0;
|
||||
C_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
C_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
C_STB = 0;
|
||||
C_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
C_DATA = 1;
|
||||
else
|
||||
C_DATA = 0;
|
||||
|
||||
C_CLK = 1;
|
||||
}
|
||||
C_STB = 1;
|
||||
}
|
||||
|
||||
|
||||
void Make_D(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
uint8_t Mask;
|
||||
|
||||
D_STB = 1;
|
||||
D_CLK = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 1 (#0000_0011B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if( i==0) //5grid, 8segment
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 2 (#0100_0000B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(i==6) //command2:01
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
for(i=0; i<8; i++) //command 3 (#1100_0000B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(i==6 || i==7)
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
|
||||
for(i=0; i<14; i++)
|
||||
{
|
||||
Mask = 0x01;
|
||||
for(j=0; j<8; j++)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
if(seg_data[3][i] & Mask)D_DATA = 1;
|
||||
else D_DATA = 0;
|
||||
D_CLK = 1;
|
||||
Mask <<= 1;
|
||||
}
|
||||
}
|
||||
D_STB = 1;
|
||||
|
||||
|
||||
for(i=0; i<8; i++) //command 4 (#1000_0100B)
|
||||
{
|
||||
D_STB = 0;
|
||||
D_CLK = 0;
|
||||
|
||||
if(i==0 ||i==1 ||i==2 ||i==3 || i==7) //pulse width=14/16
|
||||
D_DATA = 1;
|
||||
else
|
||||
D_DATA = 0;
|
||||
|
||||
D_CLK = 1;
|
||||
}
|
||||
D_STB = 1;
|
||||
}
|
||||
|
||||
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 uint16_t Pm_1_0_value, Pm_2_5_value, Pm_10_value;
|
||||
extern uint16_t CO2_Value;
|
||||
extern uint8_t CO2_quality;
|
||||
extern uint8_t PM2_5_quality;
|
||||
extern uint8_t PM10_quality;
|
||||
extern uint8_t Kids_Lock;
|
||||
extern uint16_t Main_Err_Code;
|
||||
extern uint8_t Vsp_Mode;
|
||||
extern uint8_t Test_Mode_Step;
|
||||
extern uint8_t Test_Mode_Sa_Ea_Sel;
|
||||
|
||||
extern uint8_t Main_Modbus_ID;
|
||||
|
||||
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 uint16_t SA_rpm, EA_rpm;
|
||||
extern uint8_t Wifi_Status;
|
||||
|
||||
extern uint8_t Blink_Toggle, FastBlink_Toggle;
|
||||
|
||||
void Display_update(void)
|
||||
{
|
||||
uint8_t Num_1000, Num_100, Num_10, Num_1;
|
||||
uint8_t Tmp_Speed = 0;
|
||||
uint16_t Err;
|
||||
|
||||
if(Vsp_Mode == TX_DATA_MODE_SETTING)
|
||||
{
|
||||
Led_OnOff(100, 0); // all off
|
||||
Disp_Segdata(2, 14, 14, 14, 14); // ALL OFF
|
||||
|
||||
if((Test_Mode_Step >= 1)&&(Test_Mode_Step <= 5)) // vent
|
||||
{
|
||||
Led_OnOff(K_VENT, 1);
|
||||
|
||||
Tmp_Speed = Test_Mode_Step-1;
|
||||
|
||||
if(Test_Mode_Sa_Ea_Sel == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 5, 16, 14); // " SA "
|
||||
Num_10 = Ventilation_SA[Tmp_Speed]%100/10;
|
||||
Num_1 = Ventilation_SA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(SA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(SA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(SA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(SA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Disp_Segdata(0, 14, 12, 16, 14); // " EA "
|
||||
Num_10 = Ventilation_EA[Tmp_Speed]%100/10;
|
||||
Num_1 = Ventilation_EA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(EA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(EA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(EA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(EA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
}
|
||||
else if((Test_Mode_Step >= 6)&&(Test_Mode_Step <= 10)) // air
|
||||
{
|
||||
Led_OnOff(K_AIR, 1);
|
||||
|
||||
Tmp_Speed = Test_Mode_Step-6;
|
||||
|
||||
if(Test_Mode_Sa_Ea_Sel == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 5, 16, 14); // " SA "
|
||||
Num_10 = AirClean_SA[Tmp_Speed]%100/10;
|
||||
Num_1 = AirClean_SA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(SA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(SA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(SA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(SA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Disp_Segdata(0, 14, 12, 16, 14); // " EA "
|
||||
Num_10 = AirClean_EA[Tmp_Speed]%100/10;
|
||||
Num_1 = AirClean_EA[Tmp_Speed]%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
|
||||
Num_1000 = (uint8_t)(EA_rpm%10000/1000);
|
||||
Num_100 = (uint8_t)(EA_rpm%1000/100);
|
||||
Num_10 = (uint8_t)(EA_rpm%100/10);
|
||||
Num_1 = (uint8_t)(EA_rpm%10);
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
}
|
||||
}
|
||||
switch(Test_Mode_Step)
|
||||
{
|
||||
case 1:
|
||||
case 6:
|
||||
case 11:
|
||||
Led_OnOff(K_WIND1, 1);
|
||||
break;
|
||||
case 2:
|
||||
case 7:
|
||||
case 12:
|
||||
Led_OnOff(K_WIND2, 1);
|
||||
break;
|
||||
case 3:
|
||||
case 8:
|
||||
case 13:
|
||||
Led_OnOff(K_WIND3, 1);
|
||||
break;
|
||||
case 4:
|
||||
case 9:
|
||||
case 14:
|
||||
Led_OnOff(K_WIND4, 1);
|
||||
break;
|
||||
case 5:
|
||||
case 10:
|
||||
case 15:
|
||||
Led_OnOff(K_WIND5, 1);
|
||||
break;
|
||||
case 16:
|
||||
Disp_Segdata(0, 14, 1, 17, 14); // " Id "
|
||||
Num_10 = Main_Modbus_ID%100/10;
|
||||
Num_1 = Main_Modbus_ID%10;
|
||||
Disp_Segdata(1, 14, 14, Num_10, Num_1);
|
||||
break;
|
||||
case 0x11:
|
||||
if(Main_BxD_FW_Version[1] == 'J')Num_1000 = 18; //J
|
||||
else if(Main_BxD_FW_Version[1] == 'I')Num_1000 = 1; //I
|
||||
else Num_1000 = 13; //-
|
||||
|
||||
Num_10 = Main_BxD_FW_Version[2]/10;
|
||||
Num_1 = Main_BxD_FW_Version[2]%10;
|
||||
Disp_Segdata(0, Num_1000, 13, Num_10, Num_1); // " J- " 메인 버전
|
||||
|
||||
|
||||
Num_10 = ROOMCON_FW_VERSION/10;
|
||||
Num_1 = ROOMCON_FW_VERSION%10;
|
||||
Disp_Segdata(1, 1, 13, Num_10, Num_1); // " I- " 룸콘 버전
|
||||
|
||||
|
||||
Num_10 = Sensor_BxD_Version/10;
|
||||
Num_1 = Sensor_BxD_Version%10;
|
||||
Disp_Segdata(2, 5, 13, Num_10, Num_1); // " S- " 센서보드 버전
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
Led_OnOff(100, 0); // all off
|
||||
|
||||
|
||||
if(Wifi_Status == 1) // connect
|
||||
{
|
||||
Led_OnOff(K_IOT, 1);
|
||||
}
|
||||
else if(Wifi_Status == 2) // wait slow
|
||||
{
|
||||
Led_OnOff(K_IOT, Blink_Toggle);
|
||||
}
|
||||
else if(Wifi_Status == 3) // fast
|
||||
{
|
||||
Led_OnOff(K_IOT, FastBlink_Toggle);
|
||||
}
|
||||
else // dis connect
|
||||
{
|
||||
Led_OnOff(K_IOT, 0);
|
||||
}
|
||||
|
||||
|
||||
Err = Main_Err_Code&(ERROR_FILTER_CLEAN|ERROR_FILTER_CHANGE|ERROR_SOJA_CHANGE|ERROR_SA|ERROR_EA|ERROR_TEMP|ERROR_CO2|ERROR_DUST|ERROR_IN_COM);
|
||||
|
||||
if(Err)Led_OnOff(K_JUMKEOM, 1);
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
if(Power_On == 0)
|
||||
{
|
||||
Disp_Segdata(0, 14, 14, 14, 14); // ALL OFF
|
||||
Disp_Segdata(1, 14, 14, 14, 14); // ALL OFF
|
||||
Disp_Segdata(2, 14, 14, 14, 14); // ALL OFF
|
||||
|
||||
|
||||
if(Main_Err_Code)Led_OnOff(K_JUMKEOM, 1);
|
||||
|
||||
if(Main_Err_Code&ERROR_FILTER_CLEAN)
|
||||
{
|
||||
Led_OnOff(K_FILTER_CLEAN, 1);
|
||||
Led_OnOff(K_SOJA_CLEAN, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_FILTER_CHANGE)
|
||||
{
|
||||
Led_OnOff(K_FILTER_CHANGE, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_SOJA_CHANGE)
|
||||
{
|
||||
Led_OnOff(K_SOJA_CHANGE, 1);
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_SA)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 9); // E-09
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_EA)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 1, 0); // E-10
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_TEMP)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 2); // E-02
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_HUMI)
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_TVOC)
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_CO2)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 6); // E-06
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_DUST)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 1, 8); // E-08
|
||||
}
|
||||
else if(Main_Err_Code&ERROR_IN_COM)
|
||||
{
|
||||
Disp_Segdata(1, 12, 13, 0, 7); // E-07
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(CO2_Value>=1000)Num_1000 = CO2_Value%10000/1000;
|
||||
if(CO2_Value>=100)Num_100 = CO2_Value%1000/100;
|
||||
if(CO2_Value>=10)Num_10 = CO2_Value%100/10;
|
||||
Num_1 = CO2_Value%10;
|
||||
Disp_Segdata(2, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(Pm_10_value>=1000)Num_1000 = Pm_10_value%10000/1000;
|
||||
if(Pm_10_value>=100)Num_100 = Pm_10_value%1000/100;
|
||||
if(Pm_10_value>=10)Num_10 = Pm_10_value%100/10;
|
||||
Num_1 = Pm_10_value%10;
|
||||
Disp_Segdata(1, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
Num_1000= Num_100= Num_10= Num_1= 14; // blank
|
||||
if(Pm_2_5_value>=1000)Num_1000 = Pm_2_5_value%10000/1000;
|
||||
if(Pm_2_5_value>=100)Num_100 = Pm_2_5_value%1000/100;
|
||||
if(Pm_2_5_value>=10)Num_10 = Pm_2_5_value%100/10;
|
||||
Num_1 = Pm_2_5_value%10;
|
||||
Disp_Segdata(0, Num_1000, Num_100, Num_10, Num_1);
|
||||
|
||||
|
||||
|
||||
switch(CO2_quality)
|
||||
{
|
||||
case 0x00: Led_OnOff(K_CO2_1, 1);break;
|
||||
case 0x01: Led_OnOff(K_CO2_2, 1);break;
|
||||
case 0x02: Led_OnOff(K_CO2_3, 1);break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_CO2_3, 1);
|
||||
Led_OnOff(K_CO2_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(PM2_5_quality)
|
||||
{
|
||||
case 0x00: Led_OnOff(K_PM25_1, 1);break;
|
||||
case 0x01: Led_OnOff(K_PM25_2, 1); break;
|
||||
case 0x02: Led_OnOff(K_PM25_3, 1); break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_PM25_3, 1);
|
||||
Led_OnOff(K_PM25_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(PM10_quality)
|
||||
{
|
||||
case 0:
|
||||
Led_OnOff(K_PM10_1, 1);
|
||||
break;
|
||||
case 0x01:
|
||||
Led_OnOff(K_PM10_2, 1);
|
||||
break;
|
||||
case 0x02:
|
||||
Led_OnOff(K_PM10_3, 1);
|
||||
break;
|
||||
case 0x04:
|
||||
default:
|
||||
Led_OnOff(K_PM10_3, 1);
|
||||
Led_OnOff(K_PM10_4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(Tx_Run_Mode)
|
||||
{
|
||||
case MODE_VENT: Led_OnOff(K_VENT, 1); break;
|
||||
case MODE_AUTO: Led_OnOff(K_AUTO, 1);break;
|
||||
case MODE_AIR_CLEAN: Led_OnOff(K_AIR, 1); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(Tx_Fan_Speed)
|
||||
{
|
||||
case 1: Led_OnOff(K_WIND1, 1);break;
|
||||
case 2: Led_OnOff(K_WIND2, 1);break;
|
||||
case 3: Led_OnOff(K_WIND3, 1);break;
|
||||
case 4: Led_OnOff(K_WIND4, 1);break;
|
||||
case 5: Led_OnOff(K_WIND5, 1);break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(Tx_Reservation_Hour)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
Led_OnOff(K_TIME_1, 1);
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
Led_OnOff(K_TIME_4, 1);
|
||||
break;
|
||||
case 8:
|
||||
Led_OnOff(K_TIME_8, 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Led_OnOff(K_LOCK, Kids_Lock);
|
||||
}
|
||||
|
||||
|
||||
uint8_t Sel_Pos = 0;
|
||||
void Display_process(void)
|
||||
{
|
||||
|
||||
switch(Sel_Pos)
|
||||
{
|
||||
case 0:
|
||||
Make_A();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 1:
|
||||
Make_B();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 2:
|
||||
Make_C();
|
||||
Sel_Pos++;
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
Make_D();
|
||||
Sel_Pos = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user