mirror of
https://github.com/dimoniche/solarium_arduino.git
synced 2026-01-30 09:33:31 +03:00
Скелет работы с соляриями
This commit is contained in:
parent
eb203bfb28
commit
362aeb6ae5
@ -11,7 +11,12 @@ const byte inhibitPin = 4; // +Inhibit (зеленый)
|
|||||||
const byte buttonPin_Start = 15; // номер входа, подключенный к кнопке "Старт", А0
|
const byte buttonPin_Start = 15; // номер входа, подключенный к кнопке "Старт", А0
|
||||||
const byte buttonPin_Service = 13; // номер входа, подключенный к кнопке "Сервис", А1
|
const byte buttonPin_Service = 13; // номер входа, подключенный к кнопке "Сервис", А1
|
||||||
const byte LEDPin = 14; // номер выхода светодиода кнопки Старт, DB13
|
const byte LEDPin = 14; // номер выхода светодиода кнопки Старт, DB13
|
||||||
//const byte RelayPin = 17; // номер выхода, подключенный к реле, А3
|
|
||||||
|
// ноги управления соляриями
|
||||||
|
const byte lamp_start_pin = 5; // Запуск солярия Luxura. Включение ламп солярия FireSun, SunFlower
|
||||||
|
const byte vent_pin = 6; // Включение вентиляторов солярия FireSun, SunFlower
|
||||||
|
const byte start_solarium = 7; // Удаленный старт от солярия
|
||||||
|
|
||||||
const byte Device_SerNum = 1; // серийный номер устройства
|
const byte Device_SerNum = 1; // серийный номер устройства
|
||||||
const PROGMEM char Device_Ver[] = "0.0"; // версия ПО устройства
|
const PROGMEM char Device_Ver[] = "0.0"; // версия ПО устройства
|
||||||
const PROGMEM char Device_Date[] = "09/09/24"; // дата производства устройства
|
const PROGMEM char Device_Date[] = "09/09/24"; // дата производства устройства
|
||||||
@ -96,15 +101,14 @@ const byte all_byte_parameters_default[COUNT_BYTE_PARAMETER] = {
|
|||||||
#define short_starts_counter 3
|
#define short_starts_counter 3
|
||||||
#define short_money_counter 4
|
#define short_money_counter 4
|
||||||
#define short_time_counter 5
|
#define short_time_counter 5
|
||||||
#define impulse_counter 6
|
#define money_counter 6
|
||||||
#define COUNT_LONG_PARAMETER 7
|
#define COUNT_LONG_PARAMETER 7
|
||||||
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 1
|
#define time_delay 1
|
||||||
#define time_delay 1
|
|
||||||
#define COUNT_TEXT_PARAMETER 2
|
#define COUNT_TEXT_PARAMETER 2
|
||||||
char text_parameters[COUNT_TEXT_PARAMETER][6];
|
char text_parameters[COUNT_TEXT_PARAMETER][20];
|
||||||
|
|
||||||
// ============================== Описываем свой символ "Рубль" ========================================================================
|
// ============================== Описываем свой символ "Рубль" ========================================================================
|
||||||
// Просто "рисуем" символ единицами. Единицы при выводе на экран окажутся закрашенными точками, нули - не закрашенными
|
// Просто "рисуем" символ единицами. Единицы при выводе на экран окажутся закрашенными точками, нули - не закрашенными
|
||||||
@ -258,10 +262,10 @@ const menu_screen menu_main[] PROGMEM = {
|
|||||||
{0}
|
{0}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
" BHECEHO",
|
" BHECEHO",
|
||||||
DIGIT_VIEW_LINE,
|
DIGIT_VIEW_LINE,
|
||||||
{
|
{
|
||||||
impulse_counter,
|
money_counter,
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@ -271,7 +275,7 @@ const menu_screen menu_main[] PROGMEM = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"",
|
"",
|
||||||
DIGIT_VIEW_LINE,
|
TEXT_PARAM_LINE,
|
||||||
{
|
{
|
||||||
time_seance,
|
time_seance,
|
||||||
{
|
{
|
||||||
@ -316,13 +320,13 @@ const menu_screen menu_main[] PROGMEM = {
|
|||||||
{0}
|
{0}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
" CEAHC",
|
" CEAHC",
|
||||||
FIXED_LINE,
|
FIXED_LINE,
|
||||||
{0}
|
{0}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
" ",
|
" ",
|
||||||
DIGIT_VIEW_LINE,
|
TEXT_PARAM_LINE,
|
||||||
{
|
{
|
||||||
time_seance,
|
time_seance,
|
||||||
{
|
{
|
||||||
@ -754,8 +758,8 @@ void reset_parameter()
|
|||||||
all_long_parameters[short_time_counter] = 0;
|
all_long_parameters[short_time_counter] = 0;
|
||||||
save_long_parameter(short_time_counter);
|
save_long_parameter(short_time_counter);
|
||||||
|
|
||||||
all_long_parameters[impulse_counter] = 0;
|
all_long_parameters[money_counter] = 0;
|
||||||
save_long_parameter(impulse_counter);
|
save_long_parameter(money_counter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -978,9 +982,10 @@ void hide_cursor()
|
|||||||
* фиксируется время появления импульса в lastStateChangeTime. Если длительность импульса > debounceDelay (время дребезга),
|
* фиксируется время появления импульса в lastStateChangeTime. Если длительность импульса > debounceDelay (время дребезга),
|
||||||
* значит это полезный импульс, значения изменяются reading = trueState = lastState = LOW
|
* значит это полезный импульс, значения изменяются reading = trueState = lastState = LOW
|
||||||
*/
|
*/
|
||||||
void read_money_impulse ()
|
bool read_money_impulse ()
|
||||||
{
|
{
|
||||||
int reading = digitalRead(moneyPin);
|
int reading = digitalRead(moneyPin);
|
||||||
|
bool impulse = false;
|
||||||
if (reading != lastState)
|
if (reading != lastState)
|
||||||
{
|
{
|
||||||
lastStateChangeTime = millis();
|
lastStateChangeTime = millis();
|
||||||
@ -992,11 +997,14 @@ void read_money_impulse ()
|
|||||||
trueState = reading;
|
trueState = reading;
|
||||||
if (trueState == LOW)
|
if (trueState == LOW)
|
||||||
{
|
{
|
||||||
all_long_parameters[impulse_counter] += all_byte_parameters[weight_impulse];
|
all_long_parameters[money_counter] += all_byte_parameters[weight_impulse];
|
||||||
|
impulse = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastState = reading;
|
lastState = reading;
|
||||||
|
|
||||||
|
return impulse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1004,30 +1012,59 @@ void read_money_impulse ()
|
|||||||
*/
|
*/
|
||||||
void get_money ()
|
void get_money ()
|
||||||
{
|
{
|
||||||
read_money_impulse ();
|
bool impulse = read_money_impulse();
|
||||||
|
|
||||||
minute = all_long_parameters[impulse_counter] / all_byte_parameters[price];
|
minute = all_long_parameters[money_counter] / all_byte_parameters[price];
|
||||||
remain = all_long_parameters[impulse_counter] % all_byte_parameters[price];
|
remain = all_long_parameters[money_counter] % all_byte_parameters[price];
|
||||||
second = remain * 60 / all_byte_parameters[price];
|
second = remain * 60 / all_byte_parameters[price];
|
||||||
|
|
||||||
if (all_long_parameters[impulse_counter] >= all_byte_parameters[price])
|
if(impulse) need_reload_menu = true;
|
||||||
|
|
||||||
|
if (all_long_parameters[money_counter] >= all_byte_parameters[price])
|
||||||
{
|
{
|
||||||
// достаточно денег для оказания услуги
|
// достаточно денег для оказания услуги
|
||||||
sprintf(text_parameters[time_seance]," CEAHC %02d:%02d MUH", minute, second);
|
sprintf(text_parameters[time_seance]," CEAHC %02d:%02d MUH", minute, second);
|
||||||
|
|
||||||
digitalWrite(LEDPin, HIGH); // зажигаем светодиод
|
digitalWrite(LEDPin, HIGH); // зажигаем светодиод
|
||||||
|
|
||||||
|
if (digitalRead(buttonPin_Start) == LOW)
|
||||||
if (digitalRead(buttonPin_Start) == HIGH)
|
|
||||||
{
|
{
|
||||||
digitalWrite(inhibitPin, HIGH); // выставляем запрет приема монет
|
digitalWrite(inhibitPin, HIGH); // выставляем запрет приема монет
|
||||||
digitalWrite(LEDPin, LOW); // гасим светодиод
|
digitalWrite(LEDPin, LOW); // гасим светодиод
|
||||||
lcd.clear();
|
|
||||||
|
|
||||||
sprintf(text_parameters[time_seance],"%2d", all_byte_parameters[pause_before]);
|
// сохраняем статистику
|
||||||
delay(all_byte_parameters[pause_before]);
|
{
|
||||||
|
all_long_parameters[long_starts_counter]++;
|
||||||
|
save_long_parameter(long_starts_counter);
|
||||||
|
all_long_parameters[short_starts_counter]++;
|
||||||
|
save_long_parameter(short_starts_counter);
|
||||||
|
all_long_parameters[long_time_counter] += minute * 60 + second;
|
||||||
|
save_long_parameter(long_time_counter);
|
||||||
|
all_long_parameters[short_time_counter] += minute * 60 + second;
|
||||||
|
save_long_parameter(short_time_counter);
|
||||||
|
all_long_parameters[long_money_counter] += all_long_parameters[money_counter];
|
||||||
|
save_long_parameter(long_money_counter);
|
||||||
|
all_long_parameters[short_money_counter] += all_long_parameters[money_counter];
|
||||||
|
save_long_parameter(short_money_counter);
|
||||||
|
all_long_parameters[money_counter] = 0;
|
||||||
|
save_long_parameter(money_counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// задержка до запуска
|
||||||
|
memcpy_P( ¤t_menu_screen, &menu_main[1], sizeof(menu_screen));
|
||||||
|
sprintf(text_parameters[time_delay],"%2d", all_byte_parameters[pause_before]);
|
||||||
|
lcd.clear();
|
||||||
|
show_menu();
|
||||||
|
delay(all_byte_parameters[pause_before] * 1000);
|
||||||
|
|
||||||
|
memcpy_P( ¤t_menu_screen, &menu_main[2], sizeof(menu_screen));
|
||||||
|
menu_index = 2;
|
||||||
|
sprintf(text_parameters[time_seance]," %02d:%02d", minute, second);
|
||||||
|
need_clear_menu = true;
|
||||||
|
need_reload_menu = true;
|
||||||
|
|
||||||
bill_enable =! bill_enable; // устанавливаем флаг: не принимаем деньги
|
bill_enable =! bill_enable; // устанавливаем флаг: не принимаем деньги
|
||||||
|
// Запускаем работу солярия
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1079,7 +1116,35 @@ void one_half_second()
|
|||||||
*/
|
*/
|
||||||
void second_event()
|
void second_event()
|
||||||
{
|
{
|
||||||
|
unsigned long time_remain = minute * 60 + second - 1;
|
||||||
|
|
||||||
|
minute = time_remain / 60;
|
||||||
|
second = time_remain % 60;
|
||||||
|
|
||||||
|
sprintf(text_parameters[time_seance]," %02d:%02d", minute, second);
|
||||||
|
need_reload_menu = true;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
need_clear_menu = true;
|
||||||
|
need_reload_menu = true;
|
||||||
|
|
||||||
|
second = 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void countdown_timer()
|
void countdown_timer()
|
||||||
@ -1097,7 +1162,8 @@ void countdown_timer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup()
|
||||||
|
{
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
lcd.init(); // инициализация LCD
|
lcd.init(); // инициализация LCD
|
||||||
@ -1115,6 +1181,8 @@ void setup() {
|
|||||||
|
|
||||||
load_parameter();
|
load_parameter();
|
||||||
memcpy_P( ¤t_menu_screen, &menu_main[0], sizeof(menu_screen));
|
memcpy_P( ¤t_menu_screen, &menu_main[0], sizeof(menu_screen));
|
||||||
|
sprintf(text_parameters[time_seance],"");
|
||||||
|
menu_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
@ -1135,6 +1203,11 @@ void loop()
|
|||||||
{
|
{
|
||||||
get_money();
|
get_money();
|
||||||
}
|
}
|
||||||
|
if(need_clear_menu)
|
||||||
|
{
|
||||||
|
lcd.clear();
|
||||||
|
need_clear_menu = false;
|
||||||
|
}
|
||||||
if(need_reload_menu)
|
if(need_reload_menu)
|
||||||
{
|
{
|
||||||
show_menu();
|
show_menu();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user