From d105199434eabfe95a732f192d1d41caa1b729ca Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Tue, 17 Sep 2024 02:02:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82=20=D0=B2=D1=81=D0=B5=20=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=20=D1=81=D0=BE=D0=BB=D1=8F=D1=80=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B0=D1=82=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- solarium/solarium.ino | 210 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 181 insertions(+), 29 deletions(-) diff --git a/solarium/solarium.ino b/solarium/solarium.ino index 73b0c10..07c5ab9 100644 --- a/solarium/solarium.ino +++ b/solarium/solarium.ino @@ -70,17 +70,27 @@ boolean need_clear_menu = false; // флаг очистки boolean need_hide_cursor = false; // флаг скытия курсора на экране boolean start_edit_parameter = false; // флаг старта редактирования параметра +bool enable_reset = false; // разрешение сброса настроек + // Переменные для работы с соляриями #define pause_before 0 #define pause_after 1 #define price 2 #define remote_start 3 + +#define LUXURA_SOL 0 +#define FIRESUN_UV_SOL 1 +#define FIRESUN_UV_K_SOL 2 +#define SUNFLOWER_SOL 3 + #define solarium_type 4 #define work_regime 5 #define signal_rele 6 #define weight_impulse 7 #define reset_device 8 -#define COUNT_BYTE_PARAMETER 9 +#define reset_counters 9 +#define password 10 +#define COUNT_BYTE_PARAMETER 11 byte all_byte_parameters[COUNT_BYTE_PARAMETER]; const byte all_byte_parameters_default[COUNT_BYTE_PARAMETER] = { @@ -92,7 +102,9 @@ const byte all_byte_parameters_default[COUNT_BYTE_PARAMETER] = { 0, 0, 10, - 0 + 0, + 0, + 0, }; #define long_starts_counter 0 @@ -112,7 +124,7 @@ char text_parameters[COUNT_TEXT_PARAMETER][20]; // ============================== Описываем свой символ "Рубль" ======================================================================== // Просто "рисуем" символ единицами. Единицы при выводе на экран окажутся закрашенными точками, нули - не закрашенными -const PROGMEM byte rubl[8] = { +const byte rubl[8] = { 0b00000, 0b01110, 0b01001, @@ -270,7 +282,7 @@ const menu_screen menu_main[] PROGMEM = { 0, 0, }, - "rub" + 0 } }, { @@ -282,7 +294,7 @@ const menu_screen menu_main[] PROGMEM = { 0, 0, }, - "" + " " } }, }, @@ -339,6 +351,34 @@ const menu_screen menu_main[] PROGMEM = { }, 3 }, + // Меню паузы после сеанса + { + { + { + "", + FIXED_LINE, + {0} + }, + { + " PAUSE", + FIXED_LINE, + {0} + }, + { + "", + TEXT_PARAM_LINE, + { + time_seance, + { + 0, + 0, + }, + " " + } + }, + }, + 3 + }, // Меню окончания сеанса { { @@ -485,7 +525,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 100, }, - "rub" + 0 } }, { @@ -570,7 +610,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 100, }, - "" + " " } }, }, @@ -585,15 +625,15 @@ const menu_screen menu_settings[] PROGMEM = { {0} }, { - "", + "Pasword", DIGIT_PARAM_LINE, { - weight_impulse, + password, { 0, - 100, + 255, }, - "" + " " } }, }, @@ -616,7 +656,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 0, }, - "" + " " } }, { @@ -628,7 +668,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 0, }, - "rub" + 0 } }, { @@ -663,7 +703,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 0, }, - "" + " " } }, { @@ -675,7 +715,7 @@ const menu_screen menu_settings[] PROGMEM = { 0, 0, }, - "rub" + 0 } }, { @@ -758,10 +798,31 @@ void reset_parameter() all_long_parameters[short_time_counter] = 0; save_long_parameter(short_time_counter); + all_long_parameters[long_starts_counter] = 0; + save_long_parameter(long_starts_counter); + + all_long_parameters[long_money_counter] = 0; + save_long_parameter(long_money_counter); + + all_long_parameters[long_time_counter] = 0; + save_long_parameter(long_time_counter); + all_long_parameters[money_counter] = 0; save_long_parameter(money_counter); } +void reset_short_counters() +{ + all_long_parameters[short_starts_counter] = 0; + save_long_parameter(short_starts_counter); + + all_long_parameters[short_money_counter] = 0; + save_long_parameter(short_money_counter); + + all_long_parameters[short_time_counter] = 0; + save_long_parameter(short_time_counter); +} + /* удержание кнопки */ @@ -927,8 +988,11 @@ void show_line(byte index_line) char line[21]; sprintf(line,"%s %ld %s", current_menu_screen.menu_lines[index_line].string, all_long_parameters[current_menu_screen.menu_lines[index_line].parameter.digit.param_index], - current_menu_screen.menu_lines[index_line].parameter.digit.unit); - lcd.print(line); + current_menu_screen.menu_lines[index_line].parameter.digit.unit[0] >= 0x20 ? + current_menu_screen.menu_lines[index_line].parameter.digit.unit : + ""); + lcd.print(line); + current_menu_screen.menu_lines[index_line].parameter.digit.unit[0] < 0x20 ? lcd.write(0) : 0; } else if(current_menu_screen.menu_lines[index_line].type == TEXT_PARAM_LINE) { @@ -936,7 +1000,7 @@ void show_line(byte index_line) sprintf(line,"%s %s %s", current_menu_screen.menu_lines[index_line].string, text_parameters[current_menu_screen.menu_lines[index_line].parameter.text.param_index], current_menu_screen.menu_lines[index_line].parameter.text.unit); - lcd.print(line); + lcd.print(line); } } @@ -1007,6 +1071,49 @@ bool read_money_impulse () return impulse; } +void start_solarium_work() +{ + if(all_byte_parameters[signal_rele]) digitalWrite(lamp_start_pin, HIGH); + else digitalWrite(lamp_start_pin, LOW); + + switch(all_byte_parameters[solarium_type]) + { + case LUXURA_SOL: + break; + case FIRESUN_UV_SOL: + digitalWrite(vent_pin, HIGH); + break; + case FIRESUN_UV_K_SOL: + break; + case SUNFLOWER_SOL: + digitalWrite(vent_pin, HIGH); + break; + } +} + +void stop_solarium_work() +{ + if(all_byte_parameters[signal_rele]) digitalWrite(lamp_start_pin, LOW); + else digitalWrite(lamp_start_pin, HIGH); +} + +void stop_vent_work() +{ + switch(all_byte_parameters[solarium_type]) + { + case LUXURA_SOL: + break; + case FIRESUN_UV_SOL: + digitalWrite(vent_pin, LOW); + break; + case FIRESUN_UV_K_SOL: + break; + case SUNFLOWER_SOL: + digitalWrite(vent_pin, LOW); + break; + } +} + /* Прием денег */ @@ -1063,8 +1170,10 @@ void get_money () need_clear_menu = true; need_reload_menu = true; - bill_enable =! bill_enable; // устанавливаем флаг: не принимаем деньги + bill_enable = !bill_enable; // устанавливаем флаг: не принимаем деньги + // Запускаем работу солярия + start_solarium_work(); } } } @@ -1094,9 +1203,20 @@ void menu() } if(all_byte_parameters[reset_device]) { - reset_parameter(); + if(enable_reset) reset_parameter(); all_byte_parameters[reset_device] = 0; } + if(all_byte_parameters[reset_counters]) + { + if(enable_reset) reset_short_counters(); + all_byte_parameters[reset_counters] = 0; + } + if(all_byte_parameters[password] == 22) + { + enable_reset = true; + all_byte_parameters[password] = 0; + save_byte_parameter(password); + } } lcd.clear(); @@ -1111,6 +1231,18 @@ void one_half_second() } +void restart_menu() +{ + memcpy_P( ¤t_menu_screen, &menu_main[0], sizeof(menu_screen)); + sprintf(text_parameters[time_seance],""); + menu_index = 0; + + need_clear_menu = true; + need_reload_menu = true; + + bill_enable = !bill_enable; +} + /* Событие секунды */ @@ -1124,26 +1256,40 @@ void second_event() sprintf(text_parameters[time_seance]," %02d:%02d", minute, second); need_reload_menu = true; + if(menu_index == 4 && time_remain == 0) + { + restart_menu(); + } if(menu_index == 3 && time_remain == 0) { - memcpy_P( ¤t_menu_screen, &menu_main[0], sizeof(menu_screen)); - sprintf(text_parameters[time_seance],""); - menu_index = 0; + stop_vent_work(); + + memcpy_P( ¤t_menu_screen, &menu_main[4], sizeof(menu_screen)); + menu_index = 4; + second = 10; need_clear_menu = true; need_reload_menu = true; - - bill_enable =! bill_enable; } if(menu_index == 2 && time_remain == 0) { - memcpy_P( ¤t_menu_screen, &menu_main[3], sizeof(menu_screen)); - menu_index = 3; + stop_solarium_work(); + + if(all_byte_parameters[solarium_type] == LUXURA_SOL) + { + memcpy_P( ¤t_menu_screen, &menu_main[4], sizeof(menu_screen)); + menu_index = 4; + second = 10; + } + else + { + memcpy_P( ¤t_menu_screen, &menu_main[3], sizeof(menu_screen)); + menu_index = 3; + minute = all_byte_parameters[pause_after] * 60; + } need_clear_menu = true; need_reload_menu = true; - - second = 10; } } @@ -1175,14 +1321,20 @@ void setup() pinMode(LEDPin, OUTPUT); // инициализируем пин, подключенный к светодиоду, как выход pinMode(buttonPin_Service, INPUT_PULLUP); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin_Start, INPUT_PULLUP); // инициализируем пин, подключенный к кнопке, как вход + pinMode(lamp_start_pin, OUTPUT); // управление лампами + pinMode(vent_pin, OUTPUT); // управление вентиляторами digitalWrite(LEDPin,LOW); // изначально светодиод погашен digitalWrite(inhibitPin, LOW); // изначально разрешаем прием купюр + digitalWrite(lamp_start_pin, LOW); // изначально выключен + digitalWrite(vent_pin, LOW); // изначально выключен load_parameter(); memcpy_P( ¤t_menu_screen, &menu_main[0], sizeof(menu_screen)); sprintf(text_parameters[time_seance],""); menu_index = 0; + + all_long_parameters[money_counter] = 0; } void loop()