Меню для вода параметров в программу при помощи LCD шилда 1602

OlegKireen
Offline
Зарегистрирован: 29.11.2016

Помогите разобраться с разработкой меню для вода параметров. int a = 5; // время загрузки в секундах int b = 2; // время задержки в секундах int c = 10; // время предварительный вакуум в секундах int d = 20; // время пропарки в секундах int e = 5; // время вакуумное охлаждение в секундах int f = 5; // время остывание в секундах шилд LCD с кнопками byte key(){ //// для кнопок ЛСДшилда int val = analogRead(0); if (val < 50) return 5; // 0 else if (val < 110) return 3; // 98 else if (val < 300) return 4; // 257 else if (val < 450) return 2; // 409 else if (val < 650) return 1; // 639 else return 0; Программа работает но приходится изменять параметры в ручную и перезаливать в ардуину. программа выглядит так: // include the library code: #include
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); byte key(){ //// для кнопок ЛСДшилда int val = analogRead(0); if (val < 50) return 5; else if (val < 110) return 3; else if (val < 300) return 4; else if (val < 450) return 2; else if (val < 650) return 1; else return 0; } int a = 5; // время загрузки в секундах int b = 2; // время задержки в секундах int c = 10; // время предварительный вакуум в секундах int d = 20; // время пропарки в секундах int e = 5; // время вакуумное охлаждение в секундах int f = 5; // время остывание в секундах void setup() { // put your setup code here, to run once: // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); } void loop() { // put your main code here, to run repeatedly: lcd.clear(); lcd.print("* START *"); delay(3000); lcd.clear(); lcd.print("* ZAGRUZKA *"); digitalWrite(13, HIGH); // включен канал №13 delay(a*1000); digitalWrite(13, LOW); // выключен канал №13 delay(5000); lcd.clear(); lcd.print("* PRED VAKUUM *"); digitalWrite(12, HIGH); // включен канал №12 delay(b*1000); lcd.clear(); lcd.print("* VAKUUM + PAR *"); digitalWrite(11, HIGH); // включен канал №11 delay((c-b)*1000); digitalWrite(12, LOW); // выключен канал №12 lcd.clear(); lcd.print("* PAR *"); delay((d-b-c)*1000); digitalWrite(11, LOW); // выключен канал №11 //нужно условие выключения не по времени а от данным манометра lcd.clear(); lcd.print("*VAK.OXLAGDENIE*"); digitalWrite(3, HIGH); // включен канал №3 delay(e*1000); digitalWrite(3, LOW); // выключен канал №3 lcd.clear(); lcd.print("* STABILIZACIY *"); digitalWrite(2, HIGH); // включен канал №2 delay(f*1000); digitalWrite(2, LOW); // выключен канал №2 lcd.clear(); lcd.print("* BLOK GOTOV *"); // команда стоп перезапуск программы кнопка analogWrite(10,100); delay(1000); analogWrite(10,10); delay(1000); analogWrite(10,100); delay(1000); analogWrite(10,10); delay(1000); analogWrite(10,100); delay(1000); analogWrite(10,10); delay(1000); analogWrite(10,100); delay(1000); analogWrite(10,10); delay(1000); analogWrite(10,100); delay(10000); } Буду благодарен за любой совет. Просто не могу понять в какую сторону двигаться.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Афигеть!

Я даже не могу угадать, как такое сообщение получилось? Поделитесь секретом. Оно ж реально ВСЁ в одну строку!!!

Хочу так же научиться!

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

хаххха ржу не могу

OlegKireen
Offline
Зарегистрирован: 29.11.2016

Сам в шоке. Сейчас исправлю. 

OlegKireen
Offline
Зарегистрирован: 29.11.2016
Помогите разобраться с разработкой меню для вода параметров.
 
int a = 5; // время загрузки в секундах 
int b = 2; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах 
int d = 20; // время пропарки в секундах 
int e = 5; // время вакуумное охлаждение в секундах 
int f = 5; // время остывание в секундах 
 
шилд LCD с кнопками 
 
byte key(){ //// для кнопок ЛСДшилда i
nt val = analogRead(0); if (val < 50) return 5; // 0 
else if (val < 110) return 3; // 98 
else if (val < 300) return 4; // 257 
else if (val < 450) return 2; // 409 
else if (val < 650) return 1; // 639 
else return 0; 
 
Программа работает но приходится изменять параметры в ручную и перезаливать в ардуину. 
программа выглядит так: 
 
// include the library code:
#include <LiquidCrystal.h>
 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 
byte key(){ //// для кнопок ЛСДшилда
  int val = analogRead(0);
    if (val < 50) return 5;
    else if (val < 110) return 3;
    else if (val < 300) return 4;
    else if (val < 450) return 2;
    else if (val < 650) return 1;
    else return 0;  
}
 
 
    
int a = 5; // время загрузки в секундах
int b = 2; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах
int d = 20; // время пропарки в секундах
int e = 5; // время вакуумное охлаждение в секундах
int f = 5; // время остывание в секундах
 
void setup() {
  // put your setup code here, to run once:
// set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
 
 
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  lcd.clear();
  lcd.print("*     START    *");
  delay(3000);
 
  lcd.clear();
  lcd.print("*   ZAGRUZKA   *");
  digitalWrite(13, HIGH); // включен канал №13
  delay(a*1000);
  digitalWrite(13, LOW); // вывключен канал №13
  delay(5000);
  lcd.clear();
  lcd.print("* PRED  VAKUUM *");
  digitalWrite(12, HIGH); // включен канал №12
  delay(b*1000);
   lcd.clear();
  lcd.print("* VAKUUM + PAR *");
  digitalWrite(11, HIGH); // включен канал №11
  delay((c-b)*1000);
  digitalWrite(12, LOW); // вывключен канал №12
  lcd.clear();
  lcd.print("*      PAR     *");
  delay((d-b-c)*1000);
  digitalWrite(11, LOW); // вывключен канал №11
  //нужно условие выключения не по времени а от данных монометра
  
  lcd.clear();
  lcd.print("*VAK.OXLAGDENIE*");
  digitalWrite(3, HIGH); // включен канал №3
  delay(e*1000);
  digitalWrite(3, LOW); // вывключен канал №3
  lcd.clear();
  lcd.print("* STABILIZACIY *");
  digitalWrite(2, HIGH); // включен канал №2
  delay(f*1000);
  digitalWrite(2, LOW); // вывключен канал №2
  lcd.clear();
  lcd.print("*  BLOK GOTOV  *");
  // команда стоп перезапуск программы кнопка
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
 delay(10000);
 
}
 
Буду благодарен за любой совет. Просто не могу понять в какую сторону двигаться.
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Афигеть!

Я даже не могу угадать, как такое сообщение получилось? Поделитесь секретом. Оно ж реально ВСЁ в одну строку!!!

Хочу так же научиться!

"кто не может сикать тот будет паскалить" ...правда я уже повторяюсь...вот и эталон языка си, всё строго в одной строке )))

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Код не проверял так как вставлен не правильно но с таким количеством "delay" он будет просто ВИСЕТЬ.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

delay(4294967295);

OlegKireen
Offline
Зарегистрирован: 29.11.2016

 
// include the library code:
#include <LiquidCrystal.h>
 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 
byte key(){ //// для кнопок ЛСДшилда
  int val = analogRead(0);
    if (val < 50) return 5;
    else if (val < 110) return 3;
    else if (val < 300) return 4;
    else if (val < 450) return 2;
    else if (val < 650) return 1;
    else return 0;  
}
 
 
    
int a = 5; // время загрузки в секундах
int b = 2; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах
int d = 20; // время пропарки в секундах
int e = 5; // время вакуумное охлаждение в секундах
int f = 5; // время остывание в секундах
 
void setup() {
  // put your setup code here, to run once:
// set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
 
 
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  lcd.clear();
  lcd.print("*     START    *");
  delay(3000);
 
  lcd.clear();
  lcd.print("*   ZAGRUZKA   *");
  digitalWrite(13, HIGH); // включен канал №13
  delay(a*1000);
  digitalWrite(13, LOW); // выключен канал №13
  delay(5000);
  lcd.clear();
  lcd.print("* PRED  VAKUUM *");
  digitalWrite(12, HIGH); // включен канал №12
  delay(b*1000);
   lcd.clear();
  lcd.print("* VAKUUM + PAR *");
  digitalWrite(11, HIGH); // включен канал №11
  delay((c-b)*1000);
  digitalWrite(12, LOW); // выключен канал №12
  lcd.clear();
  lcd.print("*      PAR     *");
  delay((d-b-c)*1000);
  digitalWrite(11, LOW); // выключен канал №11
  //нужно условие выключения не по времени а от данных манометра
  
  lcd.clear();
  lcd.print("*VAK.OXLAGDENIE*");
  digitalWrite(3, HIGH); // включен канал №3
  delay(e*1000);
  digitalWrite(3, LOW); // выключен канал №3
  lcd.clear();
  lcd.print("* STABILIZACIY *");
  digitalWrite(2, HIGH); // включен канал №2
  delay(f*1000);
  digitalWrite(2, LOW); // выключен канал №2
  lcd.clear();
  lcd.print("*  BLOK GOTOV  *");
  // команда стоп перезапуск программы кнопка
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(1000);
  analogWrite(10,100);
  delay(1000);
  analogWrite(10,10);
  delay(10000);
  

 
}
 

 

vvadim
Offline
Зарегистрирован: 23.05.2012

чётко сформулируйте свою задачу и идите в раздел ищу исполнителя

здесь вас просто закидают....

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Да ладно - "закидают". Человек нормально интересуется. Даже написал сам что-то. И код правильно вставил. Пусть и с третьего раза ;).

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Посмотрите такое решение. Код я не проверял но должен работать

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte key(){ //// для кнопок ЛСДшилда
	int val = analogRead(0);
	if (val < 50) return 5;
	else if (val < 110) return 3;
	else if (val < 300) return 4;
	else if (val < 450) return 2;
	else if (val < 650) return 1;
	else return 0;
}

int a = 5; // время загрузки в секундах
int b = 2; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах
int d = 20; // время пропарки в секундах
int e = 5; // время вакуумное охлаждение в секундах
int f = 5; // время остывание в секундах

bool fl_pause[1];//массив данных. Количество элементов - количеству таймеров
int var = 1;
int mig = 0;

void setup() {
	// put your setup code here, to run once:
	// set up the LCD's number of columns and rows:
	lcd.begin(16, 2);
	// Print a message to the LCD.
	
	
	pinMode(13, OUTPUT);
	pinMode(12, OUTPUT);
	pinMode(11, OUTPUT);
	pinMode(3, OUTPUT);
	pinMode(2, OUTPUT);
	
}

//Функция дребезга или паузы (time-время задержки, nomer-номер таймера)
boolean my_pausa(unsigned long time, byte nomer)
{
	bool x = 0;
	if (fl_pause[nomer] == 0)currentPause[nomer] = millis(), fl_pause[nomer] = 1;
	if (millis() - currentPause[nomer] >= time) x = 1, fl_pause[nomer] = 0;
	return x;
}

void blik(){
	const bool f_blik;
	if(f_blik)analogWrite(10,100), f_blik != f_blik;
	else analogWrite(10,10), f_blik != f_blik;
}

void loop() {
	
	// Здесь можно проверять кнопки датчики и пр. без задержки
	
	//Для запуска или перезапуска процедуры  делаем "var=1;"
	switch (var) {
		case 1:
		lcd.clear();
		lcd.print("*     START    *");
		if (my_pausa(3000, 0)) ++var;
		break;
		case 2:
		lcd.clear();
		lcd.print("*   ZAGRUZKA   *");
		digitalWrite(13, HIGH); // включен канал №13
		if (my_pausa(5000, 0)) ++var;
		break;
		case 3:
		digitalWrite(13, LOW); // вывключен канал №13
		if (my_pausa(5000, 0)) ++var;
		break;
		case 4:
		lcd.clear();
		lcd.print("* PRED  VAKUUM *");
		digitalWrite(12, HIGH); // включен канал №12
		if (my_pausa(2000, 0)) ++var;
		break;
		case 5:
		lcd.clear();
		lcd.print("* VAKUUM + PAR *");
		digitalWrite(11, HIGH); // включен канал №11
		if (my_pausa(8000, 0)) ++var;
		break;
		case 6:
		digitalWrite(12, LOW); // вывключен канал №12
		lcd.clear();
		lcd.print("*      PAR     *");
		if (my_pausa((d-b-c)*1000), 0)) ++var; //можно и так но лучше if (my_pausa(8000, 0)
		break;
		case 7:
		digitalWrite(11, LOW); // вывключен канал №11
		lcd.clear();
		lcd.print("*VAK.OXLAGDENIE*");
		digitalWrite(3, HIGH); // включен канал №3
		if (my_pausa(5000, 0)) ++var;
		break;
		case 8:
		digitalWrite(3, LOW); // вывключен канал №3
		lcd.clear();
		lcd.print("* STABILIZACIY *");
		digitalWrite(2, HIGH); // включен канал №2
		if (my_pausa(5000, 0)) ++var;
		break;
		case 9:
		digitalWrite(2, LOW); // вывключен канал №2
		lcd.clear();
		lcd.print("*  BLOK GOTOV  *");
		if (mig < 29 && if (my_pausa(1000, 0))){
			++mig;
			blik();
		}
		else{
			if (my_pausa(10000, 0)){
				mig =0;
				//Здесь не знаю - Если надо зациклить то "var=1;"
				// Если ждем команды то "var=0;"
			}
		}
		break;
	}
}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Для создания меню нужно посмотреть на прграмму под несколько другим углом:

Забудьте пока о рабочем процессе и делеях к коде. Пока не танем писать все включения, а только подумает о меню.

1. раз нужно всегда и сразу реагировать на кнопки, то нужно чтобы один проход loop() не занимал много времени, несколько миллисекунд - не больше.

2. если нужно поменять изображение - то экран надо перерисовать, иначе не нужно его трогать, чтобы не мигал.

------

итак - вы заводите массив из структур такого вида:

- значение параметра (все эти ваши числа) только обращаться к ним будете теперь как-то типа paramList[nfmt].value;

-изображение названия на экране;

-----

заводите переменную с количеством параметров, номером текущего редактируемого и статусом программы (работа или редактирование).

войдя в loop(), считывете кнопку.

При необходимости (изменение номера, значения или статуса) - перерисовываете экран;

Обрабатываете кнопку - (пусть из 5: вверх, вниз, лево, право и режим)

пусть лево и право - листают номер редактируемого параметра, верх низ - меняют его значение, а режим меняет статус с работы на редактирование и обратно.

----------------------

вот и все - это очень просто. Есть мелкие подводные камни, я намекну на один из них - обработав нажатие нужно о нем забыть, иначе при следующем входе в loop() Вы снова его обработаете. Сами придумайте как этот камень обойти... хотел написать решение, но подумал, что это не педагогично.

-----

дальше приклейте режим работы:

если работа - то запускаем Ваш процесс, пусть даже, на первом этапе, с делеями. Опять же не забудьте про флаг, иначе по окончании цикла работы, войдя в loop() вы снова запустите цикл. Можно, например, после окончания последовательности роаботы снова установить режим "редактирование".

OlegKireen
Offline
Зарегистрирован: 29.11.2016

Всем Спасибо проверю, прислушаюсь к советам. Как Проверь и разберусь вылажу результаты.

Logik
Offline
Зарегистрирован: 05.08.2014

Я б сначала порекомендовал разобратся с темой блинк без делея. Переписать код в таком подходе, это и будет фактически  п.1 у wdrakula.

И про перерисовку экрана дополню, можно конечно очищать его весь и отрисовывать при редактировании заново, но порывшись в либе найдете как установить курсор в заданую координату екрана и сможете перерисовывать те несколько символов, которые собственно редактируются. Так быстрей работает и как правило (не всегда, однако) удобней.  

OlegKireen
Offline
Зарегистрирован: 29.11.2016

Напесал меню для коректировки даных в начале программы.

Принцып работ меню меня устраивает но как только вставляю эту часть кода в програму то тот цыкл смешивается в кучу. Подкажить как разделить цыкл работы так называемого меню и цыкл программы.

вот что получисось. 

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);



int a = 5; // время загрузки в секундах
int b = 2; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах
int d = 20; // время пропарки в секундах
int e = 5; // время вакуумное охлаждение в секундах
int f = 5; // время остывание в секундах
int t = 0;

void setup() {
  lcd.begin(16, 2);
}

byte key() { //// для кнопок ЛСДшилда
  int val = analogRead(0);
  if (val < 50) return 5;
  else if (val < 110) return 3;
  else if (val < 300) return 4;
  else if (val < 450) return 2;
  else if (val < 650) return 1;
  else if (val <= 1023) return 0;
}

void loop() {

  lcd.clear();
  if (key() == 1) {
    t = t + 1;
  }
  switch (t) {
    case 1:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#1 * ZAGRUZKA *");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        a = a + 1;
      }
      if (key() == 4) {
        a = a - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(a);
      lcd.print(" >");
      delay(100);
      break;
    case 2:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#2 *ZADERGHKA*");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        b = b + 1;
      }
      if (key() == 4) {
        b = b - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(b);
      lcd.print(" >");
      delay(100);
      break;
    case 3:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#3 Pred Vakuum");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        c = c + 1;
      }
      if (key() == 4) {
        c = c - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(c);
      lcd.print(" >");
      delay(100);
      break;
    case 4:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#4 * PAR *");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        d = d + 1;
      }
      if (key() == 4) {
        d = d - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(d);
      lcd.print(" >");
      delay(100);
      break;
    case 5:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#5 Vakuum OXL.");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        e = e + 1;
      }
      if (key() == 4) {
        e = e - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(e);
      lcd.print(" >");
      delay(100);
      break;
    case 6:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("P#6 STABILIZACIY");
      lcd.setCursor(0, 1);
      if (key() == 3) {
        f = f + 1;
      }
      if (key() == 4) {
        f = f - 1;
      }
      lcd.print("Znah v c. < ");
      lcd.print(f);
       lcd.print(" >");
      delay(100);
      break;
  }
  if (t >= 7) {
    t = 0;
  }
  delay(100);

}

 

OlegKireen
Offline
Зарегистрирован: 29.11.2016

Всем спасибо. Все получилось. Все Работает ОТЛИЧНО. Лично я доволен если кому поможет разобраться с работой Ардуины пользуйтесь на здоровье. можно конечьно уброть delay но и так все работает хорошо.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);



int a = 10; // время загрузки в секундах
int b = 5; // время задержки в секундах
int c = 10; // время предварительный вакуум в секундах
int d = 10; // время пропарки в секундах
int e = 20; // время вакуумное охлаждение в секундах
int f = 30; // время остывание в секундах
int t = 0;
int k = 1;
void setup() {
  lcd.begin(16, 2);

  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);




}

byte key() { //// для кнопок ЛСДшилда
  int val = analogRead(0);
  if (val < 50) return 5;
  else if (val < 110) return 3;
  else if (val < 300) return 4;
  else if (val < 450) return 2;
  else if (val < 650) return 1;
  else if (val <= 1023) return 0;
}

void loop() {
  lcd.clear();
  lcd.setCursor(0, 0);         // Шапка меню
  lcd.print("MENU -> SELECT");
  lcd.setCursor(0, 1);
  lcd.print("START -> START");


  while (k == 1) {

    if (key() == 5) {        // ловушка для цыкла
      k = k + 1;
    }
    if (key() == 1) {
      t = t + 1;
    }
    switch (t) {
      case 1:                 
        lcd.clear();      // время загрузки меню
        lcd.setCursor(0, 0);
        lcd.print("P#1 * ZAGRUZKA *");   
        lcd.setCursor(0, 1);
        if (key() == 3) {
          a = a + 1;            // додавить 1 секунду
        }
        if (key() == 4) {
          a = a - 1;           // убрать 1 секунду
        }
        lcd.print("Znah v c. <");
        lcd.print(a);
        lcd.print(">");
        delay(100);
        break;
      case 2:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("P#2 *ZADERGHKA*");
        lcd.setCursor(0, 1);
        if (key() == 3) {
          b = b + 1;
        }
        if (key() == 4) {
          b = b - 1;
        }
        lcd.print("Znah v c. <");
        lcd.print(b);
        lcd.print(">");
        delay(100);
        break;
      case 3:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("P#3 Pred Vakuum");
        lcd.setCursor(0, 1);
        if (key() == 3) {
          c = c + 1;
        }
        if (key() == 4) {
          c = c - 1;
        }
        lcd.print("Znah v c. <");
        lcd.print(c);
        lcd.print(">");
        delay(100);
        break;
      case 4:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("P#4 * PAR *");
        lcd.setCursor(0, 1);
        if (key() == 3) {
          d = d + 1;
        }
        if (key() == 4) {
          d = d - 1;
        }
        lcd.print("Znah v c. <");
        lcd.print(d);
        lcd.print(">");
        delay(100);
        break;
      case 5:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("P#5 Vakuum OXL.");
        lcd.setCursor(0, 1);
        if (key() == 3) {
          e = e + 1;
        }
        if (key() == 4) {
          e = e - 1;
        }
        lcd.print("Znah v c. <");
        lcd.print(e);
        lcd.print(">");
        delay(100);
        break;
      case 6:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("P#6 STABILIZACIY");
        lcd.setCursor(0, 1);
        if (key() == 3) {
          f = f + 1;
        }
        if (key() == 4) {
          f = f - 1;
        }
        lcd.print("Znah v c. <");
        lcd.print(f);
        lcd.print(">");
        delay(100);
        break;
    }
    if (t >= 7) {
      t = 0;
    }
    delay(100);

  }
  analogWrite(10, 200);
  lcd.clear();
  lcd.print("*     START    *");
  delay(3000);

  lcd.clear();
  lcd.print("*   ZAGRUZKA   *");
  digitalWrite(13, HIGH); // включен канал №13
  for (int ab = 0; ab <= a; ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print(a);
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  digitalWrite(13, LOW); // выключен канал №13
  delay(5000);
  lcd.clear();
  lcd.print("* PRED  VAKUUM *");
  digitalWrite(12, HIGH); // включен канал №12
  for (int ab = 0; ab <= b; ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print(b);
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  lcd.clear();
  lcd.print("* VAKUUM + PAR *");
  digitalWrite(11, HIGH); // включен канал №11
  for (int ab = 0; ab <= (c - b); ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print((c - b));
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  digitalWrite(12, LOW); // выключен канал №12
  lcd.clear();
  lcd.print("*      PAR     *");
  for (int ab = 0; ab <= (d - b - c); ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print((d - b - c));
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  digitalWrite(11, LOW); // выключен канал №11
  //нужно условие выключения не по времени а от данных манометра

  lcd.clear();
  lcd.print("*VAK.OXLAGDENIE*");
  digitalWrite(3, HIGH); // включен канал №3
  for (int ab = 0; ab <= e; ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print(e);
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  digitalWrite(3, LOW); // выключен канал №3
  lcd.clear();
  lcd.print("* STABILIZACIY *");
  digitalWrite(2, HIGH); // включен канал №2
  for (int ab = 0; ab <= f; ab = ab + 1) {
    lcd.setCursor(0, 1);
    lcd.print(f);
    lcd.print("  <");
    lcd.print(ab);
    lcd.print(">");
    delay(1000);
  }
  digitalWrite(2, LOW); // выключен канал №2
  lcd.clear();
  lcd.print("*  BLOK GOTOV  *");
  // команда стоп перезапуск программы кнопка
  for (int x = 0; x <= 20; x = x + 1) {
    analogWrite(10, 10);
    delay(250);
    analogWrite(10, 100);
    delay(500);
  }
  analogWrite(10, 200);
  delay(10000);
  k = k - 1;
  t = 0;
}