#include "ozone_work.h" extern uint32_t g_frequency; extern uint32_t g_sys_sick; extern uint32_t g_duty[4]; uint32_t g_ozone_work_time = 0; uint32_t g_ozone_interval_time = 0; uint32_t g_count_down_begin_sys_time = 0; uint32_t g_count_interval_down_begin_sys_time = 0; int ozone_work_state = 0; // 0没有工作,1一直工作,2定时工作 bool g_ozone_interva_stat = false; int interval_key_press_frequency = 0; //每按下4次进行清0 int g_ozen_gears = 1; //上电默认输出100%,下次输出50%的PWM static bool switch_key_state = false; int time_key_press_frequency = 0; //每按下4次进行清0 bool g_interva_flag = false; //###################### 高低档按键开始 ################// void ozone_work_mode(int mode) { if (ozone_work_state != 2) { ozone_work_state = 1; } port_fan_set(true); switch (mode) { case 0: gears_led_on(0); break; case 1: gears_led_on(1); break; case 2: gears_led_on(2); break; case 3: timing_ozone_work_over(); //结束工作 break; default: break; } } void update_interval_down_begin_sys_time(void) { g_count_interval_down_begin_sys_time = get_sys_ticket(); } void update_ozer_work_state(void) { // int gears_time_key_press_frequency = 0; if (g_ozone_interva_stat == true && g_interva_flag == true) { //如果现在是间歇休息时间,直接开始工作 update_interval_down_begin_sys_time(); g_interva_flag = false; } // if (time_key_press_frequency == 0) { // gears_time_key_press_frequency = 4; // } else { // gears_time_key_press_frequency = time_key_press_frequency - 1; // } // if (ozone_work_state == 2) { // timing_led_on(gears_time_key_press_frequency); //打开led灯 // } } void set_ozen_gears(int ozen_gears) { /** * @brief Construct a new switch object * 设置pwm输出 */ update_ozer_work_state(); //如果现在定时时间未结束并且处于间歇休息时间,直接设置为间歇工作时间 switch (ozen_gears) { case 0: set_pwm_frequency_duty(g_frequency, g_duty[0]); g_ozen_gears = 1; printf("pwm g_duty:%d", g_duty[0]); ozone_work_mode(0); break; case 1: set_pwm_frequency_duty(g_frequency, g_duty[1]); g_ozen_gears = 2; printf("pwm g_duty:%d", g_duty[1]); ozone_work_mode(1); break; case 2: set_pwm_frequency_duty(g_frequency, g_duty[2]); // g_ozen_gears = 3; g_ozen_gears = 0; printf("pwm g_duty:%d", g_duty[2]); ozone_work_mode(2); break; // case 3: // set_pwm_frequency_duty(g_frequency, g_duty[3]); // g_ozen_gears = 0; // printf("pwm g_duty:%d", g_duty[3]); // ozone_work_mode(3); // break; } } /** * @brief * * @param led_number 0亮红灯 1亮绿灯 2亮蓝灯 3全灭 */ void gears_led_on(uint8_t led_number) { for (int i = 0; i < 3; i++) { if (i == led_number) { s_rgb[i].set_led_state = true; s_rgb[i].port_led_set(s_rgb[i].set_led_state); } else { s_rgb[i].set_led_state = false; s_rgb[i].port_led_set(s_rgb[i].set_led_state); } } } #if 0 void gears_led_on(uint8_t led_number) { switch (led_number) { case 0: port_led_r_set(true); port_led_g_set(false); port_led_b_set(false); break; case 1: port_led_r_set(false); port_led_g_set(true); port_led_b_set(false); break; case 2: port_led_r_set(false); port_led_g_set(false); port_led_b_set(true); break; case 3: port_led_r_set(false); port_led_g_set(false); port_led_b_set(false); break; default: break; } } #endif //###################### 高低档按键结束 ################// //###################### 定时按键开始 ################// void set_ozone_work_time(void) { if (!ozone_work_state) { //如果现在不是工作状态,直接开始工作 set_ozen_gears(0); } ozone_work_state = 2; //处于定时工作状态 //获取现在的时间,作为判断倒计时时间的基准 g_count_down_begin_sys_time = get_sys_ticket(); port_fan_set(1); //风扇开始工作 switch (time_key_press_frequency) { case 5: time_key_press_frequency = 0; case 0: // 30min // g_ozone_work_time = 7200000; g_ozone_work_time = 1800000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 1; timing_led_on(0); break; case 1: // 60min // g_ozone_work_time = 14400000; g_ozone_work_time = 3600000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 2; timing_led_on(1); break; case 2: // 90min // g_ozone_work_time = 21600000; g_ozone_work_time = 5400000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 3; timing_led_on(2); break; case 3: // 120min // g_ozone_work_time = 28800000; g_ozone_work_time = 7200000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 4; timing_led_on(3); break; case 4: ozone_work_state = 1; //一直工作 printf("close timing"); timing_led_on(4); //关闭所有定时灯 time_key_press_frequency = 0; break; default: break; } } void timing_ozone_work_over(void) { /** * @brief 定时结束 * */ close_ozone_work(); ozone_work_state = 0; g_ozone_work_time = 0; switch_key_state = false; } /** * @brief 定时结束后将 * */ void is_ozone_work_time_over(void) { if (port_haspassedms(g_count_down_begin_sys_time) >= g_ozone_work_time) { g_count_down_begin_sys_time = get_sys_ticket(); timing_ozone_work_over(); // interval_key_press_frequency = 0; g_ozone_interva_stat = false; interval_key_press_frequency = 0; printf("time over\r\n"); } } /** * @brief 定时时间设定后对应指示灯亮起 * * @param led_number 0亮led0 1亮led1 2亮led2 3亮led3 4全灭并代表臭氧机结束工作 */ void timing_led_on(uint8_t led_number) { for (int i = 0; i < 4; i++) { if (i == led_number) { s_leds[i].set_led_state = true; s_leds[i].port_led_set(s_leds[i].set_led_state); } else { s_leds[i].set_led_state = false; s_leds[i].port_led_set(s_leds[i].set_led_state); } } } #if 0 void timing_led_on(uint8_t led_number) { switch (led_number) { case 0: port_led0_set(true); port_led1_set(false); port_led2_set(false); port_led3_set(false); break; case 1: port_led0_set(false); port_led1_set(true); port_led2_set(false); port_led3_set(false); break; case 2: port_led0_set(false); port_led1_set(false); port_led2_set(true); port_led3_set(false); break; case 3: port_led0_set(false); port_led1_set(false); port_led2_set(false); port_led3_set(true); break; case 4: port_led0_set(false); port_led1_set(false); port_led2_set(false); port_led3_set(false); break; default: break; } } #endif //###################### 定时按键结束 ################// //###################### 开关按键开始 ################// bool get_ozone_starting_up_state(void) { return switch_key_state; } /** * @brief 开机后工作状态 * */ void set_ozone_starting_up(void) { int starting_up_ozen_gears = 0; if (g_ozen_gears == 0) { starting_up_ozen_gears = 2; } else { starting_up_ozen_gears = g_ozen_gears - 1; } //开启PWM输出 set_ozen_gears(starting_up_ozen_gears); } /** * @brief 关闭工作状态 * */ void set_ozone_shutdown(void) { interval_key_press_frequency = 0; g_ozone_interva_stat = false; close_ozone_work(); } void process_switch_key(void) { //开机以后按照上次关机前的设置进行工作 switch_key_state = !switch_key_state; if (switch_key_state) { //开机 set_ozone_starting_up(); } else { //关机 set_ozone_shutdown(); } } //###################### 开关按键结束 ################// //###################### 间歇按键开始 ################// void set_interval_time(void) { update_interval_down_begin_sys_time(); switch (interval_key_press_frequency) { case 0: printf("begin interval\n"); g_ozone_interva_stat = true; // g_ozone_interval_time = 300000; // 5分钟 g_ozone_interval_time = 60000; // 5分钟 interval_key_press_frequency = 1; break; case 1: printf("stop interval"); g_ozone_interva_stat = false; interval_key_press_frequency = 0; break; } } static void ozone_interval_begin(void) { int interval_ozen_gears = 0; //int interval_time_key_press_frequency = 0; if (g_ozen_gears == 0) { interval_ozen_gears = 2; } else { interval_ozen_gears = g_ozen_gears - 1; } // if (time_key_press_frequency == 0) { // interval_time_key_press_frequency = 4; // } else { // interval_time_key_press_frequency = time_key_press_frequency - 1; // } //开启PWM输出 set_ozen_gears(interval_ozen_gears); // if (ozone_work_state == 2) { // timing_led_on(interval_time_key_press_frequency); //打开led灯 // } } void ozone_interval_over(void) { set_pwm_frequency_duty(g_frequency, g_duty[3]); //关闭PWM输出 port_fan_set(false); //风扇结束工作 } void is_ozone_interva_time_over(void) { if (port_haspassedms(g_count_interval_down_begin_sys_time) >= g_ozone_interval_time) { update_interval_down_begin_sys_time(); if (g_interva_flag == false) { g_interva_flag = true; printf("work over\r\n"); ozone_interval_over(); } else if (g_interva_flag == true) { g_interva_flag = false; printf("work begin\r\n"); ozone_interval_begin(); } } } //###################### 间歇按键结束 ################// void power_on_ozone_work_state(void) { close_ozone_work(); g_ozen_gears = 1; //为了点击开关后最高档工作 time_key_press_frequency = 5; //为了点击开关后无定时时间 } static void close_ozone_work(void) { set_pwm_frequency_duty(g_frequency, g_duty[3]); //关闭PWM输出 gears_led_on(3); //关闭RGB timing_led_on(4); //关闭4个led灯 port_fan_set(false); //风扇结束工作 }