#include #include #include #include #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 volatile uint8_t Err_Code; void Damper_Setting(uint8_t damper_num, float angle_degree); // dir = 0 ������ uint8_t m1_seq = 0; uint8_t m2_seq = 0; uint8_t m3_seq = 0; uint8_t m4_seq = 0; uint8_t m5_seq = 0; uint8_t m6_seq = 0; uint8_t Step_dir[7] = {0,0,0,0,0,0,0} ; uint16_t Current_Step_Count[7] = {0,0,0,0,0,0,0} ; uint16_t Target_Step_Count[7] = {0,0,0,0,0,0,0} ; uint16_t BLDC_SPEED_TABLE[100] = {//0.5V ~ 5.45 0, 603, 678, 753, 828, 903, 980, 1056, 1131, 1208 , 1286, 1362, 1440, 1517, 1596, 1675, 1754, 1833, 1912, 1993 , 2072, 2152, 2232, 2312, 2395, 2478, 2559, 2641, 2724, 2806 , 2889, 2973, 3057, 3141, 3226, 3311, 3396, 3482, 3568, 3655 , 3742, 3828, 3915, 4002, 4090, 4179, 4268, 4357, 4447, 4538 , 4628, 4719, 4810, 4901, 4993, 5085, 5178, 5271, 5364, 5458 , 5552, 5646, 5740, 5835, 5931, 6027, 6124, 6221, 6319, 6417 , 6515, 6614, 6713, 6813, 6913, 7014, 7115, 7217, 7319, 7421 , 7524, 7627, 7731, 7835, 7940, 8045, 8150, 8256, 8362, 8469 , 8576, 8684, 8793, 8902, 9012, 9122, 9232, 9344, 9457, 9571 }; uint16_t Test_RPM_Vent_Reference[5]={0,}; uint16_t Test_RPM_Vent_Delta[5]={0,}; uint16_t Test_RPM_Air_Reference[5]={0,}; uint16_t Test_RPM_Air_Delta[5]={0,}; uint16_t RPM_Vent_Reference[5]={0,}; uint16_t RPM_Vent_Delta[5]={0,}; uint16_t RPM_Air_Reference[5]={0,}; uint16_t RPM_Air_Delta[5]={0,}; uint8_t RPM_Check_Start = 0; uint8_t RPM_Stable_Timer = 0; uint8_t RPM_Auto_Cal_Flag = 0; uint8_t RPM_Auto_Cal_Status = 0; uint8_t RPM_Auto_Cal_Start = 0; uint16_t Rpm_Auto_Delay = 0; uint8_t Rpm_Auto_Pos = 10; void Step_M1_Process(uint8_t dir) { if(dir == 1){if(m1_seq++ >= 7)m1_seq = 0;} else{if(m1_seq-- == 0)m1_seq = 7;} switch(m1_seq) { case 0: REG_STEP_M1_A = 1; // 1 REG_STEP_M1_B = 0; // 0 REG_STEP_M1_NA = 0;// 0 REG_STEP_M1_NB = 0;// 0 break; case 1: REG_STEP_M1_A = 1 ; // 1 REG_STEP_M1_B = 1 ; // 1 REG_STEP_M1_NA = 0 ;// 0 REG_STEP_M1_NB = 0 ;// 0 break; case 2: REG_STEP_M1_A = 0 ; // 0 REG_STEP_M1_B = 1 ; // 1 REG_STEP_M1_NA = 0 ;// 0 REG_STEP_M1_NB = 0 ;// 0 break; case 3: REG_STEP_M1_A = 0 ; // 0 REG_STEP_M1_B = 1 ; // 1 REG_STEP_M1_NA = 1 ;// 1 REG_STEP_M1_NB = 0 ;// 0 break; case 4: REG_STEP_M1_A = 0 ; // 0 REG_STEP_M1_B = 0 ; // 0 REG_STEP_M1_NA = 1 ;// 1 REG_STEP_M1_NB = 0 ;// 0 break; case 5: REG_STEP_M1_A = 0 ; // 0 REG_STEP_M1_B = 0 ; // 0 REG_STEP_M1_NA = 1 ;// 1 REG_STEP_M1_NB = 1 ;// 1 break; case 6: REG_STEP_M1_A = 0 ; // 0 REG_STEP_M1_B = 0 ; // 0 REG_STEP_M1_NA = 0 ;// 0 REG_STEP_M1_NB = 1 ;// 1 break; case 7: REG_STEP_M1_A = 1 ; // 1 REG_STEP_M1_B = 0 ; // 0 REG_STEP_M1_NA = 0 ;// 0 REG_STEP_M1_NB = 1 ;// 1 break; } } void Step_M2_Process(uint8_t dir) { if(dir == 1){if(m2_seq++ >= 7)m2_seq = 0;} else{if(m2_seq-- == 0)m2_seq = 7;} switch(m2_seq) { case 0: REG_STEP_M2_A = 1 ; // 1 REG_STEP_M2_B = 0 ; // 0 REG_STEP_M2_NA = 0 ;// 0 REG_STEP_M2_NB = 0 ;// 0 break; case 1: REG_STEP_M2_A = 1 ; // 1 REG_STEP_M2_B = 1 ; // 1 REG_STEP_M2_NA = 0 ;// 0 REG_STEP_M2_NB = 0 ;// 0 break; case 2: REG_STEP_M2_A = 0 ; // 0 REG_STEP_M2_B = 1 ; // 1 REG_STEP_M2_NA = 0 ;// 0 REG_STEP_M2_NB = 0 ;// 0 break; case 3: REG_STEP_M2_A = 0 ; // 0 REG_STEP_M2_B = 1 ; // 1 REG_STEP_M2_NA = 1 ;// 1 REG_STEP_M2_NB = 0 ;// 0 break; case 4: REG_STEP_M2_A = 0 ; // 0 REG_STEP_M2_B = 0 ; // 0 REG_STEP_M2_NA = 1 ;// 1 REG_STEP_M2_NB = 0 ;// 0 break; case 5: REG_STEP_M2_A = 0 ; // 0 REG_STEP_M2_B = 0 ; // 0 REG_STEP_M2_NA = 1 ;// 1 REG_STEP_M2_NB = 1 ;// 1 break; case 6: REG_STEP_M2_A = 0 ; // 0 REG_STEP_M2_B = 0 ; // 0 REG_STEP_M2_NA = 0 ;// 0 REG_STEP_M2_NB = 1 ;// 1 break; case 7: REG_STEP_M2_A = 1 ; // 1 REG_STEP_M2_B = 0 ; // 0 REG_STEP_M2_NA = 0 ;// 0 REG_STEP_M2_NB = 1 ;// 1 break; } } void Step_M3_Process(uint8_t dir) { if(dir == 1){if(m3_seq++ >= 7)m3_seq = 0;} else{if(m3_seq-- == 0)m3_seq = 7;} switch(m3_seq) { case 0: REG_STEP_M3_A = 1 ; // 1 REG_STEP_M3_B = 0 ; // 0 REG_STEP_M3_NA = 0 ;// 0 REG_STEP_M3_NB = 0 ;// 0 break; case 1: REG_STEP_M3_A = 1 ; // 1 REG_STEP_M3_B = 1 ; // 1 REG_STEP_M3_NA = 0 ;// 0 REG_STEP_M3_NB = 0 ;// 0 break; case 2: REG_STEP_M3_A = 0 ; // 0 REG_STEP_M3_B = 1 ; // 1 REG_STEP_M3_NA = 0 ;// 0 REG_STEP_M3_NB = 0 ;// 0 break; case 3: REG_STEP_M3_A = 0 ; // 0 REG_STEP_M3_B = 1 ; // 1 REG_STEP_M3_NA = 1 ;// 1 REG_STEP_M3_NB = 0 ;// 0 break; case 4: REG_STEP_M3_A = 0 ; // 0 REG_STEP_M3_B = 0 ; // 0 REG_STEP_M3_NA = 1 ;// 1 REG_STEP_M3_NB = 0 ;// 0 break; case 5: REG_STEP_M3_A = 0 ; // 0 REG_STEP_M3_B = 0 ; // 0 REG_STEP_M3_NA = 1 ;// 1 REG_STEP_M3_NB = 1 ;// 1 break; case 6: REG_STEP_M3_A = 0 ; // 0 REG_STEP_M3_B = 0 ; // 0 REG_STEP_M3_NA = 0 ;// 0 REG_STEP_M3_NB = 1 ;// 1 break; case 7: REG_STEP_M3_A = 1 ; // 1 REG_STEP_M3_B = 0 ; // 0 REG_STEP_M3_NA = 0 ;// 0 REG_STEP_M3_NB = 1 ;// 1 break; } } void Step_M4_Process(uint8_t dir) { if(dir == 1){if(m4_seq++ >= 7)m4_seq = 0;} else{if(m4_seq-- == 0)m4_seq = 7;} switch(m4_seq) { case 0: REG_STEP_M4_A = 1 ; // 1 REG_STEP_M4_B = 0 ; // 0 REG_STEP_M4_NA = 0 ;// 0 REG_STEP_M4_NB = 0 ;// 0 break; case 1: REG_STEP_M4_A = 1 ; // 1 REG_STEP_M4_B = 1 ; // 1 REG_STEP_M4_NA = 0 ;// 0 REG_STEP_M4_NB = 0 ;// 0 break; case 2: REG_STEP_M4_A = 0 ; // 0 REG_STEP_M4_B = 1 ; // 1 REG_STEP_M4_NA = 0 ;// 0 REG_STEP_M4_NB = 0 ;// 0 break; case 3: REG_STEP_M4_A = 0 ; // 0 REG_STEP_M4_B = 1 ; // 1 REG_STEP_M4_NA = 1 ;// 1 REG_STEP_M4_NB = 0 ;// 0 break; case 4: REG_STEP_M4_A = 0 ; // 0 REG_STEP_M4_B = 0 ; // 0 REG_STEP_M4_NA = 1 ;// 1 REG_STEP_M4_NB = 0 ;// 0 break; case 5: REG_STEP_M4_A = 0 ; // 0 REG_STEP_M4_B = 0 ; // 0 REG_STEP_M4_NA = 1 ;// 1 REG_STEP_M4_NB = 1 ;// 1 break; case 6: REG_STEP_M4_A = 0 ; // 0 REG_STEP_M4_B = 0 ; // 0 REG_STEP_M4_NA = 0 ;// 0 REG_STEP_M4_NB = 1 ;// 1 break; case 7: REG_STEP_M4_A = 1 ; // 1 REG_STEP_M4_B = 0 ; // 0 REG_STEP_M4_NA = 0 ;// 0 REG_STEP_M4_NB = 1 ;// 1 break; } } void Step_M5_Process(uint8_t dir) { if(dir == 1){if(m5_seq++ >= 7)m5_seq = 0;} else{if(m5_seq-- == 0)m5_seq = 7;} switch(m5_seq) { case 0: REG_STEP_M5_A = 1 ; // 1 REG_STEP_M5_B = 0 ; // 0 REG_STEP_M5_NA = 0 ;// 0 REG_STEP_M5_NB = 0 ;// 0 break; case 1: REG_STEP_M5_A = 1 ; // 1 REG_STEP_M5_B = 1 ; // 1 REG_STEP_M5_NA = 0 ;// 0 REG_STEP_M5_NB = 0 ;// 0 break; case 2: REG_STEP_M5_A = 0 ; // 0 REG_STEP_M5_B = 1 ; // 1 REG_STEP_M5_NA = 0 ;// 0 REG_STEP_M5_NB = 0 ;// 0 break; case 3: REG_STEP_M5_A = 0 ; // 0 REG_STEP_M5_B = 1 ; // 1 REG_STEP_M5_NA = 1 ;// 1 REG_STEP_M5_NB = 0 ;// 0 break; case 4: REG_STEP_M5_A = 0 ; // 0 REG_STEP_M5_B = 0 ; // 0 REG_STEP_M5_NA = 1 ;// 1 REG_STEP_M5_NB = 0 ;// 0 break; case 5: REG_STEP_M5_A = 0 ; // 0 REG_STEP_M5_B = 0 ; // 0 REG_STEP_M5_NA = 1 ;// 1 REG_STEP_M5_NB = 1 ;// 1 break; case 6: REG_STEP_M5_A = 0 ; // 0 REG_STEP_M5_B = 0 ; // 0 REG_STEP_M5_NA = 0 ;// 0 REG_STEP_M5_NB = 1 ;// 1 break; case 7: REG_STEP_M5_A = 1 ; // 1 REG_STEP_M5_B = 0 ; // 0 REG_STEP_M5_NA = 0 ;// 0 REG_STEP_M5_NB = 1 ;// 1 break; } } void Step_M6_Process(uint8_t dir) { if(dir == 1){if(m6_seq++ >= 7)m6_seq = 0;} else{if(m6_seq-- == 0)m6_seq = 7;} switch(m6_seq) { case 0: REG_STEP_M6_A = 1 ; // 1 REG_STEP_M6_B = 0 ; // 0 REG_STEP_M6_NA = 0 ;// 0 REG_STEP_M6_NB = 0 ;// 0 break; case 1: REG_STEP_M6_A = 1 ; // 1 REG_STEP_M6_B = 1 ; // 1 REG_STEP_M6_NA = 0 ;// 0 REG_STEP_M6_NB = 0 ;// 0 break; case 2: REG_STEP_M6_A = 0 ; // 0 REG_STEP_M6_B = 1 ; // 1 REG_STEP_M6_NA = 0 ;// 0 REG_STEP_M6_NB = 0 ;// 0 break; case 3: REG_STEP_M6_A = 0 ; // 0 REG_STEP_M6_B = 1 ; // 1 REG_STEP_M6_NA = 1 ;// 1 REG_STEP_M6_NB = 0 ;// 0 break; case 4: REG_STEP_M6_A = 0 ; // 0 REG_STEP_M6_B = 0 ; // 0 REG_STEP_M6_NA = 1 ;// 1 REG_STEP_M6_NB = 0 ;// 0 break; case 5: REG_STEP_M6_A = 0 ; // 0 REG_STEP_M6_B = 0 ; // 0 REG_STEP_M6_NA = 1 ;// 1 REG_STEP_M6_NB = 1 ;// 1 break; case 6: REG_STEP_M6_A = 0 ; // 0 REG_STEP_M6_B = 0 ; // 0 REG_STEP_M6_NA = 0 ;// 0 REG_STEP_M6_NB = 1 ;// 1 break; case 7: REG_STEP_M6_A = 1 ; // 1 REG_STEP_M6_B = 0 ; // 0 REG_STEP_M6_NA = 0 ;// 0 REG_STEP_M6_NB = 1 ;// 1 break; } } void Step_M1_Stop(void) { REG_STEP_M1_A = 0 ; REG_STEP_M1_B = 0 ; REG_STEP_M1_NA = 0 ; REG_STEP_M1_NB = 0 ; } void Step_M2_Stop(void) { REG_STEP_M2_A = 0 ; REG_STEP_M2_B = 0 ; REG_STEP_M2_NA = 0 ; REG_STEP_M2_NB = 0 ; } void Step_M3_Stop(void) { REG_STEP_M3_A = 0 ; REG_STEP_M3_B = 0 ; REG_STEP_M3_NA = 0 ; REG_STEP_M3_NB = 0 ; } void Step_M4_Stop(void) { REG_STEP_M4_A = 0 ; REG_STEP_M4_B = 0 ; REG_STEP_M4_NA = 0 ; REG_STEP_M4_NB = 0 ; } void Step_M5_Stop(void) { REG_STEP_M5_A = 0 ; REG_STEP_M5_B = 0 ; REG_STEP_M5_NA = 0 ; REG_STEP_M5_NB = 0 ; } void Step_M6_Stop(void) { REG_STEP_M6_A = 0 ; REG_STEP_M6_B = 0 ; REG_STEP_M6_NA = 0 ; REG_STEP_M6_NB = 0 ; } #define MODE_OFF 10 uint8_t Pre_Damper_Mode = 0; volatile uint8_t Step_Status = 0; uint8_t Step_pos = 0; void Damper_Mode(uint8_t mmm) { switch(mmm) { case MODE_VENTILATION: Damper_Setting(DAMPER_OA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_EA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_RA, 70); // 90 = close, 0 = open 3step--reverse Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open break; case MODE_AIRCLEAN: Damper_Setting(DAMPER_OA, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_EA, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_RA, 140); // 90 = close, 0 = open 3step--reverse Damper_Setting(DAMPER_AIR, 0); // 90 = close, 0 = open break; case MODE_BYPASS: Damper_Setting(DAMPER_OA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_EA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_BYPASS, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_SA, 0); // 90 = close, 0 = open Damper_Setting(DAMPER_RA, 140); // 90 = close, 0 = open 3step--reverse Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open break; case MODE_OFF: default: Damper_Setting(DAMPER_OA, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_EA, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_BYPASS, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_SA, 100); // 90 = close, 0 = open Damper_Setting(DAMPER_RA, 0); // 90 = close, 0 = open 3step--reverse Damper_Setting(DAMPER_AIR, 105); // 90 = close, 0 = open break; } if(Pre_Damper_Mode != mmm) { Step_Status = 0; if(Pre_Damper_Mode == MODE_VENTILATION) { Step_pos = 2; } else if(mmm == MODE_OFF) { Step_pos = 2; } else { Step_pos = 0; } } Pre_Damper_Mode = mmm; } // step x = angle*85 / 7.5 // angle 90 -> x = 1020 uint8_t Step_motor_init(void) // Rev = 0 ������ , { uint16_t i; for(i=0; i<7; i++) { Step_dir[i] = 0; Current_Step_Count[i] = 1020; Target_Step_Count[i] = 1020; } for(i=0; i<1077; i++){Step_M5_Process(1);Step_M6_Process(0);delay_us(2000);} // for(i=0; i<400; i++){Step_M5_Process(1);delay_us(1500);} // EBSN Step_M5_Stop(); Step_M6_Stop(); for(i=0; i<1077; i++){Step_M1_Process(0);Step_M2_Process(0);delay_us(1500);} Step_M1_Stop(); Step_M2_Stop(); for(i=0; i<1077; i++){Step_M3_Process(0);Step_M4_Process(0);delay_us(1500);} Step_M3_Stop(); Step_M4_Stop(); Damper_Mode(MODE_OFF); for(i=0; i<7; i++) { Current_Step_Count[i] = Target_Step_Count[i]; } return 0; } void Damper_Setting(uint8_t damper_num, float angle_degree) // dir = 0 ������ { Target_Step_Count[damper_num] = (uint16_t)(angle_degree * 85 / 7.5); } #define StepInterval_Fast 1 #define StepInterval_Slow 5 uint8_t Step_Interval1 = StepInterval_Slow; uint8_t Step_Interval2 = StepInterval_Slow; uint8_t Step_Interval3 = StepInterval_Slow; uint8_t Step_Interval4 = StepInterval_Slow; uint8_t Step_Interval5 = StepInterval_Slow; uint8_t Step_Interval6 = StepInterval_Slow; uint16_t StartFlag1 = 0; uint16_t StartFlag2 = 0; uint16_t StartFlag3 = 0; uint16_t StartFlag4 = 0; uint16_t StartFlag5 = 0; uint16_t StartFlag6 = 0; void Step_process(void) { // 1ms process switch(Step_pos) { case 0: if(Step_Interval1) { Step_Interval1 -- ; } else { if(Current_Step_Count[1] > Target_Step_Count[1]) { Step_M1_Process(1); Step_Interval1 = 3; Current_Step_Count[1]--; Step_Status &= ~1; } else if(Current_Step_Count[1] < Target_Step_Count[1]) { Step_M1_Process(0); Step_Interval1 = 3; Current_Step_Count[1]++; Step_Status &= ~1; } else { Step_M1_Stop(); Step_Status |= 1; StartFlag1 = 0; Step_Interval1 = 0; } } if(Step_Interval2) { Step_Interval2 -- ; } else { if(Current_Step_Count[2] > Target_Step_Count[2]) { Step_M2_Process(1); if(StartFlag2 < 400)Step_Interval2 = StepInterval_Slow; else Step_Interval2 = StepInterval_Fast; StartFlag2++; Current_Step_Count[2]--; Step_Status &= ~2; } else if(Current_Step_Count[2] < Target_Step_Count[2]) { Step_M2_Process(0); if(StartFlag2 < 400)Step_Interval2 = StepInterval_Slow; else Step_Interval2 = StepInterval_Fast; StartFlag2++; Current_Step_Count[2]++; Step_Status &= ~2; } else { Step_M2_Stop(); Step_Status |= 2; StartFlag2 = 0; Step_Interval2 = 0; } } if((Step_Status & 0x03) == 0x03)Step_pos++; break; case 1: if(Step_Interval3) { Step_Interval3 -- ; } else { if(Current_Step_Count[3] > Target_Step_Count[3]) { Step_M3_Process(1); if(StartFlag3 < 511)Step_Interval3 = StepInterval_Slow; else Step_Interval3 = StepInterval_Fast; StartFlag3++; Current_Step_Count[3]--; Step_Status &= ~4; } else if(Current_Step_Count[3] < Target_Step_Count[3]) { Step_M3_Process(0); if(StartFlag3 < 511)Step_Interval3 = StepInterval_Slow; else Step_Interval3 = StepInterval_Fast; StartFlag3++; Current_Step_Count[3]++; Step_Status &= ~4; } else { Step_M3_Stop(); Step_Status |= 4; StartFlag3 = 0; Step_Interval3 = 0; } } if(Step_Interval4) { Step_Interval4 -- ; } else { if(Current_Step_Count[4] > Target_Step_Count[4]) { Step_M4_Process(1); if(StartFlag4 < 511)Step_Interval4 = StepInterval_Slow; else Step_Interval4 = StepInterval_Fast; StartFlag4++; Current_Step_Count[4]--; Step_Status &= ~8; } else if(Current_Step_Count[4] < Target_Step_Count[4]) { Step_M4_Process(0); if(StartFlag4 < 511)Step_Interval4 = StepInterval_Slow; else Step_Interval4 = StepInterval_Fast; StartFlag4++; Current_Step_Count[4]++; Step_Status &= ~8; } else { Step_M4_Stop(); Step_Status |= 8; StartFlag4 = 0; Step_Interval4 = 0; } } if((Step_Status & 0x0C) == 0x0C)Step_pos++; break; case 2: if(Step_Interval5)// RA is 3 Dan { Step_Interval5 -- ; } else { if(Current_Step_Count[5] > Target_Step_Count[5]) // RA is 3 Dan { Step_M5_Process(1); Step_Interval5 = 3; Current_Step_Count[5]--; Step_Status &= ~0x10; } else if(Current_Step_Count[5] < Target_Step_Count[5]) { Step_M5_Process(0); Step_Interval5 = 3; Current_Step_Count[5]++; Step_Status &= ~0x10; } else { Step_M5_Stop(); Step_Status |= 0x10; Step_Interval5 = 0; } } if(Step_Interval6) { Step_Interval6 -- ; } else { if(Current_Step_Count[6] > Target_Step_Count[6]) { Step_M6_Process(1); if(StartFlag6 < 511)Step_Interval6 = StepInterval_Slow; else Step_Interval6 = StepInterval_Fast; StartFlag6++; Current_Step_Count[6]--; Step_Status &= ~0x20; } else if(Current_Step_Count[6] < Target_Step_Count[6]) { Step_M6_Process(0); if(StartFlag6 < 511)Step_Interval6 = StepInterval_Slow; else Step_Interval6 = StepInterval_Fast; StartFlag6++; Current_Step_Count[6]++; Step_Status &= ~0x20; } else { Step_M6_Stop(); Step_Status |= 0x20; StartFlag6 = 0; Step_Interval6 = 0; } } if((Step_Status & 0x30) == 0x30)Step_pos = 0; break; default: Step_pos=0; break; } } uint8_t s_FAN1_VEN_1_DAN; uint8_t s_FAN1_VEN_2_DAN; uint8_t s_FAN1_VEN_3_DAN; uint8_t s_FAN1_VEN_4_DAN; uint8_t s_FAN1_AIR_1_DAN; uint8_t s_FAN1_AIR_2_DAN; uint8_t s_FAN1_AIR_3_DAN; uint8_t s_FAN1_AIR_4_DAN; uint8_t s_FAN1_BYPASS_1_DAN; uint8_t s_FAN1_BYPASS_2_DAN; uint8_t s_FAN1_BYPASS_3_DAN; uint8_t s_FAN1_BYPASS_4_DAN; uint8_t s_FAN2_VEN_1_DAN; uint8_t s_FAN2_VEN_2_DAN; uint8_t s_FAN2_VEN_3_DAN; uint8_t s_FAN2_VEN_4_DAN; uint8_t s_FAN2_AIR_1_DAN; uint8_t s_FAN2_AIR_2_DAN; uint8_t s_FAN2_AIR_3_DAN; uint8_t s_FAN2_AIR_4_DAN; uint8_t s_FAN2_BYPASS_1_DAN; uint8_t s_FAN2_BYPASS_2_DAN; uint8_t s_FAN2_BYPASS_3_DAN; uint8_t s_FAN2_BYPASS_4_DAN; extern int16_t Volum1_value, Volum2_value; extern uint8_t Rommcon_Version; uint8_t Fan1_Speed = 0, Fan2_Speed = 0; uint8_t Target_Fan1_Speed = 0, Target_Fan2_Speed = 0; uint8_t Pre_Run_Mode = 100; uint16_t Auto_Time = 0; uint16_t Damper_wait_time = 0; volatile uint8_t Vsp_Mode[5] = {0,}; volatile uint8_t Pre_Vsp_Mode = 0; float Pre_Fan1_pwm = 0; float Pre_Fan2_pwm = 0; uint8_t Motor_Off_Count; void PWM_out_process(void) { float Fan1_pwm = 0, Fan2_pwm = 0; if((Fan_Mode != 0)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP)) { BLDC_PW = 0; // ON Motor_Off_Count = 0; } else if((Fan_Mode == 0) && (Fan1_Speed == 0) && (Fan2_Speed == 0)) { Motor_Off_Count++; if(Motor_Off_Count >= 5) { BLDC_PW = 1; // OFF Motor_Off_Count = 5; } } Fan1_pwm = (float)(BLDC_SPEED_TABLE[Fan1_Speed] + BLDC_SPEED_TABLE[Fan1_Speed]*Volum1_value/1000); // if(Fan1_Speed > 50) Fan1_pwm -= (float)((BLDC_SPEED_TABLE[Fan1_Speed]-BLDC_SPEED_TABLE[50])*Volum1_value/10000); // else if(Fan1_Speed < 50)Fan1_pwm += (float)((BLDC_SPEED_TABLE[50]-BLDC_SPEED_TABLE[Fan1_Speed])*Volum1_value/10000); Fan2_pwm = (float)(BLDC_SPEED_TABLE[Fan2_Speed] + BLDC_SPEED_TABLE[Fan2_Speed]*Volum2_value/1000); // if(Fan2_Speed > 50) Fan2_pwm += (float)((BLDC_SPEED_TABLE[Fan2_Speed]-BLDC_SPEED_TABLE[50])*Volum2_value/100); // else if(Fan2_Speed < 50)Fan2_pwm -= (float)((BLDC_SPEED_TABLE[50]-BLDC_SPEED_TABLE[Fan2_Speed])*Volum2_value/100); if(Fan1_pwm > 10000)Fan1_pwm = 10000;if(Fan1_pwm < 0)Fan1_pwm = 0; if(Fan2_pwm > 10000)Fan2_pwm = 10000;if(Fan2_pwm < 0)Fan2_pwm = 0; Fan1_pwm = 10000 - Fan1_pwm; Fan2_pwm = 10000 - Fan2_pwm; if(Pre_Fan1_pwm != Fan1_pwm)BLDC1_Duty_Change((uint32_t)Fan1_pwm); if(Pre_Fan2_pwm != Fan2_pwm)BLDC2_Duty_Change((uint32_t)Fan2_pwm); Pre_Fan1_pwm = Fan1_pwm; Pre_Fan2_pwm = Fan2_pwm; } extern uint8_t Vsp_Select; uint8_t Pre_Auto_Mode = 0; uint8_t Pre_Auto_Fan_Mode = 0; uint16_t Auto_Mode_Timer = 0; void Fan_Speed_process(void) // 100ms { uint8_t i = 0; if((Fan_Mode == 0)&&(Run_Mode == MODE_VENTILATION)&&(RJ_Vsp_Mode != RX_DATA_MODE_VSP)&&(Vsp_Mode[1] != 0x10)) { Power_off_process(0); for(i=1; i<7; i++)Diffuser_Power[i] = 0; //////diffuser off Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; if(Fan1_Speed > Target_Fan1_Speed)Fan1_Speed--; if(Fan2_Speed > Target_Fan2_Speed)Fan2_Speed--; PWM_out_process(); if((Fan1_Speed == 0) && (Fan2_Speed == 0)) { Damper_Mode(MODE_OFF); Diffuser_Damper_process(MODE_OFF); } return; } //if(Vsp_Mode == VSP_SETTING_MODE) if((Vsp_Mode[1] == 0x10)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP)) { Pre_Vsp_Mode = Vsp_Mode[1]; if((Vsp_Select >= 0x10)&&(Vsp_Select <= 0x20)) { Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; Damper_Mode(MODE_OFF); goto PASS1; } if(Vsp_Select <= 4)//vent { Damper_Mode(MODE_VENTILATION); Target_Fan1_Speed = Test_Fan1_Speed; Target_Fan2_Speed = Test_Fan2_Speed; } else if(Vsp_Select <= 5) // bypass { Damper_Mode(MODE_BYPASS); Target_Fan1_Speed = Test_Fan1_Speed; Target_Fan2_Speed = Test_Fan2_Speed; } else if(Vsp_Select <= 9) //air { Damper_Mode(MODE_AIRCLEAN); Target_Fan1_Speed = Test_Fan1_Speed; Target_Fan2_Speed = Test_Fan2_Speed; } else if(Vsp_Select == 0x25) { Filter_Rpm_Auto_Cal_Process(); } goto PASS1; } RPM_Auto_Cal_Start = 0; if(Run_Mode == MODE_VENTILATION) { if((Pre_Run_Mode != MODE_VENTILATION)||(Power_On == 0)) { Power_On = 1; for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on Target_Fan1_Speed = 0; // off Target_Fan2_Speed = 0; // off Damper_wait_time = 5; //0.5sec } else { if((Fan1_Speed != 0)||(Fan2_Speed != 0)) { if(Damper_wait_time == 5)goto PASS1; } Damper_Mode(MODE_VENTILATION); if(Step_Status != 0x3F)goto PASS1; if(Damper_wait_time == 1) { //if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default //if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default } if(Damper_wait_time)Damper_wait_time--; else { ; } } } else if(Run_Mode == MODE_AUTO) { if((Pre_Run_Mode != MODE_AUTO)||(Power_On == 0)) { Power_On = 1; for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on Target_Fan1_Speed = 0; // off Target_Fan2_Speed = 0; // off Damper_wait_time = 5; //0.5sec } else { if((Fan1_Speed != 0)||(Fan2_Speed != 0)) { if(Damper_wait_time == 5)goto PASS1; } Damper_Mode(MODE_VENTILATION); if(Step_Status != 0x3F)goto PASS1; if(Damper_wait_time == 1) { //if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default //if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default } if(Damper_wait_time)Damper_wait_time--; else { ; } } } else if(Run_Mode == MODE_BYPASS) { if((Pre_Run_Mode != MODE_BYPASS)||(Power_On == 0)) { Power_On = 1; for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on Target_Fan1_Speed = 0; // off Target_Fan2_Speed = 0; // off Damper_wait_time = 5; //0.5sec } else { if((Fan1_Speed != 0)||(Fan2_Speed != 0)) { if(Damper_wait_time == 5)goto PASS1; } Damper_Mode(MODE_BYPASS); if(Step_Status != 0x3F)goto PASS1; if(Damper_wait_time == 1) { // if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default // if(Target_Fan2_Speed == 0)Target_Fan2_Speed = s_FAN2_VEN_1_DAN; // default } if(Damper_wait_time)Damper_wait_time--; else { ; } } } else if(Run_Mode == MODE_AIRCLEAN) { if((Pre_Run_Mode != MODE_AIRCLEAN)||(Power_On == 0)) { Power_On = 1; for(i=1; i<7; i++)Diffuser_Power[i] = 1; //////diffuser on Target_Fan1_Speed = 0; // off Target_Fan2_Speed = 0; // off Damper_wait_time = 5; //0.5sec } else { if((Fan1_Speed != 0)||(Fan2_Speed != 0)) { if(Damper_wait_time == 5)goto PASS1; } Damper_Mode(MODE_AIRCLEAN); if(Step_Status != 0x3F)goto PASS1; if(Damper_wait_time == 1) { // if(Target_Fan1_Speed == 0)Target_Fan1_Speed = s_FAN1_VEN_1_DAN; // default // if(Target_Fan2_Speed == 0)Target_Fan2_Speed = 0; // default } if(Damper_wait_time)Damper_wait_time--; else { ; } } } else if(Run_Mode == MODE_FAN_TEST) { if(Vsp_Select <= 4) // vent { Damper_Mode(MODE_VENTILATION); } else if(Vsp_Select == 5)//bypass { Damper_Mode(MODE_BYPASS); } else // air 6,7,8 { Damper_Mode(MODE_AIRCLEAN); } Target_Fan1_Speed = Test_Fan1_Speed; Target_Fan2_Speed = Test_Fan2_Speed; } PASS1: if((Vsp_Mode[1] == 0x10)||(RJ_Vsp_Mode == RX_DATA_MODE_VSP)) { ; } else { Diffuser_Damper_process(Run_Mode); } if(Fan1_Speed > Target_Fan1_Speed)Fan1_Speed--; else if(Fan1_Speed < Target_Fan1_Speed)Fan1_Speed++; if(Fan2_Speed > Target_Fan2_Speed)Fan2_Speed--; else if(Fan2_Speed < Target_Fan2_Speed)Fan2_Speed++; PWM_out_process(); Pre_Run_Mode = Run_Mode; } extern float Float_Aeverage_calculator(float val, float * array_val); float rpm1_buff[20]={0,}; float rpm2_buff[20]={0,}; extern volatile uint32_t Bldc1_signal, Bldc2_signal; uint32_t urpm1=0, urpm2=0; void Bldc_check(void) { float rpm1=0, rpm2=0; rpm1 = (float)Bldc1_signal; rpm2 = (float)Bldc2_signal; Bldc1_signal = Bldc2_signal = 0; rpm1 = rpm1*60/12; rpm2 = rpm2*60/12; urpm1 = (uint32_t)Float_Aeverage_calculator(rpm1, rpm1_buff); urpm2 = (uint32_t)Float_Aeverage_calculator(rpm2, rpm2_buff); Filter_RPM_Check(); } extern uint32_t urpm1, urpm2; uint8_t Fan1_ErrCount = 0, Fan2_ErrCount = 0; void Fan_Error_Check(void) { if(Run_Mode == MODE_FAN_TEST)return; if(Power_On == 0)return; if((Fan1_Speed >= s_FAN1_VEN_1_DAN) && (urpm1 == 0)) { if(Fan1_ErrCount++ > 100){Fan1_ErrCount = 0; Err_Code |= ERROR_SA_FAN;Power_off_process(1);} } else if((Fan1_Speed >= s_FAN1_VEN_1_DAN) && (urpm1 != 0)) { Fan1_ErrCount = 0; Err_Code &= ~ERROR_SA_FAN; } if((Fan2_Speed >= s_FAN2_VEN_1_DAN) && (urpm2 == 0)) { if(Fan2_ErrCount++ > 100){Fan2_ErrCount = 0; Err_Code |= ERROR_EA_FAN;Power_off_process(1);} } else if((Fan2_Speed >= s_FAN2_VEN_1_DAN) && (urpm2 != 0)) { Fan2_ErrCount = 0; Err_Code &= ~ERROR_EA_FAN; } } void Fan_Speed_Setting(uint8_t r_mode, uint8_t f_speed) // Run_Mode, fanspeed { if(r_mode == MODE_VENTILATION) { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_VEN_1_DAN; Target_Fan2_Speed = s_FAN2_VEN_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_VEN_2_DAN; Target_Fan2_Speed = s_FAN2_VEN_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_VEN_3_DAN; Target_Fan2_Speed = s_FAN2_VEN_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_VEN_4_DAN; Target_Fan2_Speed = s_FAN2_VEN_4_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } else if(r_mode == MODE_AUTO) { if(Auto_Mode == MODE_VENTILATION+1) { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_VEN_1_DAN; Target_Fan2_Speed = s_FAN2_VEN_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_VEN_2_DAN; Target_Fan2_Speed = s_FAN2_VEN_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_VEN_3_DAN; Target_Fan2_Speed = s_FAN2_VEN_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_VEN_4_DAN; Target_Fan2_Speed = s_FAN2_VEN_4_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } else if(Auto_Mode == MODE_AIRCLEAN+1) { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_AIR_1_DAN; Target_Fan2_Speed = 0;//s2 400 // s_FAN2_AIR_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_AIR_2_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_AIR_3_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_AIR_4_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } else // AUTO MODE NONE { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_VEN_1_DAN; Target_Fan2_Speed = s_FAN2_VEN_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_VEN_2_DAN; Target_Fan2_Speed = s_FAN2_VEN_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_VEN_3_DAN; Target_Fan2_Speed = s_FAN2_VEN_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_VEN_4_DAN; Target_Fan2_Speed = s_FAN2_VEN_4_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } } else if(r_mode == MODE_AIRCLEAN) { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_AIR_1_DAN; Target_Fan2_Speed = 0;//s2 400 // s_FAN2_AIR_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_AIR_2_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_AIR_3_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_AIR_4_DAN; Target_Fan2_Speed = 0;//s2 400 / s_FAN2_AIR_3_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } else if(r_mode == MODE_BYPASS) { switch(f_speed) { case 1: Target_Fan1_Speed = s_FAN1_BYPASS_1_DAN; ; Target_Fan2_Speed = s_FAN2_BYPASS_1_DAN; break; case 2: Target_Fan1_Speed = s_FAN1_BYPASS_2_DAN; Target_Fan2_Speed = s_FAN2_BYPASS_2_DAN; break; case 3: Target_Fan1_Speed = s_FAN1_BYPASS_3_DAN; Target_Fan2_Speed = s_FAN2_BYPASS_3_DAN; break; case 4: Target_Fan1_Speed = s_FAN1_BYPASS_4_DAN; Target_Fan2_Speed = s_FAN2_BYPASS_4_DAN; break; default: Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; break; } } } void Filter_Rpm_Auto_Cal_Process(void) { if(RPM_Auto_Cal_Start == 0) { RPM_Auto_Cal_Start = 1; Rpm_Auto_Pos = 0; } RPM_Auto_Cal_Status = 1; switch(Rpm_Auto_Pos) { case 0: Damper_Mode(MODE_VENTILATION); Rpm_Auto_Delay = 50; //5sec Rpm_Auto_Pos++; break; case 1: if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;} Target_Fan1_Speed = s_FAN1_VEN_2_DAN; ////////////////// S1400 Target_Fan2_Speed = s_FAN2_VEN_2_DAN; Rpm_Auto_Delay = 500; //50sec Rpm_Auto_Pos++; break; case 2: if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;} Test_RPM_Vent_Reference[1] = (uint16_t)urpm2; ////////////////// S400 Rpm_Auto_Pos++; break; case 3: Target_Fan1_Speed = s_FAN1_VEN_3_DAN; ////////////////// S400 Target_Fan2_Speed = s_FAN2_VEN_3_DAN; Rpm_Auto_Delay = 400; //50sec Rpm_Auto_Pos++; break; case 4: if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;} Test_RPM_Vent_Reference[2] = (uint16_t)urpm2; ////////////////// S400 Target_Fan1_Speed = 0; Target_Fan2_Speed = 0; Rpm_Auto_Delay = 50; //5sec Rpm_Auto_Pos++; break; case 5: if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;} Damper_Mode(MODE_OFF); Rpm_Auto_Delay = 50; //3sec Rpm_Auto_Pos++; break; case 6: if(Rpm_Auto_Delay){Rpm_Auto_Delay--;break;} EEP_Save_Flag = 1; Rpm_Auto_Pos++; break; default: RPM_Auto_Cal_Status = 0; break; } } void Filter_RPM_Check(void)//1sec { float sDelta = 0; //if(Filter_timer_change <= 3000)return; //TEST if((Fan1_Speed == Target_Fan1_Speed)&&(Fan_Mode >= 2)) { if(Target_Fan1_Speed != 0)RPM_Check_Start = 1; else RPM_Check_Start = 0; } else { RPM_Check_Start = 0; } if(RPM_Check_Start == 1) { if(RPM_Stable_Timer++ >= 60) // 1min { RPM_Stable_Timer = 60; switch(Fan_Mode) { case 0: break; case 1: break; case 2: sDelta = (float)urpm2 - (float)RPM_Vent_Reference[1]; if((sDelta > RPM_Vent_Delta[1])&&(RPM_Vent_Delta[1] != 0)) { Err_Code |= ERROR_FILTER_CHANGE; } break; case 3: sDelta = (float)urpm2 - (float)RPM_Vent_Reference[2]; if((sDelta > RPM_Vent_Delta[2])&&(RPM_Vent_Delta[2] != 0)) { Err_Code |= ERROR_FILTER_CHANGE; } break; default: break; } } } else { RPM_Stable_Timer = 0; } } uint8_t Total_Air_Volume = 0, Pre_Total_Air_Volume = 0; uint8_t Pre_Diffuser_mode = 0; uint16_t Diffuser_mode_change_timer = 0; uint8_t Diffuser_mode_type = 0; uint16_t Get_Air_Volume_Timer = 0; uint8_t First_Diffuser_excute_flag = 0; uint16_t Diffuser_Damper_process(uint8_t mode)//100ms { if(Focus_Mode_RunTime)Focus_Mode_RunTime--; if(Diffuser_mode_change_timer == 0) { Diffuser_mode_change_timer = 180;//about 24sec if((Pre_Total_Air_Volume == 0) && (Total_Air_Volume != 0)) { Diffuser_mode_type = 4; } else if((Pre_Total_Air_Volume != 0) && (Total_Air_Volume == 0)) { Diffuser_mode_type = 3; } else if(Pre_Total_Air_Volume > Total_Air_Volume) //dicrease { Diffuser_mode_type = 3; } else //increase { Diffuser_mode_type = 4; } Pre_Total_Air_Volume = Total_Air_Volume; Pre_Auto_Mode = Auto_Mode; } else { if((Pre_Diffuser_mode == mode)&&(First_Diffuser_excute_flag == 0)) { // Fan_Speed_Setting(Run_Mode, Fan_Mode); } } if(Diffuser_mode_change_timer == 180) { switch(Diffuser_mode_type) { case 1: // power on case 4: // mode change - Air_volum increse Diffuser_Dmp_Ang_SA[1] = Memory_Diffuser_Dmp_Ang_SA[1]; Diffuser_Dmp_Ang_RA[1] = Memory_Diffuser_Dmp_Ang_RA[1]; Diffuser_Dmp_Ang_SA[2] = Memory_Diffuser_Dmp_Ang_SA[2]; Diffuser_Dmp_Ang_RA[2] = Memory_Diffuser_Dmp_Ang_RA[2]; //Diffuser_Air_quality[1] = Memory_Diffuser_Air_quality[1]; //Diffuser_Air_quality[2] = Memory_Diffuser_Air_quality[2]; break; case 2: // power off case 3: // mode change - Air_volum dicrese Fan_Speed_Setting(Run_Mode, Fan_Mode); break; default: break; } } else if(Diffuser_mode_change_timer == 120) { switch(Diffuser_mode_type) { case 1: // power on case 4: // mode change - Air_volum increse case 2: // power off case 3: // mode change - Air_volum dicrese Diffuser_Dmp_Ang_SA[3] = Memory_Diffuser_Dmp_Ang_SA[3]; Diffuser_Dmp_Ang_RA[3] = Memory_Diffuser_Dmp_Ang_RA[3]; Diffuser_Dmp_Ang_SA[4] = Memory_Diffuser_Dmp_Ang_SA[4]; Diffuser_Dmp_Ang_RA[4] = Memory_Diffuser_Dmp_Ang_RA[4]; //Diffuser_Air_quality[3] = Memory_Diffuser_Air_quality[3]; //Diffuser_Air_quality[4] = Memory_Diffuser_Air_quality[4]; break; default: break; } } else if(Diffuser_mode_change_timer == 60) { switch(Diffuser_mode_type) { case 1: // power on case 4: // mode change - Air_volum increse Fan_Speed_Setting(Run_Mode, Fan_Mode); break; case 2: // power off case 3: // mode change - Air_volum dicrese Diffuser_Dmp_Ang_SA[1] = Memory_Diffuser_Dmp_Ang_SA[1]; Diffuser_Dmp_Ang_RA[1] = Memory_Diffuser_Dmp_Ang_RA[1]; Diffuser_Dmp_Ang_SA[2] = Memory_Diffuser_Dmp_Ang_SA[2]; Diffuser_Dmp_Ang_RA[2] = Memory_Diffuser_Dmp_Ang_RA[2]; //Diffuser_Air_quality[1] = Memory_Diffuser_Air_quality[1]; //Diffuser_Air_quality[2] = Memory_Diffuser_Air_quality[2]; break; default: break; } } if(Diffuser_mode_change_timer)Diffuser_mode_change_timer--; Pre_Diffuser_mode = mode; return(Diffuser_mode_change_timer); }