#include "ozone_work.h" extern uint32_t g_frequency; extern uint32_t g_sys_sick; extern uint32_t g_duty[4]; uint32_t g_count_down_begin_sys_time = 0; int ozone_work_state = 0; // 0没有工作,1一直工作,2定时工作 void ozone_work_mode(int mode) { 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: g_ozone_work_over(); //结束工作 break; default: break; } } int g_ozen_gears = 1; // M键我认为是上电键,所以默认下次设置50%的PWM输出 void set_ozen_gears(int ozen_gears) { /** * @brief Construct a new switch object * 设置pwm输出 */ printf("g_sys_sick:%d\n",g_sys_sick); 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; 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) { 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; } } int time_key_press_frequency = 0; //每按下4次进行清0 uint32_t g_ozone_work_time = 0; void set_ozone_work_time(void) { if (!ozone_work_state) { //如果现在不是工作状态,直接开始工作 set_ozen_gears(0); } //获取现在的时间,作为判断倒计时时间的基准 g_count_down_begin_sys_time = get_sys_ticket(); ozone_work_state = 2; //处于定时工作状态 port_fan_set(1); //风扇开始工作 printf("定时开始g_sys_sick:%d\n",g_sys_sick); switch (time_key_press_frequency) { case 0: //两小时 // g_ozone_work_time = 5000;//5s // g_ozone_work_time = 72000000; g_ozone_work_time = 7200000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 1; timing_led_on(0); break; case 1: //四小时 // g_ozone_work_time = 100000; g_ozone_work_time = 14400000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 2; timing_led_on(1); break; case 2: //六小时 // g_ozone_work_time = 150000; g_ozone_work_time = 21600000; printf("g_ozone_work_time:%d", g_ozone_work_time); time_key_press_frequency = 3; timing_led_on(2); break; case 3: //八小时 // g_ozone_work_time = 200000; // g_ozone_work_time = 5000;//5s g_ozone_work_time = 28800000; 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 g_ozone_work_over(void) { /** * @brief 定时结束 * */ set_pwm_frequency_duty(g_frequency, g_duty[3]); //关闭PWM输出 ozone_work_state = 0; gears_led_on(3); //关闭RGB timing_led_on(4); //关闭4个led灯 time_key_press_frequency = 0; //将time_key_press_frequency=0下次按键按下从定时2小时开始 g_ozen_gears = 0; // g_ozen_gears=0下次按键按下从最高档开始 port_fan_set(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(); g_ozone_work_over(); printf("time over\r\n"); } } /** * @brief 定时时间设定后对应指示灯亮起 * * @param led_number 0亮led0 1亮led1 2亮led2 3亮led3 4全灭并代表臭氧机结束工作 */ static 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; } }