You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
5.5 KiB
226 lines
5.5 KiB
#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_count_down_begin_sys_time = 0;
|
|
int ozone_work_state = 0; // 0没有工作,1一直工作,2定时工作
|
|
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:
|
|
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);
|
|
printf("g_ozone_work_time:%d\n", g_ozone_work_time);
|
|
printf("g_count_down_begin_sys_time:%d\n", g_count_down_begin_sys_time);
|
|
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
|
|
|
|
void set_ozone_work_time(void) {
|
|
if (!ozone_work_state) { //如果现在不是工作状态,直接开始工作
|
|
ozone_work_state = 2; //处于定时工作状态
|
|
set_ozen_gears(0);
|
|
}
|
|
//获取现在的时间,作为判断倒计时时间的基准
|
|
g_count_down_begin_sys_time = get_sys_ticket();
|
|
port_fan_set(1); //风扇开始工作
|
|
printf("定时开始g_sys_sick:%d\n", g_sys_sick);
|
|
printf("定时开始g_count_down_begin_sys_time:%d\n",
|
|
g_count_down_begin_sys_time);
|
|
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 = 60000;//60s
|
|
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;
|
|
g_ozone_work_time = 0;
|
|
gears_led_on(3); //关闭RGB
|
|
timing_led_on(4); //关闭4个led灯
|
|
//将time_key_press_frequency=0下次按键按下从定时2小时开始
|
|
time_key_press_frequency = 0;
|
|
// 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;
|
|
}
|
|
}
|