Использую про мини. Спойлер: код Код (C++): #include <LiquidCrystal.h> //Библиотека LCD // инициализация LCD LiquidCrystal lcd(3,4,5,6,7,8); int m=0; //переменная для экранов меню от 0 до 5 byte m1 = 0; //переменная для подэменю 1 byte m12 = 0; // подменю1.2 byte m13 = 0; byte m132 = 0; boolean bm1 = false; // если не находимся в подменю1 - false boolean bm12 = false; // если не находимся в подменю1.2 - false boolean bm13 = false; boolean bm132 = false; byte nextPin =A0; //вперед byte prevPin = A1; //кнопка возврата byte upPin = A2; //увеличение значения отображаемого параметра byte downPin = A3;//уменьшение значения void setup() { Serial.begin(9600); //Установка пинов как входов pinMode(nextPin, INPUT); pinMode(prevPin, INPUT); pinMode(upPin, INPUT); pinMode(downPin, INPUT); //Установка количества столбцов и строк дисплея lcd.begin(16, 2); lcd.clear(); } void loop() { //Обработка нажатия кнопки меню if (digitalRead(upPin)== HIGH && !bm1 ) //если находимся в основном меню и не заходили в подменю и нажата кнопка вверх, прокрутка меню { m++; if(m>1) m=0; delay (300); lcd.clear(); } else if (digitalRead(downPin)== HIGH && !bm1 ) {//если находимся в основном меню и не заходили в подменю и нажата кнопка вниз, прокрутка меню m--; if(m<0) m=1; delay (300); lcd.clear(); } else if (digitalRead(prevPin)== HIGH && !bm1 ) { //если находимся в основном меню и не заходили в подменю и нажата кнопка назад, устанавливаем меню в 0 положение m = 0; delay (300); lcd.clear(); } // Работа с меню //вход в подменю1 if (digitalRead(nextPin)== HIGH && m==1 && !bm1 ){//если находимся в основном меню1 и отключено подменю1 и нажата кнопка вперед m1++; //входим в подменю1 bm1 = true; //подменю1 включены delay (300); lcd.clear(); } //вход в подменю1.2 else if (digitalRead(nextPin)== HIGH && m==1 && bm1 && m1==2 && !bm12){//если нажата кнопка вперед в подменю1 на 2 пункте но еще не вощли в подменю1.2 m12++; // заходим в подменю 1.2 bm12 = true; delay (300); lcd.clear(); } //вход в подменю1.3 else if (digitalRead(nextPin)== HIGH && m==1 && bm1 && m1==3 && !bm13){//если нажата кнопка вперед и находимся в основном меню1 на 3 пункте подменю1 и не вощли в подменю1.3, входим в подменю1.3 m13++; // заходим в подменю 1.3 bm13 = true; delay (300); lcd.clear(); } //вход в подменю1.3.2 else if (digitalRead(nextPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && m13==2 && !bm132){//если нажата кнопка вперед в подменю1 на 3 пункте и в подменю1.3 на 2 пункте, но еще не вощли в подменю1.3.2 m132++; // заходим в подменю 1.3.2 bm132 = true; delay (300); lcd.clear(); } //прокрутка подменю1 if (digitalRead(upPin)== HIGH && m==1 && bm1 && !bm12 && !bm13){// если нажата кнопка вверх и находимся подменю1 но не в подменю 1.2 или 1.3 m1++; // переключаем подменю1 if (m1 > 3) m1 = 1;//зацикливаем прокрутку подменю1 delay (300); lcd.clear(); } else if (digitalRead(downPin)== HIGH && m==1 && bm1 && !bm12 && !bm13){// если нажата кнопка вниз и находимся подменю1 но не в подменю 1.2 или 1.3 m1--;// переключаем подменю1 if (m1 < 1) m1 = 3;//зацикливаем прокрутку подменю1 delay (300); lcd.clear(); } //прокрутка подменю1.2 if (digitalRead(upPin)== HIGH && m==1 && bm1 && m1==2 && bm12 && !bm13){// если нажата кнопка вверх и находимся в основном меню1 и на второй строчке подменю1 и в подменю1.2 и это не подменю1.3 m12++; // переключаем подменю1.2 if (m12 > 2) m12 = 1;//зацикливаем прокрутку подменю1 delay (300); lcd.clear(); } else if (digitalRead(downPin)== HIGH && m==1 && bm1 && m1==2 && bm12 && !bm13){// если нажата кнопка вниз и находимся в основном меню1 и на второй строчке подменю1 и в подменю1.2и это не подменю1.3 m12--;// переключаем подменю1 if (m12 < 1) m12 = 2;//зацикливаем прокрутку подменю1 delay (300); lcd.clear(); } //прокрутка подменю1.3 if (digitalRead(upPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && !bm12){// если нажата кнопка вверх и находимся в основном меню1 и на 3 строчке подменю1 и в подменю1.3 m13++; // переключаем подменю1.3 if (m13 > 3) m13 = 1;//зацикливаем прокрутку подменю1.3 delay (300); lcd.clear(); } else if (digitalRead(downPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && !bm12){// если нажата кнопка вниз и находимся в основном меню1 и на 3 строчке подменю1 и в подменю1.3 m13--;// переключаем подменю3 if (m13 < 1) m13 = 3;//зацикливаем прокрутку подменю1.3 delay (300); lcd.clear(); } //прокрутка подменю1.3.2 if (digitalRead(upPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && m13==2 && bm132){// если нажата кнопка вверх и находимся в основном меню1 и в подменю1 на 3 строчке и в подменю1.3 на 2 строчке и это подменю1.3.2 m132++; // переключаем подменю1.3.2 if (m132 > 2) m132 = 1;//зацикливаем прокрутку подменю1.3.2 delay (300); lcd.clear(); } else if (digitalRead(downPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && m13==2 && bm132){// если нажата кнопка вверх и находимся в основном меню1 и в подменю1 на 3 строчке и в подменю1.3 на 2 строчке и это подменю1.3.2 m132--;// переключаем подменю1.3.2 if (m132 < 1) m132 = 2;//зацикливаем прокрутку подменю1.3.2 delay (300); lcd.clear(); } //выход из подменю1.2 if (digitalRead(prevPin)== HIGH && m==1 && m1==2 && bm1 && bm12){// если нажата кнопка назад и находимся в основном меню1 на второй строчке подменю1 и в подменю1.2 , входим из подменю1.2 m12 = 0; bm12 = false; delay (300); lcd.clear(); } //выход из подменю1.3 else if (digitalRead(prevPin)== HIGH && m==1 && m1==3 && bm1 && bm13){// если нажата кнопка назад и находимся в основном меню1 на 3 строчке подменю1 и в подменю1.3, входим из подменю1.3 m13 = 0; bm13 = false; delay (300); lcd.clear(); } //выход из подменю 1 else if (digitalRead(prevPin)== HIGH && m==1 && bm1 && !bm12 && !bm13){// если нажата кнопка назад и находимся в основном меню1 и подменю1, и вышли из подменю1.2 и подменю1.3, выходим в основное меню1 m1 = 0; bm1 = false; delay (300); lcd.clear(); } //выход из подменю 1.3.2 if (digitalRead(prevPin)== HIGH && m==1 && bm1 && m1==3 && bm13 && m13==2 && bm132){// если нажата кнопка назад и находимся в основном меню1 и подменю1 на 3 строчке и в подменю1.3 на 2 строчке и в подменю1.3.2 , входим из подменю1.3.2 m132 = 0; bm132 = false; delay (300); lcd.clear(); } Serial.println(m132); //вывод на экран //меню0 if (m==0) //если находимся в основном меню 0 { lcd.setCursor(0, 0); lcd.print("Main Menu"); lcd.setCursor(0, 1); lcd.print("menu 0"); } //меню1 else if (m==1 && !bm1) //если находимся в основном меню1 и не зашли в подменю1 { lcd.setCursor(0, 0); lcd.print("Main Menu"); lcd.setCursor(0, 1); lcd.print("Servo 1"); } //подменю1 else if ( m==1 && bm1 && m1==1 && !bm12 && !bm13 ) //если находимся в меню1 в подменю1 на 1 строчке но не в подменю1.2 и 1.3 { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Manual mode"); } else if (m==1 && bm1 && m1==2 && !bm12 && !bm13) //если находимся в меню1 в подменю1 на 2 строчке но не в подменю1.2 { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Auto mode"); } else if (m==1 && bm1 && m1==3 && !bm13 && !bm12 ) { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Settings"); } //подменю1.2 else if ( bm1 && m1==2 && bm12 && m12==1)//если находимся в меню1 { lcd.setCursor(0, 0); lcd.print("Auto mode"); lcd.setCursor(0, 1); lcd.print("for whole week"); } else if (bm1 && m1==2 && bm12 && m12==2) { lcd.setCursor(0, 0); lcd.print("Auto mode"); lcd.setCursor(0, 1); lcd.print("Schedule by day"); } //подменю1.3 else if (m1==3 && bm13 && m13==1) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in manual"); } else if (m1==3 && bm13 &&m13==2) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in week"); } else if (m1==3 && bm13 &&m13==3) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in days"); } //подменю1.3.2 else if (bm132 && m132==1) { lcd.setCursor(0, 0); lcd.print("Vol in week"); lcd.setCursor(0, 1); lcd.print("Set day of week"); } else if ( bm132 && m132==2) { lcd.setCursor(0, 0); lcd.print("Vol in week"); lcd.setCursor(0, 1); lcd.print("Set time and vol"); } } Проблема в просчете m132, до этого мета всё отображается и считает нормально. Приходится долго жать на клавишу, чтоб прибавляло 1, и так же не сбрасывает в 0. И на экране не отображает это действие. Или оно не может работать с такой архитектурой?
1. неплохо было бы сначала разобраться как правильно работать с кнопками (дребезг) и уйти от делееев 2. зачем столько переменных для определения меню - достаточно одной и присваивать ей разные значения в зависимости от того в каком месте меню находитесь.
Спойлер: код Код (C++): #include <LiquidCrystal.h> //Библиотека LCD #include <Servo.h> #include "OneButton.h" // инициализация LCD LiquidCrystal lcd(3,4,5,6,7,8); int m=0; //переменная для экранов меню OneButton nextPin(A0, true); // Подключаем кнопку сервы 1 на контакт А0 OneButton prevPin(A1, true); // Подключаем кнопку сервы 2 на контакт А1 OneButton upPin(A2, true); // Подключаем кнопку сервы 3 на контакт А2 OneButton downPin(A3, true); // Подключаем кнопку сервы 4 на контакт А3 void setup() { Serial.begin(9600); //Установка пинов как входов nextPin.attachClick(click1); nextPin.attachDoubleClick(doubleclick1); nextPin.attachLongPressStart(longPressStart1); nextPin.attachLongPressStop(longPressStop1); nextPin.attachDuringLongPress(longPress1); // Функции кнопки 2 prevPin.attachClick(click2); prevPin.attachDoubleClick(doubleclick2); prevPin.attachLongPressStart(longPressStart2); prevPin.attachLongPressStop(longPressStop2); prevPin.attachDuringLongPress(longPress2); // Функции кнопки 3 upPin.attachClick(click3); upPin.attachDoubleClick(doubleclick3); upPin.attachLongPressStart(longPressStart3); upPin.attachLongPressStop(longPressStop3); upPin.attachDuringLongPress(longPress3); // Функции кнопки 4 downPin.attachClick(click4); downPin.attachDoubleClick(doubleclick4); downPin.attachLongPressStart(longPressStart4); downPin.attachLongPressStop(longPressStop4); downPin.attachDuringLongPress(longPress4); //Установка количества столбцов и строк дисплея lcd.begin(16, 2); lcd.clear(); } void loop() { nextPin.tick(); prevPin.tick(); upPin.tick(); downPin.tick(); if (m==0) { lcd.setCursor(0, 0); lcd.print("Main Menu"); lcd.setCursor(0, 1); lcd.print("menu 0"); } //меню1 else if (m==1) { lcd.setCursor(0, 0); lcd.print("Main Menu"); lcd.setCursor(0, 1); lcd.print("Servo 1"); } //подменю1 else if ( m==10 ) { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Manual mode"); } else if (m==11) { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Auto mode"); } else if (m==12) { lcd.setCursor(0, 0); lcd.print("Servo 1"); lcd.setCursor(0, 1); lcd.print("Settings"); } //подменю1.2 else if ( m==30 ) { lcd.setCursor(0, 0); lcd.print("Auto mode"); lcd.setCursor(0, 1); lcd.print("for whole week"); } else if (m==31) { lcd.setCursor(0, 0); lcd.print("Auto mode"); lcd.setCursor(0, 1); lcd.print("Schedule by day"); } //подменю1.3 else if (m==40) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in manual"); } else if (m==41) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in week"); } else if (m==42) { lcd.setCursor(0, 0); lcd.print("Settings"); lcd.setCursor(0, 1); lcd.print("Vol in days"); } //подменю1.3.2 else if (m==50) { lcd.setCursor(0, 0); lcd.print("Vol in week"); lcd.setCursor(0, 1); lcd.print("Set day of week"); } else if ( m==51) { lcd.setCursor(0, 0); lcd.print("Vol in week"); lcd.setCursor(0, 1); lcd.print("Set time and vol"); } Serial.println(m); } // loop // ----- Функции кнопки 1 // Функция при 1 коротком нажатии void click1() { //вход в подменю1 if ( m==1 ){//если находимся в основном меню1 и нажата кнопка вперед m=m+9; //входим в подменю1 lcd.clear(); } //вход в подменю1.2 else if ( m==11 ){//если нажата кнопка вперед в подменю1 на 2 пункте m=m+19; // заходим в подменю 1.2 lcd.clear(); } //вход в подменю1.3 else if (m==12){//если нажата кнопка вперед на 3 пункте подменю1 m=m+28; // заходим в подменю 1.3 lcd.clear(); } //вход в подменю1.3.2 else if (m==41){//если нажата кнопка вперед в подменю1.3 на 2 пункте m=m+9; // заходим в подменю 1.3.2 lcd.clear(); } } // click1 // Функция при 2 коротких нажатиях void doubleclick1() { } // doubleclick1 // Функция в начала долгого нажатия void longPressStart1() { } // longPressStart1 // Функция, при долгом удержании кнопки void longPress1() { } // longPress1 // Функция при отпускании после долгоо удержания void longPressStop1() { } // longPressStop1 // ... то же для 2 кноки void click2() { if ( m>=0 && m<=9 ) { //если находимся в основном менюи нажата кнопка назад, устанавливаем меню в 0 положение m = 0; lcd.clear(); } //выход из подменю1.2 else if ( m>=30 && m<=39 ){// если нажата кнопка назад и находимся в подменю1.2 , выходим из подменю1.2 m = 11; lcd.clear(); } //выход из подменю1.3 else if ( m>=40 && m<=49 ){// если нажата кнопка назад и находимся в подменю1.3, входим из подменю1.3 m = 12; lcd.clear(); } //выход из подменю 1 else if ( m>=10 && m<=19 ){// если нажата кнопка назад и находимся в подменю1, выходим в основное меню1 m = 1; lcd.clear(); } //выход из подменю 1.3.2 if ( m>=50 && m<=59 ){// если нажата кнопка назад и находимся в подменю1.3.2 , входим из подменю1.3.2 m = 41; lcd.clear(); } } // click2 void doubleclick2() { } // doubleclick2 void longPressStart2() { } // longPressStart2 void longPress2() { } // longPress2 void longPressStop2() { } // longPressStop2 // ... то же для 3 кнопки void click3() { //прокрутка основного меню if ( m>=0 && m<=9 ){ //если находимся в основном меню и нажата кнопка вверх, прокрутка меню m++; if(m>1) m=0; lcd.clear(); } //прокрутка подменю1 if ( m>=10 && m<=19 ){// если нажата кнопка вверх и находимся подменю1 m++; // переключаем подменю1 if (m > 12) m = 10;//зацикливаем прокрутку подменю1 lcd.clear(); } //прокрутка подменю1.2 else if ( m>=30 && m<=39 ){// если нажата кнопка вверх и находимся в подменю1.2 m++; // переключаем подменю1.2 if (m > 31) m = 30;//зацикливаем прокрутку подменю1.2 lcd.clear(); } //прокрутка подменю1.3 else if ( m>=40 && m<=49 ){// если нажата кнопка вверх и находимся в подменю1.3 m++; // переключаем подменю1.3 if (m > 42) m = 40;//зацикливаем прокрутку подменю1.3 lcd.clear(); } //прокрутка подменю1.3.2 else if (m>=50 && m<=59){// если нажата кнопка вверх и находимся в подменю1.3.2 m++; // переключаем подменю1.3.2 if (m > 51) m = 50;//зацикливаем прокрутку подменю1.3.2 lcd.clear(); } } // click3 void doubleclick3() { } // doubleclick3 void longPressStart3() { } // longPressStart3 void longPress3() { } // longPress3 void longPressStop3() { } // longPressStop3 // ... то же для 4 кнопки void click4() { if ( m>=0 && m<=9) {//если находимся в основном меню и нажата кнопка вниз, прокрутка меню m--; if(m<0) m=1; lcd.clear(); } //прокрутка подменю1 else if (m>=10 && m<=19 ){// если нажата кнопка вниз и находимся подменю1 m--;// переключаем подменю1 if (m < 10) m = 12;//зацикливаем прокрутку подменю1 lcd.clear(); } //прокрутка подменю1.2 else if (m>=30 && m<=39){// если нажата кнопка вниз и находимся в подменю1.2 m--;// переключаем подменю1.2 if (m < 30) m = 31;//зацикливаем прокрутку подменю1 lcd.clear(); } //прокрутка подменю1.3 else if ( m>=40 && m<=49 ){// если нажата кнопка вниз и находимся в подменю1.3 m--;// переключаем подменю3 if (m < 40) m = 42;//зацикливаем прокрутку подменю1.3 lcd.clear(); } //прокрутка подменю1.3.2 else if ( m>=50 && m<=59 ){// если нажата кнопка вверх и находимся в подменю1.3.2 m--;// переключаем подменю1.3.2 if (m < 50) m = 51;//зацикливаем прокрутку подменю1.3.2 lcd.clear(); } } // click4 void doubleclick4() { } // doubleclick4 void longPressStart4() { } // longPressStart4 void longPress4() { } // longPress4 void longPressStop4() { } // longPressStop4 Получилось так. Что будет с этой библиотекой после переполнения millis?
Спойлер: Кусок кода Код (C++): #include <LiquidCrystal.h> //Библиотека LCD #include <LiquidCrystal.h> //Библиотека LCD #include "OneButton.h" LiquidCrystal lcd(3,4,5,6,7,8); OneButton nextPin(A0, true); // Подключаем кнопку сервы 1 на контакт А0 OneButton prevPin(A1, true); // Подключаем кнопку сервы 2 на контакт А1 OneButton upPin(A2, true); // Подключаем кнопку сервы 3 на контакт А2 OneButton downPin(A3, true); // Подключаем кнопку сервы 4 на контакт А3 long servo1_hmsv[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, // для хранения часов, минут, секунд, и объема. по очереди в такой последовательности 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39}; int m=10060; //переменная для экранов меню int trash = 0; // для запоминания всякого текущего хлама byte trash10 = 0; byte trash100 = 0; void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.clear(); // link the button 1 functions. nextPin.attachClick(click1); nextPin.attachDoubleClick(doubleclick1); nextPin.attachLongPressStart(longPressStart1); nextPin.attachLongPressStop(longPressStop1); nextPin.attachDuringLongPress(longPress1); prevPin.attachClick(click2); prevPin.attachDoubleClick(doubleclick2); prevPin.attachLongPressStart(longPressStart2); prevPin.attachLongPressStop(longPressStop2); prevPin.attachDuringLongPress(longPress2); upPin.attachClick(click3); upPin.attachDoubleClick(doubleclick3); upPin.attachLongPressStart(longPressStart3); upPin.attachLongPressStop(longPressStop3); upPin.attachDuringLongPress(longPress3); // Функции кнопки 4 downPin.attachClick(click4); downPin.attachDoubleClick(doubleclick4); downPin.attachLongPressStart(longPressStart4); downPin.attachLongPressStop(longPressStop4); downPin.attachDuringLongPress(longPress4); } // setup void loop() { // keep watching the push buttons: nextPin.tick(); prevPin.tick(); upPin.tick(); downPin.tick(); // выводна экран if ( m==10060) { lcd.setCursor(0, 0); lcd.print("Set time and vol"); lcd.setCursor(0, 1); lcd.print(trash+1); lcd.print(")"); lcd.print(" "); lcd.print(servo1_hmsv[trash*4]); lcd.print("."); lcd.print(servo1_hmsv[(trash*4)+1]); lcd.print("."); lcd.print(servo1_hmsv[(trash*4)+2]); lcd.print("-"); lcd.print(servo1_hmsv[(trash*4)+3]); } else if ( m==10061) { lcd.setCursor(0, 0); lcd.print("Set time and vol"); lcd.setCursor(0, 1); lcd.print(" "); lcd.print(servo1_hmsv[trash*4]); lcd.print("."); lcd.print(servo1_hmsv[(trash*4)+1]); lcd.print("."); lcd.print(servo1_hmsv[(trash*4)+2]); lcd.print("-"); lcd.print(servo1_hmsv[(trash*4)+3]); } Serial.println(" begin"); Serial.println(trash10 ); Serial.println(trash100 ); Serial.flush(); } // loop //функции кнопки ВПЕРЕД void click1() { Serial.println("Button 1 click."); if (m==10060){ m=m+1; // экран 10061 отвечает за редактироание времени и обьема канала1 в недельном расписании trash10 = 0; trash100 = (4*trash)+trash10; lcd.clear(); } //вход в подменю редактирования текущего пункта времени и объема для недельного таймера else if (m==10061 ){ trash10++ ; if(trash10 > 3) trash10 = 0; trash100 = (4*trash)+trash10; lcd.clear(); } } // функии кнопки НАЗАД void click2() { if ( m==10061 ){// если нажата кнопка назад и находимся в редактировании времени и объема недельного таймера, выходим в предыдущее меню m = 10060; trash10=0; trash100=0; lcd.clear(); } } //функции кнопки ВВЕРХ void click3() { Serial.println("Button 1 click."); //прокрутка списка времени и объема для недельного таймера if (m==10060){// если нажата кнопка вверх и находимся в вкрвне 10060 trash++; if(trash>9) trash=0; lcd.clear(); } //редактирование текущего списка времени и объема для недельного таймера else if (m==10061){// если нажата кнопка вверх и находимся в вкрвне 10061 servo1_hmsv[trash100]++; lcd.clear(); } } //функции кнопки ВНИЗ void click4() { //прокрутка списка времени и объема для недельного таймера if (m==10060){// если нажата кнопка вверх и находимся в вкрвне 10050 trash--; if(trash<0) trash=9; lcd.clear(); } //редактирование текущего списка времени и объема для недельного таймера else if (m==10061){// если нажата кнопка вверх и находимся в вкрвне 10061 servo1_hmsv[trash100]--; lcd.clear(); } } void doubleclick2() {} void longPressStart2() {} void longPress2() {} void longPressStop2() {} void doubleclick3() {} void longPressStart3() {} void longPress3() {} void longPressStop3() {} void doubleclick1() {} void longPressStart1() {} void longPress1() {} void longPressStop1() {} void doubleclick4() {} void longPressStart4() {} void longPress4() {} void longPressStop4() {} // End Оставил только кусок кода для удобства. Из массива выводит на экран по 4 элемента последовательно при нажатии кнопки "вверх" или "вниз": с 0 по 3, с 4 по 7 ... с 36 по 39. Каждой четверке присваивается номер , который хранится в trash для правильного отображения на экране. При нажатии кнопки "вперед" входит в редактирование той четверки элементов, которые были активны. Отсчет позиции элемента в четверке для редактирования производится и хранится в trash10. Чтобы знать,какой сейчас редактируется элемент массива и записать в него полученное, рассчитывается trash100. Можно ли сделать аналогичный процесс не вводя новые переменные?