mirror of
https://github.com/dimoniche/solarium_arduino.git
synced 2026-01-30 01:23:30 +03:00
Почти все закрыл. Оптимизация памяти.
This commit is contained in:
parent
27c33b2fe2
commit
a5c3cd14ee
@ -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( ¤t_menu_screen, &menu_settings[menu_index], sizeof(menu_screen));
|
memcpy_P( ¤t_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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user