Почти все закрыл. Оптимизация памяти.

This commit is contained in:
Dmitriy 2024-11-21 02:17:21 +03:00
parent 27c33b2fe2
commit a5c3cd14ee

View File

@ -73,6 +73,22 @@ boolean need_clear_menu = false; // флаг очистки
boolean need_hide_cursor = false; // флаг скытия курсора на экране boolean need_hide_cursor = false; // флаг скытия курсора на экране
boolean start_edit_parameter = false; // флаг старта редактирования параметра boolean start_edit_parameter = false; // флаг старта редактирования параметра
const PROGMEM char sprintf_format[][SIZE_SCREEN_LINE*2] = {
"ver %s %s",
"Введите старый",
"Введите пароль",
"Введите новый",
"Неверный пароль",
"Пароль обновлен",
" Сброс прошел",
"Неверный пароль",
"%s %d %s ",
"%04ld",
"%s%04ld",
"не требуется", //11
"требуется", //12
};
// Переменные для работы с соляриями // Переменные для работы с соляриями
#define pause_before 0 #define pause_before 0
#define pause_after 1 #define pause_after 1
@ -115,13 +131,16 @@ const byte all_byte_parameters_default[COUNT_BYTE_PARAMETER] = {
#define short_time_counter 5 #define short_time_counter 5
#define money_counter 6 #define money_counter 6
#define password 7 #define password 7
#define COUNT_LONG_PARAMETER 8 #define serial_number 8
#define COUNT_LONG_PARAMETER 9
unsigned long all_long_parameters[COUNT_LONG_PARAMETER]; unsigned long all_long_parameters[COUNT_LONG_PARAMETER];
#define time_seance 0 #define time_seance 0
#define time_delay 0 #define time_delay 0
#define stage_password 0 #define stage_password 0
#define COUNT_TEXT_PARAMETER 1 #define version_date 0
#define service_line 1
#define COUNT_TEXT_PARAMETER 2
char text_parameters[COUNT_TEXT_PARAMETER][SIZE_SCREEN_LINE*2]; char text_parameters[COUNT_TEXT_PARAMETER][SIZE_SCREEN_LINE*2];
LiquidCrystal_I2C lcd(0x27, SIZE_SCREEN_LINE, SIZE_SCREEN); // устанавливаем адрес 0x27, и дисплей 16 символов 2 строки LiquidCrystal_I2C lcd(0x27, SIZE_SCREEN_LINE, SIZE_SCREEN); // устанавливаем адрес 0x27, и дисплей 16 символов 2 строки
@ -195,6 +214,7 @@ void read_buttons(byte x)
#define SOLARIUM_MENU_DEV 10 #define SOLARIUM_MENU_DEV 10
#define RESET_DEVICE_MENU 11 #define RESET_DEVICE_MENU 11
#define RESET_COUNTER_MENU 12 #define RESET_COUNTER_MENU 12
#define DEVICE_SETTING_MENU 13
enum type_menu_line { enum type_menu_line {
MENU_LINE = 0, MENU_LINE = 0,
@ -206,6 +226,8 @@ enum type_menu_line {
DIGIT_VIEW_LINE, DIGIT_VIEW_LINE,
PASSWORD_SET_LINE, PASSWORD_SET_LINE,
PASSWORD_VERIFY_LINE, PASSWORD_VERIFY_LINE,
INTEGER_PARAM_LINE,
STRING_PARAM_LINE,
}; };
struct param_limit { struct param_limit {
@ -434,6 +456,11 @@ const menu_screen menu_settings[] PROGMEM = {
FIXED_LINE, FIXED_LINE,
{0} {0}
}, },
{
"Устройство",
MENU_LINE,
{DEVICE_SETTING_MENU}
},
{ {
"Настройки", "Настройки",
MENU_LINE, MENU_LINE,
@ -445,7 +472,7 @@ const menu_screen menu_settings[] PROGMEM = {
{STATISTIC_MENU} {STATISTIC_MENU}
} }
}, },
3 4
}, },
// Меню 1 // Меню 1
{ {
@ -734,7 +761,7 @@ const menu_screen menu_settings[] PROGMEM = {
0, 0,
100, 100,
}, },
"руб" "руб/мин"
} }
}, },
}, },
@ -884,6 +911,53 @@ const menu_screen menu_settings[] PROGMEM = {
}, },
3 3
}, },
// Меню 13
{
{
{
"УСТРОЙСТВО",
FIXED_LINE,
{1}
},
{
"SN",
DIGIT_VIEW_LINE,
{
serial_number,
{
0,
9999,
},
""
}
},
{
"",
TEXT_PARAM_LINE,
{
version_date,
{
0,
0,
},
""
}
},
{
"Обсл.",
TEXT_PARAM_LINE,
{
service_line,
{
0,
0,
},
""
}
},
},
4
},
}; };
void find_first_line_menu() void find_first_line_menu()
@ -1145,6 +1219,26 @@ void isButtonDouble(byte x)
menu_inter++; menu_inter++;
menu_index = current_menu_screen.menu_lines[current_line_index].parameter.menu.next_menu_index; menu_index = current_menu_screen.menu_lines[current_line_index].parameter.menu.next_menu_index;
if(menu_index == DEVICE_SETTING_MENU)
{
char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[0], SIZE_SCREEN_LINE);
char ver[4];
memcpy_P( &ver, Device_Ver, 4 );
char date[9];
memcpy_P( &date, Device_Date, 9 );
sprintf(text_parameters[version_date],format, ver, date);
if(block > all_long_parameters[long_money_counter]) {
memcpy_P( &format, &sprintf_format[11], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[service_line],format);
} else {
memcpy_P( &format, &sprintf_format[12], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[service_line],format);
}
}
memcpy_P( &current_menu_screen, &menu_settings[menu_index], sizeof(menu_screen)); memcpy_P( &current_menu_screen, &menu_settings[menu_index], sizeof(menu_screen));
find_first_line_menu(); find_first_line_menu();
lcd.clear(); lcd.clear();
@ -1161,7 +1255,10 @@ void isButtonDouble(byte x)
temp_password = all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index]; temp_password = all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index];
all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0; all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0;
password_stage = 0; password_stage = 0;
sprintf(text_parameters[stage_password],"Введите старый");
char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[1], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
current_digit = 4; current_digit = 4;
} }
else if(current_menu_screen.menu_lines[current_line_index].type == PASSWORD_VERIFY_LINE) else if(current_menu_screen.menu_lines[current_line_index].type == PASSWORD_VERIFY_LINE)
@ -1169,7 +1266,10 @@ void isButtonDouble(byte x)
temp_password = all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index]; temp_password = all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index];
all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0; all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0;
password_stage = 0; password_stage = 0;
sprintf(text_parameters[stage_password],"Введите пароль");
char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[2], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
current_digit = 4; current_digit = 4;
} }
@ -1198,13 +1298,17 @@ void isButtonDouble(byte x)
hide_cursor(); hide_cursor();
need_hide_cursor = true; need_hide_cursor = true;
sprintf(text_parameters[stage_password],"Введите новый"); char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[3], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0; all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = 0;
password_stage = 1; password_stage = 1;
} }
else else
{ {
sprintf(text_parameters[stage_password],"Неверный пароль"); char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[4], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
password_stage = 0; password_stage = 0;
all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = temp_password; all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = temp_password;
} }
@ -1213,14 +1317,19 @@ void isButtonDouble(byte x)
{ {
password_stage = 0; password_stage = 0;
save_long_parameter(current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index); save_long_parameter(current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index);
sprintf(text_parameters[stage_password],"Пароль обновлен");
char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[5], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
} }
} }
else if(current_menu_screen.menu_lines[current_line_index].type == PASSWORD_VERIFY_LINE) else if(current_menu_screen.menu_lines[current_line_index].type == PASSWORD_VERIFY_LINE)
{ {
if(temp_password == all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index]) if(temp_password == all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index])
{ {
sprintf(text_parameters[stage_password]," Сброс прошел"); char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[6], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
if(menu_index == RESET_DEVICE_MENU) if(menu_index == RESET_DEVICE_MENU)
{ {
@ -1235,7 +1344,9 @@ void isButtonDouble(byte x)
} }
else else
{ {
sprintf(text_parameters[stage_password],"Неверный пароль"); char format[SIZE_SCREEN_LINE*2];
memcpy_P( &format, &sprintf_format[7], SIZE_SCREEN_LINE*2);
sprintf(text_parameters[stage_password], format);
} }
all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = temp_password; all_long_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = temp_password;
@ -1257,7 +1368,8 @@ void show_line(byte index_line)
else if(current_menu_screen.menu_lines[index_line].type == DIGIT_PARAM_LINE) else if(current_menu_screen.menu_lines[index_line].type == DIGIT_PARAM_LINE)
{ {
char line[SIZE_SCREEN_LINE * 2]; char line[SIZE_SCREEN_LINE * 2];
char format[11] = "%s %d %s "; char format[11];
memcpy_P( &format, &sprintf_format[8], 11);
if(start_edit_parameter && index_line == current_line_index) if(start_edit_parameter && index_line == current_line_index)
{ {
format[2] = '>'; format[2] = '>';
@ -1272,7 +1384,8 @@ void show_line(byte index_line)
char line[SIZE_SCREEN_LINE * 2]; char line[SIZE_SCREEN_LINE * 2];
if(start_edit_parameter && index_line == current_line_index) if(start_edit_parameter && index_line == current_line_index)
{ {
char format[6] = "%04ld"; char format[6];
memcpy_P( &format, &sprintf_format[9], 6);
sprintf(line,format, all_long_parameters[current_menu_screen.menu_lines[index_line].parameter.digit.param_index]); sprintf(line,format, all_long_parameters[current_menu_screen.menu_lines[index_line].parameter.digit.param_index]);
} }
else else
@ -1286,7 +1399,8 @@ void show_line(byte index_line)
char line[SIZE_SCREEN_LINE * 2]; char line[SIZE_SCREEN_LINE * 2];
if(start_edit_parameter && index_line == current_line_index) if(start_edit_parameter && index_line == current_line_index)
{ {
char format[8] = "%s%04ld"; char format[8];
memcpy_P( &format, &sprintf_format[10], 8);
sprintf(line,format, " ", all_long_parameters[current_menu_screen.menu_lines[index_line].parameter.digit.param_index]); sprintf(line,format, " ", all_long_parameters[current_menu_screen.menu_lines[index_line].parameter.digit.param_index]);
} }
else else
@ -1322,7 +1436,7 @@ void show_line(byte index_line)
text_parameters[current_menu_screen.menu_lines[index_line].parameter.text.param_index], text_parameters[current_menu_screen.menu_lines[index_line].parameter.text.param_index],
current_menu_screen.menu_lines[index_line].parameter.text.unit); current_menu_screen.menu_lines[index_line].parameter.text.unit);
lcd.print(convertCyr( utf8rus( line ))); lcd.print(convertCyr( utf8rus( line )));
} }
} }
/* /*
@ -1714,6 +1828,7 @@ void setup()
} }
all_long_parameters[money_counter] = 0; all_long_parameters[money_counter] = 0;
all_long_parameters[serial_number] = Device_SerNum;
} }
void loop() void loop()