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.
|
|
#include "ozone_work.h"
#define TIMINT_TIME 1800000
#define INTERVAL_TIME 300000
// #define TIMINT_TIME 10000
// #define INTERVAL_TIME 1000
extern uint32_t g_frequency; extern uint32_t g_sys_sick; extern uint32_t g_duty[4]; // PWMd��ռ�ձ�
extern adc_t adc; ozone_message_t ozone_message = {0}; int interval_key_press_frequency = 0; //ÿ����4�ν�����0
int g_ozen_gears = 1; //�ϵ�Ĭ������100%������һ�ε�λ��������50%��PWM
int time_key_press_frequency = 0; //ÿ����4�ν�����0
//###################### �ߵ͵�������ʼ ################//
void ozone_work_mode(int mode) { if (ozone_message.ozone_work_state != 2) { ozone_message.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) { ozone_message.count_interval_down_begin_sys_time = get_sys_ticket(); }
void update_ozer_work_state(void) { // int gears_time_key_press_frequency = 0;
if (ozone_message.ozone_interva_state == true && ozone_message.interva_flag == true) { //���������Ǽ�Ъ��Ϣʱ�䣬ֱ�ӿ�ʼ����
update_interval_down_begin_sys_time(); ozone_message.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
//###################### �ߵ͵��������� ################//
//###################### ��ʱ������ʼ ################//ozone_message
void set_ozone_work_time(void) { if (!ozone_message.ozone_work_state) { //�������ڲ��ǹ���״̬��ֱ�ӿ�ʼ����
set_ozen_gears(0); } ozone_message.ozone_work_state = 2; //���ڶ�ʱ����״̬
//��ȡ���ڵ�ʱ�䣬��Ϊ�жϵ���ʱʱ���Ļ�
ozone_message.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
time_key_press_frequency = 1; timing_led_on(0); break; case 1: // 60min
time_key_press_frequency = 2; timing_led_on(1); break; case 2: // 90min
time_key_press_frequency = 3; timing_led_on(2); break; case 3: // 120min
time_key_press_frequency = 4; timing_led_on(3); break; case 4: timing_led_on(4); ozone_message.ozone_work_state = 1; //һֱ����
time_key_press_frequency = 0; break; default: break; } ozone_message.timing_rank = time_key_press_frequency; ozone_message.ozone_work_time = time_key_press_frequency * TIMINT_TIME; //��ʱʱ��
printf("ozone_message.ozone_work_time%d\r\n", ozone_message.ozone_work_time); }
void timing_ozone_work_over(void) { /**
* @brief ��ʱ���� * */ close_ozone_work(); ozone_message.ozone_work_state = 0; ozone_message.ozone_work_time = 0; ozone_message.switch_key_state = false; time_key_press_frequency = 0; }
/**
* @brief ��ʱ�������� * */ void is_ozone_work_time_over(void) { if (port_haspassedms(ozone_message.count_down_begin_sys_time) >= TIMINT_TIME) { ozone_message.count_down_begin_sys_time = get_sys_ticket(); if (ozone_message.timing_rank == 1) { timing_ozone_work_over(); // interval_key_press_frequency = 0;
ozone_message.ozone_interva_state = false; interval_key_press_frequency = 0; printf("time over\r\n"); } else { ozone_message.timing_rank--; timing_led_on(ozone_message.timing_rank - 1); } } }
/**
* @brief ��ʱʱ���趨����Ӧָʾ������ * * @param led_number 0��led0 1��led1 2��led2 3��led3 4ȫ������������������ */
void timing_led_on(uint8_t led_number) { if (led_number == 4) { port_led0_set(false); port_led1_set(false); port_led2_set(false); port_led3_set(false); } else { 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 ozone_message.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) { time_key_press_frequency=0; interval_key_press_frequency = 0; ozone_message.ozone_interva_state = false; memset(&adc, 0, sizeof(adc)); close_ozone_work(); } void process_switch_key(void) { //�����Ժ������ϴιػ�ǰ�����ý��й���
ozone_message.switch_key_state = !ozone_message.switch_key_state; if (ozone_message.switch_key_state) { //����
set_ozone_starting_up(); } else { //�ػ�
set_ozone_shutdown(); } } //###################### ���ذ������� ################//
//###################### ��Ъ������ʼ ################//
void set_rgb_on(void) { int rgbx_flicker = 0; if (g_ozen_gears == 0) { rgbx_flicker = 2; } else { rgbx_flicker = g_ozen_gears - 1; } gears_led_on(rgbx_flicker); }
void set_rgb_off(void) { gears_led_on(3); //�ر�RGB
}
void set_rgb_flicker(void) { static uint32_t rgb_ticket = 0; static uint8_t rgb_ticket_count = 0; if (port_haspassedms(rgb_ticket) > 1000) { rgb_ticket = get_sys_ticket(); if (rgb_ticket_count < 3) { set_rgb_on(); } else { set_rgb_off(); rgb_ticket_count = 0; } rgb_ticket_count++; } }
/**
* @brief �������ƣ���Ъʱ����ʱ�����Ĺ���״̬ * */ void set_stop_interval_ozone_work(void) { set_rgb_on(); port_fan_set(true); ozone_interval_begin(); }
void set_interval_time(void) { update_interval_down_begin_sys_time(); switch (interval_key_press_frequency) { case 0: // printf("begin interval\n");
ozone_message.ozone_interva_state = true; ozone_message.ozone_interval_time = INTERVAL_TIME; // 5����
// g_ozone_interval_time = 60000; // 5����
interval_key_press_frequency = 1; break; case 1: // printf("stop interval");
ozone_message.ozone_interva_state = false; interval_key_press_frequency = 0; set_stop_interval_ozone_work(); 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(ozone_message.count_interval_down_begin_sys_time) >= ozone_message.ozone_interval_time) { update_interval_down_begin_sys_time(); if (ozone_message.interva_flag == false) { ozone_message.interva_flag = true; printf("work over\r\n"); ozone_interval_over(); } else if (ozone_message.interva_flag == true) { ozone_message.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); //���Ƚ�������
}
/**
* @brief ����ѹ�����쳣��ʱ�� * �رճ���������led0��˸ * */ void process_voltage_abnormal(void) { static uint32_t lastprocess = 0; static uint8_t led_state = 1; if (!adc.first_detection_abnormal) { adc.first_detection_abnormal = true; close_ozone_work(); } if (port_haspassedms(lastprocess) > 300) { lastprocess = get_sys_ticket(); led_state = !led_state; port_led0_set(led_state); } }
|