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.
 
 
 
 

348 lines
9.2 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_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;
//###################### 高低档按键开始 ################//
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 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;
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) {
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) { //如果现在不是工作状态,直接开始工作
set_ozen_gears(0);
}
ozone_work_state = 2; //处于定时工作状态
//获取现在的时间,作为判断倒计时时间的基准
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 5:
time_key_press_frequency = 0;
case 0: //两小时
// g_ozone_work_time = 7200000;
g_ozone_work_time = 10000;
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 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) {
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;
}
}
//###################### 定时按键结束 ################//
//###################### 开关按键开始 ################//
// void update_timing_interval_begin_time(void) {
// /**
// * @brief 更新倒计时时间
// *
// */
// g_count_down_begin_sys_time = get_sys_ticket();
// g_count_interval_down_begin_sys_time = get_sys_ticket();
// }
bool get_ozone_starting_up_state(void) { return switch_key_state; }
void set_ozone_starting_up(void) {
// ozone_interval_begin();
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);
}
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;
printf("switch_key_state%d\n", switch_key_state);
if (switch_key_state) { //开机
// update_timing_interval_begin_time();
set_ozone_starting_up();
} else { //关机
set_ozone_shutdown();
}
}
//###################### 开关按键结束 ################//
//###################### 间歇按键开始 ################//
void set_interval_time(void) {
//获取现在的时间,作为判断倒计时时间的基准
g_count_interval_down_begin_sys_time = get_sys_ticket();
switch (interval_key_press_frequency) {
case 0:
printf("begin interval");
g_ozone_interva_stat = true;
g_ozone_interval_time = 300000;
// g_ozone_interval_time = 3600000;
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, interval_time_key_press_frequency = 0;
if (g_ozen_gears == 0) {
interval_ozen_gears = 3;
} 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) { close_ozone_work(); }
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); //风扇结束工作
}
bool g_interva_flag = false;
void is_ozone_interva_time_over(void) {
if (port_haspassedms(g_count_interval_down_begin_sys_time) >=
g_ozone_interval_time) {
g_count_interval_down_begin_sys_time = get_sys_ticket();
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; //为了点击开关后无定时时间
}