mirror of
https://github.com/dimoniche/solarium_arduino.git
synced 2026-01-30 01:23:30 +03:00
Поменял алгоритм работы кнопок в меню
This commit is contained in:
parent
c85da270c2
commit
c2072b26f9
@ -26,13 +26,12 @@ const PROGMEM char Device_Date[] = "09/09/24"; // дата производ
|
|||||||
const unsigned long block = 500000; // блокировка устройства при превышении этой суммы денег
|
const unsigned long block = 500000; // блокировка устройства при превышении этой суммы денег
|
||||||
|
|
||||||
//======Переменные обработки клавиш=================
|
//======Переменные обработки клавиш=================
|
||||||
boolean lastReading = false; // флаг предыдущего состояния кнопки
|
boolean lastReading[2] = {false, false}; // флаг предыдущего состояния кнопки
|
||||||
boolean buttonSingle = false; // флаг состояния "краткое нажатие"
|
boolean buttonSingle[2] = {false, false}; // флаг состояния "краткое нажатие"
|
||||||
boolean buttonDouble = false; // флаг состояния "двойное нажатие"
|
boolean buttonDouble[2] = {false, false}; // флаг состояния "двойное нажатие"
|
||||||
boolean buttonHold = false; // флаг состояния "долгое нажатие"
|
boolean buttonHold[2] = {false, false}; // флаг состояния "долгое нажатие"
|
||||||
unsigned long onTime = 0; // переменная обработки временного интервала
|
unsigned long onTime[2] = {0, 0}; // переменная обработки временного интервала
|
||||||
unsigned long lastSwitchTime = 0; // переменная времени предыдущего переключения состояния
|
unsigned long lastSwitchTime[2] = {0, 0}; // переменная времени предыдущего переключения состояния
|
||||||
unsigned long ledStartTime = 0; // переменная-флаг времени начала включения LED
|
|
||||||
|
|
||||||
const int bounceTime = 10; // задержка для подавления дребезга
|
const int bounceTime = 10; // задержка для подавления дребезга
|
||||||
const int holdTime = 1000; // время, в течение которого нажатие можно считать удержанием кнопки
|
const int holdTime = 1000; // время, в течение которого нажатие можно считать удержанием кнопки
|
||||||
@ -135,50 +134,56 @@ LiquidCrystal_I2C lcd(0x27, SIZE_SCREEN_LINE, SIZE_SCREEN); //
|
|||||||
void read_buttons(byte x)
|
void read_buttons(byte x)
|
||||||
{
|
{
|
||||||
boolean reading = !digitalRead(x);
|
boolean reading = !digitalRead(x);
|
||||||
|
int index = (x == buttonPin_Service ? 0 : 1);
|
||||||
|
|
||||||
if (reading && !lastReading) // проверка первичного нажатия
|
if (reading && !lastReading[index]) // проверка первичного нажатия
|
||||||
{
|
{
|
||||||
onTime = millis();
|
onTime[index] = millis();
|
||||||
|
!index ? Serial.println("click button Service") : Serial.println("click button Start");
|
||||||
}
|
}
|
||||||
if (reading && lastReading) // проверка удержания
|
if (reading && lastReading[index]) // проверка удержания
|
||||||
{
|
{
|
||||||
if ((millis() - onTime) > holdTime)
|
if ((millis() - onTime[index]) > holdTime)
|
||||||
{
|
{
|
||||||
buttonHold = true;
|
buttonHold[index] = true;
|
||||||
|
!index ? Serial.println("buttonHold Service") : Serial.println("buttonHold Start");
|
||||||
digitalWrite(LEDPin, !digitalRead(LEDPin)); // при удержании кнопки мигает светодиод
|
digitalWrite(LEDPin, !digitalRead(LEDPin)); // при удержании кнопки мигает светодиод
|
||||||
|
isButtonHoldRepeate(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!reading && lastReading) // проверка отпускания кнопки
|
if (!reading && lastReading[index]) // проверка отпускания кнопки
|
||||||
{
|
{
|
||||||
if (((millis() - onTime) > bounceTime) && !buttonHold)
|
if (((millis() - onTime[index]) > bounceTime) && !buttonHold[index])
|
||||||
{
|
{
|
||||||
if ((millis() - lastSwitchTime) >= doubleTime)
|
if ((millis() - lastSwitchTime[index]) >= doubleTime)
|
||||||
{
|
{
|
||||||
lastSwitchTime = millis();
|
lastSwitchTime[index] = millis();
|
||||||
buttonSingle = true;
|
buttonSingle[index] = true;
|
||||||
|
!index ? Serial.println("buttonSingle Service") : Serial.println("buttonSingle Start");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lastSwitchTime = millis();
|
lastSwitchTime[index] = millis();
|
||||||
buttonDouble = true;
|
buttonDouble[index] = true;
|
||||||
buttonSingle = false;
|
!index ? Serial.println("buttonDouble Service") : Serial.println("buttonDouble Start");
|
||||||
isButtonDouble();
|
buttonSingle[index] = false;
|
||||||
buttonDouble = false; // сброс состояния после выполнения команды
|
buttonDouble[index] = false; // сброс состояния после выполнения команды
|
||||||
|
isButtonDouble(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (buttonHold)
|
if (buttonHold[index])
|
||||||
{
|
{
|
||||||
buttonDouble = false;
|
buttonDouble[index] = false;
|
||||||
isButtonHold();
|
buttonHold[index] = false; // сброс состояния после выполнения команды
|
||||||
buttonHold = false; // сброс состояния после выполнения команды
|
isButtonHold(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastReading = reading;
|
lastReading[index] = reading;
|
||||||
if (buttonSingle && (millis() - lastSwitchTime) > doubleTime)
|
if (buttonSingle[index] && (millis() - lastSwitchTime[index]) > doubleTime)
|
||||||
{
|
{
|
||||||
buttonDouble = false;
|
buttonDouble[index] = false;
|
||||||
isButtonSingle();
|
buttonSingle[index] = false; // сброс состояния после выполнения команды
|
||||||
buttonSingle = false; // сброс состояния после выполнения команды
|
isButtonSingle(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,7 +224,7 @@ struct parameter_digit {
|
|||||||
struct parameter_list {
|
struct parameter_list {
|
||||||
byte param_index;
|
byte param_index;
|
||||||
param_limit limit;
|
param_limit limit;
|
||||||
char list_data[4][13];
|
char list_data[4][11];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct parameter_header {
|
struct parameter_header {
|
||||||
@ -587,8 +592,8 @@ const menu_screen menu_settings[] PROGMEM = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Luxura ",
|
"Luxura ",
|
||||||
"FireSun UV ",
|
"FS UV ",
|
||||||
"FireSun UV+K",
|
"FS UV+K ",
|
||||||
"SunFlower"
|
"SunFlower"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -858,12 +863,49 @@ void reset_short_counters()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
удержание кнопки
|
удержание кнопки на повторе
|
||||||
*/
|
*/
|
||||||
void isButtonHold()
|
void isButtonHoldRepeate(byte x)
|
||||||
{
|
{
|
||||||
need_reload_menu = true;
|
need_reload_menu = true;
|
||||||
|
|
||||||
|
if(x == buttonPin_Start)
|
||||||
|
{
|
||||||
|
if(start_edit_parameter)
|
||||||
|
{
|
||||||
|
Serial.println("isButtonHoldRepeate");
|
||||||
|
if(current_menu_screen.menu_lines[current_line_index].type == DIGIT_PARAM_LINE)
|
||||||
|
{
|
||||||
|
if(all_byte_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index]++ >= current_menu_screen.menu_lines[current_line_index].parameter.digit.limit.max)
|
||||||
|
{
|
||||||
|
all_byte_parameters[current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index] = current_menu_screen.menu_lines[current_line_index].parameter.digit.limit.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(current_menu_screen.menu_lines[current_line_index].type == LIST_PARAM_LINE)
|
||||||
|
{
|
||||||
|
if(all_byte_parameters[current_menu_screen.menu_lines[current_line_index].parameter.list.param_index]++ >= current_menu_screen.menu_lines[current_line_index].parameter.list.limit.max)
|
||||||
|
{
|
||||||
|
all_byte_parameters[current_menu_screen.menu_lines[current_line_index].parameter.list.param_index] = current_menu_screen.menu_lines[current_line_index].parameter.list.limit.min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
удержание кнопки
|
||||||
|
*/
|
||||||
|
void isButtonHold(byte x)
|
||||||
|
{
|
||||||
|
need_reload_menu = true;
|
||||||
|
|
||||||
|
if(x == buttonPin_Start)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!menu_enable)
|
if(!menu_enable)
|
||||||
{
|
{
|
||||||
menu_index = MAIN_MENU;
|
menu_index = MAIN_MENU;
|
||||||
@ -875,20 +917,7 @@ void isButtonHold()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(start_edit_parameter)
|
if(!start_edit_parameter)
|
||||||
{
|
|
||||||
start_edit_parameter = false;
|
|
||||||
need_hide_cursor = false;
|
|
||||||
if(current_menu_screen.menu_lines[current_line_index].type == DIGIT_PARAM_LINE)
|
|
||||||
{
|
|
||||||
save_byte_parameter(current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index);
|
|
||||||
}
|
|
||||||
else if(current_menu_screen.menu_lines[current_line_index].type == LIST_PARAM_LINE)
|
|
||||||
{
|
|
||||||
save_byte_parameter(current_menu_screen.menu_lines[current_line_index].parameter.list.param_index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if(menu_index == MAIN_MENU)
|
if(menu_index == MAIN_MENU)
|
||||||
{
|
{
|
||||||
@ -912,11 +941,11 @@ void isButtonHold()
|
|||||||
/*
|
/*
|
||||||
одиночное нажатие кнопки
|
одиночное нажатие кнопки
|
||||||
*/
|
*/
|
||||||
void isButtonSingle()
|
void isButtonSingle(byte x)
|
||||||
{
|
{
|
||||||
need_reload_menu = true;
|
need_reload_menu = true;
|
||||||
|
|
||||||
if(start_edit_parameter)
|
if(start_edit_parameter && (x == buttonPin_Start || x == buttonPin_Service))
|
||||||
{
|
{
|
||||||
if(current_menu_screen.menu_lines[current_line_index].type == DIGIT_PARAM_LINE)
|
if(current_menu_screen.menu_lines[current_line_index].type == DIGIT_PARAM_LINE)
|
||||||
{
|
{
|
||||||
@ -933,7 +962,7 @@ void isButtonSingle()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(x == buttonPin_Service)
|
||||||
{
|
{
|
||||||
last_cursor_index = cursor_index;
|
last_cursor_index = cursor_index;
|
||||||
cursor_index++;
|
cursor_index++;
|
||||||
@ -956,10 +985,14 @@ void isButtonSingle()
|
|||||||
/*
|
/*
|
||||||
двойное нажатие кнопки
|
двойное нажатие кнопки
|
||||||
*/
|
*/
|
||||||
void isButtonDouble()
|
void isButtonDouble(byte x)
|
||||||
{
|
{
|
||||||
need_reload_menu = true;
|
need_reload_menu = true;
|
||||||
|
|
||||||
|
if(x == buttonPin_Start) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(current_menu_screen.menu_lines[current_line_index].type == MENU_LINE)
|
if(current_menu_screen.menu_lines[current_line_index].type == MENU_LINE)
|
||||||
{
|
{
|
||||||
last_menu_index[menu_inter] = menu_index;
|
last_menu_index[menu_inter] = menu_index;
|
||||||
@ -978,6 +1011,17 @@ void isButtonDouble()
|
|||||||
start_edit_parameter = true;
|
start_edit_parameter = true;
|
||||||
hide_cursor();
|
hide_cursor();
|
||||||
need_hide_cursor = true;
|
need_hide_cursor = true;
|
||||||
|
} else {
|
||||||
|
start_edit_parameter = false;
|
||||||
|
need_hide_cursor = false;
|
||||||
|
if(current_menu_screen.menu_lines[current_line_index].type == DIGIT_PARAM_LINE)
|
||||||
|
{
|
||||||
|
save_byte_parameter(current_menu_screen.menu_lines[current_line_index].parameter.digit.param_index);
|
||||||
|
}
|
||||||
|
else if(current_menu_screen.menu_lines[current_line_index].type == LIST_PARAM_LINE)
|
||||||
|
{
|
||||||
|
save_byte_parameter(current_menu_screen.menu_lines[current_line_index].parameter.list.param_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -995,7 +1039,7 @@ 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[9] = "%s %d %s";
|
char format[11] = "%s %d %s ";
|
||||||
if(start_edit_parameter && index_line == current_line_index)
|
if(start_edit_parameter && index_line == current_line_index)
|
||||||
{
|
{
|
||||||
format[2] = '>';
|
format[2] = '>';
|
||||||
@ -1008,7 +1052,7 @@ void show_line(byte index_line)
|
|||||||
else if(current_menu_screen.menu_lines[index_line].type == LIST_PARAM_LINE)
|
else if(current_menu_screen.menu_lines[index_line].type == LIST_PARAM_LINE)
|
||||||
{
|
{
|
||||||
char line[SIZE_SCREEN_LINE * 2];
|
char line[SIZE_SCREEN_LINE * 2];
|
||||||
char format[6] = "%s %s";
|
char format[8] = "%s %s ";
|
||||||
if(start_edit_parameter && index_line == current_line_index)
|
if(start_edit_parameter && index_line == current_line_index)
|
||||||
{
|
{
|
||||||
format[2] = '>';
|
format[2] = '>';
|
||||||
@ -1283,6 +1327,7 @@ void menu()
|
|||||||
while (menu_enable == true)
|
while (menu_enable == true)
|
||||||
{
|
{
|
||||||
read_buttons(buttonPin_Service);
|
read_buttons(buttonPin_Service);
|
||||||
|
read_buttons(buttonPin_Start);
|
||||||
|
|
||||||
if(need_clear_menu)
|
if(need_clear_menu)
|
||||||
{
|
{
|
||||||
@ -1436,6 +1481,7 @@ void setup()
|
|||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
read_buttons(buttonPin_Service);
|
read_buttons(buttonPin_Service);
|
||||||
|
read_buttons(buttonPin_Start);
|
||||||
hide_cursor();
|
hide_cursor();
|
||||||
need_hide_cursor = true;
|
need_hide_cursor = true;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user