Друзья приветствую, если кто-то сможет помочь будет супер.
Создано меню на операторе выбора Switch подскажите как сделать подменю одного из case. (точнее разместить несколько переменных на одном экране меню в разных строках (использую дисплей 2004) и переключаться между ними для изменения параметров( в моём случае это состояние выходов реле вкл/выкл), или возможно только размещение одного параметра на одном экране ? , работаю с библиотекой GyverEncoder. Хотелось бы чтобы было возможно поворотом вправо или влево изменять состояние, а допустим нажатием переключаться между переменными.
Создано меню на операторе выбора Switch подскажите как сделать подменю одного из case. (точнее разместить несколько переменных на одном экране меню в разных строках (использую дисплей 2004) и переключаться между ними для изменения параметров( в моём случае это состояние выходов реле вкл/выкл), или возможно только размещение одного параметра на одном экране ? , работаю с библиотекой GyverEncoder. Хотелось бы чтобы было возможно поворотом вправо или влево изменять состояние, а допустим нажатием переключаться между переменными.
Функция обработки энкодера:
void ReadEncoder() {
if (enc.isTurn()) {
//1.Если был поворот
// Serial.println("Пововорот");
if (enc.isRightH()) { // Если поворот с нажатием вправо, то переходим на следующий экран меню
// Serial.println("Поворот вправо, с нажатием");
counter = 0;
if (menu > 12) {
menu = 0;
}
menu++;
}
else if (enc.isLeftH()) { //Если поворот с нажатием влево, то переодим на предидущий экран меню
// Serial.println("Поворот влево, с нажатием");
menu--;
if (menu < 0) {
menu = 0;
DrawLCD();
}
}
//сохраним настройки
if (menu == 12) {
menu = 0;
EEPROM.put(0, TempHeat_On);
EEPROM.put(20, TempHeat_Off);
EEPROM.put(40, HumVent_On);
EEPROM.put(60, HumVent_Off);
EEPROM.put(80, Uvlag_On);
EEPROM.put(100, Uvlag_Off);
EEPROM.put(200, Vent_Active);
EEPROM.put(201, Poliv_Cond);
EEPROM.put(203, Vent_Cond);
EEPROM.put(205, Uvlag_Cond);
EEPROM.put(207, Heat_Cond);
//выведем сообщение об успешном сохранении настроек
for (int i = 0; i <= 15; i++) {
// Serial.println(i);
menu = 11;
DrawLCD();
}
menu = 0;
}
DrawLCD();
}
//2.Если поворот вправо, то увеличиваем значение на текущем экране.
if (enc.isRight()) {
// Serial.println("Поворот вправо, изменяем настройки ");
counter = 0;
switch (menu) {
case 0:
menu = 0;
DrawLCD();
break;
case 1:
menu = 1;
TempHeat_On += 0.1;
DrawLCD();
break;
case 2:
menu = 2;
TempHeat_Off += 0.1;
DrawLCD();
break;
case 3:
menu = 3;
HumVent_On++;
DrawLCD();
break;
case 4:
menu = 4;
HumVent_Off++;
DrawLCD();
break;
case 5:
menu = 5;
Vent_Active += 1;
DrawLCD();
break;
case 6:
menu = 6;
Uvlag_On += 0.1;
DrawLCD();
break;
case 7:
menu = 7;
Uvlag_Off += 0.1;
DrawLCD();
break;
case 8:
menu = 8;
Poliv_Cond += 1;
Vent_Cond += 1;
Uvlag_Cond += 1;
Heat_Cond += 1;
DrawLCD();
break;
case 9:
menu = 0;
DrawLCD();
break;
}
}
//3.Если поворот влево, то уменьшаем настройки на текущем экране меню.
else if (enc.isLeft()) {
// Serial.println("Поворот влево, изменяем настройки");
counter = 0;
switch (menu) {
case 0:
menu = 0;
DrawLCD();
break;
case 1:
menu = 1;
TempHeat_On -= 0.1;
DrawLCD();
break;
case 2:
menu = 2;
TempHeat_Off -= 0.1;
DrawLCD();
break;
case 3:
menu = 3;
HumVent_On--;
DrawLCD();
break;
case 4:
menu = 4;
HumVent_Off--;
DrawLCD();
break;
case 5:
menu = 5;
Vent_Active -= 1;
DrawLCD();
break;
case 6:
menu = 6;
Uvlag_On -= 0.1;
DrawLCD();
break;
case 7:
menu = 7;
Uvlag_Off -= 0.1;
DrawLCD();
break;
case 8:
menu = 8;
Poliv_Cond -= 1;
Vent_Cond -= 1;
Uvlag_Cond -= 1;
Heat_Cond -= 1;
break;
DrawLCD();
case 9:
menu = 0;
DrawLCD();
break;
}
}
//4.двойное нажатие кнопки - включаем подсветку дисплея
else if (enc.isDouble())
{
lcd.backlight();
}
//5.длинное нажатие кнопки - отключаем подсветку дисплея
else if (enc.isHolded())
{
lcd.noBacklight();
}
//когда ничего не нажато
//если на экране настройки/информации ничего долго (в течение 10 сек) не нажимается то возвращаемся в режим отображения температуры и влажности
else if (menu != 0 && counter > 5000) {
//если возврат производится с какого-либо экрана настройки, то сообщим о том, что настройки не были сохранены
if (menu < 12) {
for (int i = 0; i <= 15; i++) {
// Serial.println(i);
menu = 10;
DrawLCD();
}
}
menu = 0;
counter = 0;
DrawLCD();
}
counter++; //увеличиваем значение счетчика циклов программы
}
}
Функция отрисовки экрана:
void DrawLCD() {
//=========================================================================================
//МЕНЮ 0 (главный экран)
//=========================================================================================
// главный экран СТРОКА 1
//-----------------------------------------------------------------------------------------
if (menu == 0) {
lcd.setCursor(0, 0);
strOut = MakeString( rtc.getHours() + (tiktak) + (rtc.getMinutes()) + (" ") + (rtc.getDate()) + (".") + (rtc.getMonth()) + (" ") + (rtc.getDay()) ); // строка отображения времени
lcd.print(strOut);
//-----------------------------------------------------------------------------------------
// главный экран СТРОКА 2
//-----------------------------------------------------------------------------------------
lcd.setCursor(0, 1);
strOut = MakeString("T: " + out_t + "*C"); //строка отображения уровня температуры
lcd.print(strOut);
lcd.setCursor(11, 1);
strOut = MakeString("H: " + out_h + "%"); //строка отображения уровня влажности
lcd.print(strOut);
//-----------------------------------------------------------------------------------------
// главный экран СТРОКА 3
//-----------------------------------------------------------------------------------------
lcd.setCursor(0, 2);
strOut = String(DATA) + " " + Sensorval + " % ";
lcd.print(strOut);
//------------------------------------------------------------------------------------------
if (Poliv_Cond == 0) { // Если канал Обогревателя отключен Heat_State
lcd.setCursor(0, 3); //Отображаем на дисплее номер канала С1
lcd.print(chanel[0]);
lcd.setCursor(3, 3);
lcd.print (char(2));
}
else {
lcd.setCursor(3, 3);
lcd.print (char(1));
};
if (Vent_Cond == 0) {
lcd.setCursor(5, 3);
lcd.print(chanel[1]); //Отображаем на дисплее номер канала С2
lcd.setCursor(8, 3);
lcd.print (char(2));
}
else {
lcd.setCursor(3, 3);
lcd.print (char(1));
};
if (Uvlag_Cond == 0) {
lcd.setCursor(10, 3);
lcd.print(chanel[2]); //Отображаем на дисплее номер канала С3
lcd.setCursor(13, 3);
lcd.print (char(2));
}
else {
lcd.setCursor(3, 3);
lcd.print (char(1));
};
if (Heat_Cond == 0) {
lcd.setCursor(15, 3);
lcd.print(chanel[3]); //Отображаем на дисплее номер канала С4
lcd.setCursor(18, 3);
lcd.print (char(2));
}
else {
lcd.setCursor(3, 3);
lcd.print (char(1));
};
}
//--------------------------------------------------------------------------
//МЕНЮ 1
//--------------------------------------------------------------------------
if (menu == 1) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-1 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" Temp_On: " + String(TempHeat_On) + "*C");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 2
//--------------------------------------------------------------------------
if (menu == 2) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-2 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" Temp_Off: " + String(TempHeat_Off) + "*C");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 3
//--------------------------------------------------------------------------
if (menu == 3) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-3 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" HumVent_On: " + String(HumVent_On) + "%");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 4
//--------------------------------------------------------------------------
if (menu == 4) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-4 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString("HumVent_Off: " + String(HumVent_Off) + "%");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 5
//--------------------------------------------------------------------------
if (menu == 5) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-5 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" Vent_Active: " + String(Vent_Active));
lcd.print(strOut);
// в верхней строке отображаем состояние увлажнителя
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 6
//--------------------------------------------------------------------------
if (menu == 6) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-6 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(2, 2);
strOut = MakeString("Uvlag_On: " + String(Uvlag_On) + "*C");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 7
//--------------------------------------------------------------------------
if (menu == 7) {
lcd.setCursor(0, 0);
strOut = MakeString(" MENU-7 ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(2, 2);
strOut = MakeString("Uvlag_Off: " + String(Uvlag_Off) + "%");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString("");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 8
//--------------------------------------------------------------------------
if (menu == 8) {
lcd.setCursor(0, 0);
strOut = MakeString("Poliv_Cond: " + String(Poliv_Cond));
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString("Vent_Cond: " + String(Vent_Cond));
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString("Uvlag_Cond: " + String(Uvlag_Cond));
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString("Heat_Cond: " + String(Heat_Cond));
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 10
//--------------------------------------------------------------------------
if (menu == 10) {
lcd.setCursor(0, 0);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" Settings ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" are NOT saved ");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
//--------------------------------------------------------------------------
//МЕНЮ 11
//--------------------------------------------------------------------------
if (menu == 11) {
lcd.setCursor(0, 0);
strOut = MakeString(" ");
lcd.print(strOut);
lcd.setCursor(0, 1);
strOut = MakeString(" Settings ");
lcd.print(strOut);
lcd.setCursor(0, 2);
strOut = MakeString(" are saved ");
lcd.print(strOut);
lcd.setCursor(0, 3);
strOut = MakeString(" ");
lcd.print(strOut);
}
}