sggt/App/APP_WU/Src/scr_setting_progam_out.c

892 lines
32 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "scr_setting_progam_out.h"
PROGRAM_OUT_DATA progout_data;
uint8_t cursor_conf1 = 0;
uint8_t cursor_conf1_prv = 99;
uint8_t cursor_conf2 = 0;
uint8_t cursor_conf2_prv = 99;
void program_out_init(void)
{
progout_data.output_unit = PROG_OUT_MA;
progout_data.output_mode = PROG_OUT_STEP;
progout_data.circulations = 3;
progout_data.hold_time = 3000;
progout_data.start_percent = 0;
progout_data.end_percent = 100;
progout_data.step_percent = 25;
progout_data.rising_percent = 100;
progout_data.falling_percent = 0;
progout_data.period = 5000;
progout_data.process = PROGOUT_WAITING;
progout_data.progout_tick = 0;
progout_data.progout_tick_flag = 0;
}
void program_out_config1(void)
{
//启用所需组件
if( lv_obj_has_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN); };
//隐藏多余组件
lv_obj_add_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN);
//显示左列文本
lv_label_set_text(guider_ui.screen_setting_label_00, text_pack.program_out_config1[0]);
lv_label_set_text(guider_ui.screen_setting_label_10, text_pack.program_out_config1[1]);
lv_label_set_text(guider_ui.screen_setting_label_20, text_pack.program_out_config1[2]);
lv_label_set_text(guider_ui.screen_setting_label_30, text_pack.program_out_config1[3]);
//显示右列值
text_update_conf1(CONF1_OUTPUT_UNIT);
text_update_conf1(CONF1_OUTPUT_MODE);
text_update_conf1(CONF1_CIRCULATIONS);
lv_label_set_text(guider_ui.screen_setting_label_31, ">");
//初始化游标
cursor_conf1 = 0;
cursor_conf1_prv = 99;
setting_contents_check(cursor_conf1, cursor_conf1_prv);
}
void val_modify_conf1(int8_t step)
{
switch(cursor_conf1)
{
case CONF1_OUTPUT_UNIT:
{
progout_data.output_unit += step;
if( (1 < progout_data.output_unit)&&(progout_data.output_unit < 200) ) progout_data.output_unit = 0;
if( progout_data.output_unit > 200 ) progout_data.output_unit = 1;
}
break;
case CONF1_OUTPUT_MODE:
{
progout_data.output_mode += step;
if( (1 < progout_data.output_mode)&&(progout_data.output_mode < 200) ) progout_data.output_mode = 0;
if( progout_data.output_mode > 200 ) progout_data.output_mode = 1;
}
break;
case CONF1_CIRCULATIONS:
{
progout_data.circulations += step;
if( (11 < progout_data.circulations)&&(progout_data.circulations < 200) ) progout_data.circulations = 1;
if( progout_data.circulations < 1 ) progout_data.circulations = 11;
}
break;
default:
break;
}
}
void text_update_conf1(uint8_t con)
{
char str_temp[20] = {0};
switch (con)
{
case CONF1_OUTPUT_UNIT:
{
switch (progout_data.output_unit)
{
case PROG_OUT_V:
{
if(tabdata.content_focus == 0)
{
lv_label_set_text(guider_ui.screen_setting_label_01, "V");
}
else
{
lv_label_set_text(guider_ui.screen_setting_label_01, "< V >");
}
}
break;
case PROG_OUT_MA:
{
if(tabdata.content_focus == 0)
{
lv_label_set_text(guider_ui.screen_setting_label_01, "mA");
}
else
{
lv_label_set_text(guider_ui.screen_setting_label_01, "< mA >");
}
}
break;
default:
break;
}
}
break;
case CONF1_OUTPUT_MODE:
{
if(tabdata.content_focus == 0)
{
lv_label_set_text(guider_ui.screen_setting_label_11, text_pack.program_out_config1_val[progout_data.output_mode]);
}
else
{
sprintf(str_temp, "< %s >", text_pack.program_out_config1_val[progout_data.output_mode]);
lv_label_set_text(guider_ui.screen_setting_label_11, str_temp);
}
}
break;
case CONF1_CIRCULATIONS:
{
if(tabdata.content_focus == 0)
{
if(progout_data.circulations <= CIRCULATIONS_MAX )
{
sprintf(str_temp, "%d", progout_data.circulations);
lv_label_set_text(guider_ui.screen_setting_label_21, str_temp);
}
else
{
lv_label_set_text(guider_ui.screen_setting_label_21, "");
}
}
else
{
if(progout_data.circulations <= CIRCULATIONS_MAX )
{
sprintf(str_temp, "< %d >", progout_data.circulations);
lv_label_set_text(guider_ui.screen_setting_label_21, str_temp);
}
else
{
lv_label_set_text(guider_ui.screen_setting_label_21, "< ∞ >");
}
}
}
break;
default:
break;
}
}
void program_out_config2(void)
{
switch (progout_data.output_mode)
{
case PROG_OUT_STEP:
{
//启用所需组件
if( lv_obj_has_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN); };
//隐藏多余组件
lv_obj_add_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN);
//显示左列文本
lv_label_set_text(guider_ui.screen_setting_label_00, text_pack.program_out_config2[0]);
lv_label_set_text(guider_ui.screen_setting_label_10, text_pack.program_out_config2[2]);
lv_label_set_text(guider_ui.screen_setting_label_20, text_pack.program_out_config2[3]);
lv_label_set_text(guider_ui.screen_setting_label_30, text_pack.program_out_config2[4]);
lv_label_set_text(guider_ui.screen_setting_label_40, text_pack.program_out_config2[1]);
//显示右列值
text_update_conf2(CONF2_OUTPUT_MODE);
text_update_conf2(CONF2_START_PERCENT);
text_update_conf2(CONF2_END_PERCENT);
text_update_conf2(CONF2_STEP_PERCENT);
text_update_conf2(CONF2_HOLD_TIME);
//初始化游标
cursor_conf2 = 1;
cursor_conf2_prv = 99;
setting_contents_check(cursor_conf2, cursor_conf2_prv);
}
break;
case PROG_OUT_TRIANGLE:
{
//启用所需组件
if( lv_obj_has_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_00, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_01, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_10, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_11, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_20, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_21, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_30, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_31, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_40, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_41, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_50, LV_OBJ_FLAG_HIDDEN); };
if( lv_obj_has_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN) ) { lv_obj_clear_flag(guider_ui.screen_setting_label_51, LV_OBJ_FLAG_HIDDEN); };
//显示左列文本
lv_label_set_text(guider_ui.screen_setting_label_00, text_pack.program_out_config2[0]);
lv_label_set_text(guider_ui.screen_setting_label_10, text_pack.program_out_config2[2]);
lv_label_set_text(guider_ui.screen_setting_label_20, text_pack.program_out_config2[3]);
lv_label_set_text(guider_ui.screen_setting_label_30, text_pack.program_out_config2[5]);
lv_label_set_text(guider_ui.screen_setting_label_40, text_pack.program_out_config2[6]);
lv_label_set_text(guider_ui.screen_setting_label_50, text_pack.program_out_config2[7]);
//显示右列值
text_update_conf2(CONF2_OUTPUT_MODE);
text_update_conf2(CONF2_START_PERCENT);
text_update_conf2(CONF2_END_PERCENT);
text_update_conf2(CONF2_RISING_PERCENT);
text_update_conf2(CONF2_FALLING_PERCENT);
text_update_conf2(CONF2_PERIOD);
//初始化游标
cursor_conf2 = 1;
cursor_conf2_prv = 99;
setting_contents_check(cursor_conf2, cursor_conf2_prv);
}
break;
default:
break;
}
}
void text_update_conf2(uint8_t con)
{
char str_temp[20] = {0};
switch (con)
{
case CONF2_OUTPUT_MODE:
{
lv_label_set_text(guider_ui.screen_setting_label_01, text_pack.program_out_config1_val[progout_data.output_mode]);
}
break;
case CONF2_START_PERCENT:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d%%", progout_data.start_percent);
lv_label_set_text(guider_ui.screen_setting_label_11, str_temp);
}
else
{
sprintf(str_temp, "< %d%% >", progout_data.start_percent);
lv_label_set_text(guider_ui.screen_setting_label_11, str_temp);
}
}
break;
case CONF2_END_PERCENT:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d%%", progout_data.end_percent);
lv_label_set_text(guider_ui.screen_setting_label_21, str_temp);
}
else
{
sprintf(str_temp, "< %d%% >", progout_data.end_percent);
lv_label_set_text(guider_ui.screen_setting_label_21, str_temp);
}
}
break;
case CONF2_STEP_PERCENT:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d%%", progout_data.step_percent);
lv_label_set_text(guider_ui.screen_setting_label_31, str_temp);
}
else
{
sprintf(str_temp, "< %d%% >", progout_data.step_percent);
lv_label_set_text(guider_ui.screen_setting_label_31, str_temp);
}
}
break;
case CONF2_HOLD_TIME:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d", progout_data.hold_time);
lv_label_set_text(guider_ui.screen_setting_label_41, str_temp);
}
else
{
sprintf(str_temp, "< %d >", progout_data.hold_time);
lv_label_set_text(guider_ui.screen_setting_label_41, str_temp);
}
}
break;
case CONF2_RISING_PERCENT:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d%%", progout_data.rising_percent);
lv_label_set_text(guider_ui.screen_setting_label_31, str_temp);
}
else
{
sprintf(str_temp, "< %d%% >", progout_data.rising_percent);
lv_label_set_text(guider_ui.screen_setting_label_31, str_temp);
}
}
break;
case CONF2_FALLING_PERCENT:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d%%", progout_data.falling_percent);
lv_label_set_text(guider_ui.screen_setting_label_41, str_temp);
}
else
{
sprintf(str_temp, "< %d%% >", progout_data.falling_percent);
lv_label_set_text(guider_ui.screen_setting_label_41, str_temp);
}
}
break;
case CONF2_PERIOD:
{
if(tabdata.content_focus == 0)
{
sprintf(str_temp, "%d", progout_data.period);
lv_label_set_text(guider_ui.screen_setting_label_51, str_temp);
}
else
{
sprintf(str_temp, "< %d >", progout_data.period);
lv_label_set_text(guider_ui.screen_setting_label_51, str_temp);
}
}
break;
default:
break;
}
}
void val_modify_conf2(int8_t step)
{
uint8_t cur_temp = 0;
//阶跃和三角波的枚举类型存在交叉
if( (progout_data.output_mode == PROG_OUT_STEP)||(cursor_conf2 <= 2) )
{
cur_temp = cursor_conf2;
}
else
{
cur_temp = cursor_conf2 + 2;
}
switch(cur_temp)
{
//0~95
case CONF2_START_PERCENT:
{
progout_data.start_percent += step;
if(progout_data.start_percent > 200) progout_data.start_percent = 0;
if( (progout_data.end_percent - 5) <= progout_data.start_percent )
progout_data.start_percent = progout_data.end_percent - 5;
text_update_conf2(cur_temp);
if(progout_data.output_mode == PROG_OUT_STEP)
{
//起点与终点的间隔较小时,步长同步变化
if(progout_data.step_percent > (progout_data.end_percent - progout_data.start_percent))
progout_data.step_percent = progout_data.end_percent - progout_data.start_percent;
tabdata.content_focus = 0;
text_update_conf2(CONF2_STEP_PERCENT);
tabdata.content_focus = 1;
}
}
break;
//5~100
case CONF2_END_PERCENT:
{
progout_data.end_percent += step;
if(progout_data.end_percent > 100) progout_data.end_percent = 100;
if( (progout_data.end_percent - 5) <= progout_data.start_percent )
progout_data.end_percent = progout_data.start_percent + 5;
text_update_conf2(cur_temp);
if(progout_data.output_mode == PROG_OUT_STEP)
{
//起点与终点的间隔较小时,步长同步变化
if(progout_data.step_percent > (progout_data.end_percent - progout_data.start_percent))
progout_data.step_percent = progout_data.end_percent - progout_data.start_percent;
tabdata.content_focus = 0;
text_update_conf2(CONF2_STEP_PERCENT);
tabdata.content_focus = 1;
}
}
break;
case CONF2_STEP_PERCENT:
{
progout_data.step_percent += step;
if(progout_data.step_percent < 5) progout_data.step_percent = 5;
if(progout_data.step_percent > (progout_data.end_percent - progout_data.start_percent))
progout_data.step_percent = progout_data.end_percent - progout_data.start_percent;
text_update_conf2(cur_temp);
}
break;
case CONF2_HOLD_TIME:
{
if( step > 0 )
{
progout_data.hold_time += 500;
}
else
{
progout_data.hold_time -= 500;
}
if(progout_data.hold_time < 500) progout_data.hold_time = 500;
if(progout_data.hold_time > 30000) progout_data.hold_time = 30000;
text_update_conf2(cur_temp);
}
break;
case CONF2_RISING_PERCENT:
{
progout_data.rising_percent += step;
if( progout_data.rising_percent > 200 ) progout_data.rising_percent = 0;
if( progout_data.rising_percent > 100 ) progout_data.rising_percent = 100;
text_update_conf2(CONF2_RISING_PERCENT);
//下降占比同步更新
progout_data.falling_percent = 100 - progout_data.rising_percent;
tabdata.content_focus = 0;
text_update_conf2(CONF2_FALLING_PERCENT);
tabdata.content_focus = 1;
}
break;
case CONF2_FALLING_PERCENT:
{
progout_data.falling_percent += step;
if( progout_data.falling_percent > 200 ) progout_data.falling_percent = 0;
if( progout_data.falling_percent > 100 ) progout_data.falling_percent = 100;
text_update_conf2(CONF2_FALLING_PERCENT);
//上升占比同步更新
progout_data.rising_percent = 100 - progout_data.falling_percent;
tabdata.content_focus = 0;
text_update_conf2(CONF2_RISING_PERCENT);
tabdata.content_focus = 1;
}
break;
case CONF2_PERIOD:
{
if( step > 0 )
{
progout_data.period += 500;
}
else
{
progout_data.period -= 500;
}
if(progout_data.period < 1000) progout_data.period = 1000;
if(progout_data.period > 10000) progout_data.period = 10000;
text_update_conf2(cur_temp);
}
break;
default:
break;
}
}
void program_out_run(void)
{
switch (progout_data.output_mode)
{
case PROG_OUT_STEP:
{
program_out_step();
}
break;
case PROG_OUT_TRIANGLE:
{
program_out_triangle();
}
break;
default:
break;
}
}
void percent2val_out(float32 perc)
{
if( (perc < 0)||(perc > 100) ) return;
mux_signal.data_sv = perc / (float32)100 * (progout_data.out_max - progout_data.out_min) + progout_data.out_min;
mux_signal.data_sv = real2mux(mux_signal.data_sv);
}
int8_t step_dir = 0;
uint8_t cir_times = 0;
void program_out_step(void)
{
switch (progout_data.process)
{
case PROGOUT_START:
{
if( progout_data.progout_tick_flag == 0 )
{
//计时开始
progout_data.progout_tick_flag = 1;
progout_data.progout_tick = 0;
progout_data.out_percent = progout_data.start_percent;
percent2val_out(progout_data.out_percent);
step_dir = 1;
}
else
{
//到达起点%后等待一段时间
if(progout_data.progout_tick >= 3000)
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
progout_data.process = PROGOUT_RUNNING;
}
}
}
break;
case PROGOUT_RUNNING:
{
//迁移至mux任务内
}
break;
case PROGOUT_PAUSE:
{}
break;
case PROGOUT_END:
{
if( progout_data.progout_tick_flag == 0 )
{
progout_data.progout_tick_flag = 1;
//相关参数清零
step_dir = 0;
cir_times = 0;
}
else
{
//等待3秒后返回config2界面
if(progout_data.progout_tick >= 3000)
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
//输出关闭、清零
menu_data.io_on2off = IO_OFF;
mux_signal.data_sv = 0;
//加载菜单界面
lv_scr_load(guider_ui.screen_setting);
scr_setting_recover();
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
//隐藏主界面对象
lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
//当前界面为详细设置菜单切换至ITEM2
menu_data.scr_now = SCREEN_SETTING;
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
tabdata.item_cursor_prv = ITEM_0;
tabdata.item_cursor = ITEM_2;
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
//返回config2界面
program_out_config2();
current_operation = PROG_OUT_CONFIG_2;
key_config_update(current_operation);
progout_data.process = PROGOUT_WAITING;
}
}
}
break;
default:
break;
}
}
void running_process_step(void)
{
if(progout_data.progout_tick_flag == 0)
{
//计时开始
progout_data.progout_tick_flag = 1;
progout_data.progout_tick = 0;
progout_data.out_percent += step_dir * progout_data.step_percent;
if(progout_data.out_percent <= progout_data.start_percent)
{
//向下触底后本次循环结束
progout_data.out_percent = progout_data.start_percent;
step_dir = 1;
cir_times++;
if( progout_data.circulations < 11 )
{
//循环次数达到目标后,跳转至终止步骤
if(cir_times >= progout_data.circulations)
{
progout_data.process = PROGOUT_END;
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
}
}
else
{
//无限循环
cir_times = 0;
}
}
else if(progout_data.out_percent >= progout_data.end_percent)
{
//向上触顶后反向
progout_data.out_percent = progout_data.end_percent;
step_dir = -1;
}
percent2val_out(progout_data.out_percent);
}
else
{
if( progout_data.progout_tick >= progout_data.hold_time )
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
}
}
}
uint8_t tri_interval = 0; //控制周期,调整输出的时间间隔
uint8_t tri_step_up = 0; //上升阶段每次变化的步长
uint8_t tri_step_down = 0; //下降阶段每次变化的步长
uint8_t tri_up2down = 0; //上升和下降的分界点,第几个间隔
void program_out_triangle(void)
{
switch (progout_data.process)
{
case PROGOUT_START:
{
if( progout_data.progout_tick_flag == 0 )
{
//计时开始
progout_data.progout_tick_flag = 1;
progout_data.progout_tick = 0;
progout_data.out_percent = progout_data.start_percent;
percent2val_out(progout_data.out_percent);
//初始方向、控制间隔、上升&下降的分界点、上升&下降各自的步长
step_dir = 1;
tri_interval = progout_data.period / TRIANLE_PLOT_INTERVAL_MAX;
tri_up2down = ( (float32)progout_data.rising_percent/(float32)100 ) * TRIANLE_PLOT_INTERVAL_MAX;
if( tri_up2down == 0 )
{
tri_step_up = progout_data.end_percent - progout_data.start_percent;
tri_step_down = (progout_data.end_percent - progout_data.start_percent)/TRIANLE_PLOT_INTERVAL_MAX;
}
else if( tri_up2down == TRIANLE_PLOT_INTERVAL_MAX)
{
tri_step_up = (progout_data.end_percent - progout_data.start_percent)/TRIANLE_PLOT_INTERVAL_MAX;
tri_step_down = progout_data.end_percent - progout_data.start_percent;
}
else
{
tri_step_up = (progout_data.end_percent - progout_data.start_percent)/tri_up2down;
tri_step_down = (progout_data.end_percent - progout_data.start_percent)/(TRIANLE_PLOT_INTERVAL_MAX - tri_up2down);
}
}
else
{
//到达起点%后等待一段时间
if(progout_data.progout_tick >= 3000)
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
progout_data.process = PROGOUT_RUNNING;
}
}
}
break;
case PROGOUT_RUNNING:
{
//迁移至mux任务内
}
break;
case PROGOUT_PAUSE:
{}
break;
case PROGOUT_END:
{
if( progout_data.progout_tick_flag == 0 )
{
progout_data.progout_tick_flag = 1;
//相关参数清零
step_dir = 0;
cir_times = 0;
tri_interval = 0;
tri_step_up = 0;
tri_step_down = 0;
tri_up2down = 0;
}
else
{
//等待3秒后返回config2界面
if(progout_data.progout_tick >= 3000)
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
//输出关闭、清零
menu_data.io_on2off = IO_OFF;
mux_signal.data_sv = 0;
//加载菜单界面
lv_scr_load(guider_ui.screen_setting);
scr_setting_recover();
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
//隐藏主界面对象
lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
set_coil_val(COIL_ADDR_SCREEN_SWITCH, 1);
tabdata.item_cursor_prv = ITEM_0;
tabdata.item_cursor = ITEM_2;
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
//返回config2界面
program_out_config2();
current_operation = PROG_OUT_CONFIG_2;
key_config_update(current_operation);
progout_data.process = PROGOUT_WAITING;
}
}
}
break;
default:
break;
}
}
void running_process_triangle(void)
{
if( progout_data.progout_tick_flag == 0 )
{
//计时开始
progout_data.progout_tick_flag = 1;
progout_data.progout_tick = 0;
if(step_dir == 1)
{
progout_data.out_percent += tri_step_up;
if(progout_data.out_percent >= progout_data.end_percent)
{
progout_data.out_percent = progout_data.end_percent;
step_dir = -1;
}
}
else if(step_dir == -1)
{
progout_data.out_percent -= tri_step_down;
if( (progout_data.out_percent <= progout_data.start_percent)||(progout_data.out_percent > 101) )
{
progout_data.out_percent = progout_data.start_percent;
cir_times++;
step_dir = 1;
if( progout_data.circulations < 11 )
{
//循环次数达到目标后,跳转至终止步骤
if(cir_times >= progout_data.circulations)
{
progout_data.process = PROGOUT_END;
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
}
}
else
{
//无限循环
cir_times = 0;
}
}
}
percent2val_out(progout_data.out_percent);
}
else
{
if(progout_data.progout_tick >= tri_interval)
{
//计时结束
progout_data.progout_tick_flag = 0;
progout_data.progout_tick = 0;
}
}
}