#include "gd32e230x_conf.h" #include "main.h" #include "SysTick.h" #include "Relay.h" #include "Key.h" #include "Led.h" #include "Timer.h" #include "Electricity.h" #include "Temprature.h" #include "Beep.h" #include "Fan.h" #include "Exti.h" #include "At24xx.h" #include "Fwdgt.h" #include "Mb.h" #define VERSION "V1.0.0.0" #define UNIQU_1 0x1FFFF7AC #define UNIQU_2 0x1FFFF7B0 #define UNIQU_3 0x1FFFF7B4 sts_data_t sts_data; sts_data_t *get_sts(void) { return &sts_data; } int main() { InitSysTick(); InitKey(); InitLED(); InitTimer(); InitRelay(); fans_init(); beep_init(); temp_init(); at24xx_init(); electricity_init(); sts_exti_init(); uint8_t md_addr = ReadKeyValue(); eMBInit(MB_RTU,md_addr,0,115200,MB_PAR_NONE); eMBEnable(); strcpy(sts_data.m_data.info.date,__DATE__); strcat(sts_data.m_data.info.date," "); strcat(sts_data.m_data.info.date,__TIME__); strcpy(sts_data.m_data.info.ver,VERSION); sts_data.m_data.dev |= (STS_TYPE << 8); sts_data.m_data.info.uniq_ID_64_95 = *(uint32_t*)(UNIQU_3); sts_data.m_data.info.uniq_ID_32_63 = *(uint32_t*)(UNIQU_2); sts_data.m_data.info.uniq_ID_00_31 = *(uint32_t*)(UNIQU_1); // Fwdgt_Init(); sts_data.read_input_level(INPUT_CHANNEL_1); sts_data.read_input_level(INPUT_CHANNEL_2); sts_data.read_switch_level(); sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1] = 1; //test sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2] = 1; //test sts_data.read_eeprom(); if(sts_data.switch_status == INPUT_CHANNEL_1 && sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) { sts_data.choise_input(INPUT_CHANNEL_1); }else { sts_data.choise_input(INPUT_CHANNEL_2); } if(sts_data.m_data.out_status) { sts_data.open_output(); }else { sts_data.close_output(); } uint8_t channel = CH448_CHANNEL_1; uint8_t write_errp_count = 0; while(1){ // Fwdgt_reload(); eMBPoll(); sts_data.read_temp(); // read consumer if(sts_data.flag_1000ms) { sts_data.flag_1000ms = 0; sts_data.led_flash(); write_errp_count++; if(sts_data.beep_flag) { sts_data.beep(); }else { sts_data.clear_beep(); } } if(write_errp_count >= 10) { write_errp_count = 0; sts_data.write_at24(IIC_CONSUMER_START,&sts_data.iic_consumer,sizeof(sts_data.iic_consumer)); } if(sts_data.flag_100ms) { sts_data.flag_100ms = 0; sts_data.read_ele(channel); sts_data.check_wanning(channel); channel ++; } if(channel == CH448_CHANNEL_NONE) { //check input and is or not swtict input if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) && (sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2])) { sts_data.beep_flag = 0; if(sts_data.m_data.md_choise.choise_ch == INPUT_CHANNEL_1) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); }else { sts_data.choise_input(INPUT_CHANNEL_2); } } }else if(sts_data.m_data.md_choise.choise_ch == INPUT_CHANNEL_2) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); }else { sts_data.choise_input(INPUT_CHANNEL_1); } } }else { ; } }else if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_1]) ) { sts_data.beep_flag = 1; if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_1])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); } }else if((sts_data.m_data.input_status.input_status[INPUT_CHANNEL_2]) ){ sts_data.beep_flag = 1; if(STS_INPUT_HAS_WANNING(sts_data.m_data.input_wanning.waning[INPUT_CHANNEL_2])) { if(sts_data.m_data.out_status == OUT_OPEN) sts_data.close_output(); } }else { sts_data.beep_flag = 1; } channel = CH448_CHANNEL_1; } if(sts_data.m_data.temprature_flag == TEMP_ONLINE) { if(sts_data.m_data.temprature_th.fans_max_temp != 0 && sts_data.m_data.temprature_th.fans_min_temp != 0) { if(sts_data.m_data.temprature_th.fans_max_temp > sts_data.m_data.temprature_th.fans_min_temp) { if((int16_t)(sts_data.m_data.temprature) >= sts_data.m_data.temprature_th.fans_max_temp) { if(sts_data.m_data.fans_status != FANS_ON) { sts_data.fans(FANS_ON); } }else if((int16_t)(sts_data.m_data.temprature) <= sts_data.m_data.temprature_th.fans_min_temp) { if(sts_data.m_data.fans_status != FANS_OFF) { sts_data.fans(FANS_OFF); } } } } } } return 0; }