// ВНИМАНИЕ для заливки нужно блокировать EIMSK в ISR (INT0_vect)
// разблокировка происходит при отпускании продукта
// еще ситуация может возникнуть при перепрошивке старой версии
// у которой таблица инициализации инициализирована меньшим количеством
// элементов а ключ записи уже записан в ячейку ( решение смена адреса ключа или значения не первого запуска )
#include <EEPROM.h>
#define INIT_ADDR 150 // номер резервной ячейки для ключа
#define INIT_KEY 50 // ключ не первого запуска. 0-254, на выбор
#define ADDR_PROFILE 151// адрес где храниться номер актуального профиля для работы
#define INIT_Profile 0// номер профиля если первый старт
#define max_profile 10// максимальное количество профилей
#include "LiquidCrystal_1602_RUS.h"
//#include "Arduino_DebugUtils.h" // строка для отладки
LiquidCrystal_1602_RUS lcd(12, 13, 5, 4, 7, 6);
// rs(12) e(13) d4(5) d5(4) d6(7) d7(6)
//пины датчика и клапанов
#define pin_isr 2 //номер пина датчика
#define pin_bok1 10 // прижим фиксация продукта
#define pin_zakr 9 //распределитель закрутки
#define pin_vert 8 // вертикальный фиксация крышки
#define pin_ots A2 // отсекатель
// пины кнопок
#define pin_vlevo A0 // кнопка влево
#define pin_vpravo A1// кнопка вправо
#define pin_vverh A3 // кнопка вверх
#define pin_vniz A4 // кнопка вниз
#define pin_enter A5// кнопка ввод
// пин двигателя
#define pin_shim 11 // шим для управления двигателем OC2A
// пин zero
#define pin_zero 3 // детектор прохода полуволны через 0
volatile bool first_start = 0 ; // если 0 то признак 1 старта откуда читать данные из EEPROM или инициализация
// при сработке прерывания от датчика запоминаем значение счетчика в переменных
// прижимы лимиты
#define max_Boktime 2500 // максимальная задержка сработки
#define min_Boktime 20 //минимальная задержка сработки боковой фиксатор
#define max_Verttime 2000 // лимиты время закрутки
#define min_Verttime 20
#define max_Bokdelay 244 //максимальное время задержки сработки фиксатора крышки
#define min_Bokdelay 20 // минимальное время задержки сработки фиксатора крышки
#define max_Vertdelay 90 // лимиты задержки отпускания продукта
#define min_Vertdelay 20
#define max_Spindelay 190 // лимиты задержки закрутки после фиксатора крышки
#define min_Spindelay 20
#define max_length 990 // лимиты задержки длины продукта
#define min_length 110
// двигатель лимиты
#define strong_max 90
#define strong_min 20
#define osr_max 100 // пересчет на регистр OCR2
#define osr_min 10
// датчик
#define debonce_max 1000 //лимиты времени блокировки от сработки датчика
#define debonce_min 10
// лимиты обнаружения строб сигнала от сети
#define T_det_max 180
#define T_det_min 140
volatile bool ready_klap = 1; // переменная разрешения включения прижимов ( в режиме диагностика нет разрешения работы)
bool flag = 0; // переменная для определения обьекта изменения (что меняем pointer или сам параметр)
bool is_redakt = 0 ; // переменная для включение возможности редактирования параметра
volatile bool save_redakt = 0; // сохранение переменных в памяти устройства
#include "button.h"
button btn_vlevo(pin_vlevo); // кнопка влево
button btn_vpravo(pin_vpravo);// кнопка вправо
button btn_vverh(pin_vverh); // кнопка вверх
button btn_vniz(pin_vniz);// кнопка вниз
button btn_enter(pin_enter);// кнопка enter " сохранить значение"
bool btn_speed = 0; // переменная включения скоростной перемотки значений
uint8_t kolvo_btn; // количество сработок одной и той же кнопки за время t
uint32_t btn_tmr;// засекаем время входа в ту же самую функцию
#define min_Kolvo_btn 3 // минимальное количесво повторных сработок для включения режима ускоренной перемотки
#define btn_lim_tmr 510 // время сигнализирующее что кнопка была нажата повторно***завязано с botton.h
// не может быть меньше времени повторной сработки
//клапана горизонтальных и вертикальных зажимов
volatile bool prigimG_status = 0; //переменная включения клапана прижима горизонтального prigimG_on=1 если боковые прижимы держат продукт
volatile bool prigimV_status = 0; // переменная включения клапана вертикального prigimV_on=1 если продукт зажат сверху
volatile bool prigimZ_status = 0; // переменная включения клапана закрутки
volatile bool prigimO_status =0; // переменная включения отсекателя
//#include "timer.h"
struct profile {uint16_t time_bok;// задержка сработки бокового прижима пневмоцилиндра
uint16_t time_vert;// время закрутки
uint8_t delay_bok;// задержка сработки фиксатора крышки
uint8_t delay_vert; // задержка отпускания продукта
uint8_t delay_spin;// задержка сработки закрутки после фиксатора крышки
uint16_t length_product;// задержка длительности продукта
uint8_t strong_zakr;// усилие закрутки
uint8_t nomer_profile;// номер профиля
uint8_t regim_raboty; // режим работы 0 бит отвечает за активность отсекателя false - выключен true - включен
}; // 1 бит активность губок, 2 бит активность верт прижима,3 бит ролики
volatile profile Profile_Active {0,0,0,0,0,0,0,0,0};
profile Profile0{1300,140,120,20,37,420,60,0,15};
profile Profile1{1301,141,121,21,38,421,61,1,15};
profile Profile2{1302,142,122,22,39,422,62,2,15};
profile Profile3{1303,143,123,23,40,423,63,3,15};
profile Profile4{1304,144,124,24,41,424,64,4,15};
profile Profile5{1305,145,125,25,42,425,65,5,15};
profile Profile6{1306,146,126,26,43,426,66,6,15};
profile Profile7{1307,147,127,27,44,427,67,7,15};
profile Profile8{1308,148,128,28,45,428,68,8,15};
profile Profile9{1309,149,129,29,46,429,69,9,15};
profile Profile10{1309,149,129,29,46,429,69,10,15};
// двигатель закрутки
volatile bool dvig_on = 1; // переменная включения двигателя dvig_on=1 если двигатель включен
// детектирование сигнала строб от сети
volatile uint8_t t_detect = 0; // время между импульсами детектирования
volatile uint8_t N_strob = 0;
volatile uint8_t mass[5] = {0, 0, 0, 0, 0};
// датчик
volatile bool datchik_status = 0; // переменная сработки датчика datchik_on=1 если датчик сработал
volatile uint8_t process_status = 0; // статус процесса 0-готов 1 - блокировка 2- блокировка снята 3- сработка бок. прижим 3 сработка верт. прижим
//volatile uint32_t debounce; // переменная для замера времени дребезга
//volatile uint32_t time_start; // переменная для сохранения метки начала отсчета времени
//bool akt_level = 0; // активный уровень сигнала фронт-0 или спад-1 неактуально!!!!
//bool set_pedal = 0; // подключение сработки от педали 0-выкл 1 -вкл неактуально!!!!
//volatile uint16_t delay_block = 500; // блокировка следующей сработки после сработки датчика неактуально!!!
volatile uint8_t pointer = 0; // Переменная указатель для движения по пунктам меню
uint8_t ukasatel = 0 ; // указывант курсору куда встать 0- 1строка 1-2 строка дисплея
// при сработке прерывания от датчика запоминаем значение счетчика в переменных
ISR (INT0_vect)
{
// if ((millis() - debounce >= value_deb) && digitalRead(pin_isr))
// {
// debounce = millis();
//datchik_status =0;
if (!digitalRead(pin_isr)) {datchik_status = 1;
EIMSK &= ~(1 << INT0); // блокировка сработки прерывания на время delay_block
TCNT1 = 65535 -(Profile_Active.length_product<<4);
OCR1A =0;
OCR1B =0;
TIMSK1&= ~ (1 << OCIE1B);
TIMSK1&= ~ (1 << OCIE1A);
TCCR1B = (1 << CS12) | (1 << CS10); // старт Т1
process_status = 1;
if ((Profile_Active.regim_raboty&(1<<0))&&ready_klap) {digitalWrite(pin_ots, 0);// открываем отсекатель
prigimO_status = 1;
}
//DEBUG_INFO("INT TCNT1= %d",TCNT1,HEX);
//DEBUG_INFO("INT oCR1A= %d",OCR1A,HEX);
// DEBUG_INFO("INT oCR1b= %d",OCR1B,HEX);
// DEBUG_INFO("INT status= %d",process_status );
}
// digitalWrite(pin_bok2, 1);// открываем тиристор
// }
}
ISR (TIMER1_OVF_vect)//закрываем отсекатель
{ if ((Profile_Active.regim_raboty&(1<<0))&&ready_klap) {digitalWrite(pin_ots, 1);// закрываем тиристор
prigimO_status = 0;
}
//datchik_status = 0;
process_status = 2;
//EIMSK |= (1 << INT0); // снимаем блокировку от повторной сработки
TCCR1B = 0; // тормозим счетчик
TIMSK1|= (1 << OCIE1B);
TIMSK1|= (1 << OCIE1A);
TCNT1 = 0;
OCR1A = (Profile_Active.time_bok<<4);// все значения умножены на 16
OCR1B = (Profile_Active.time_bok<<4) + (Profile_Active.delay_bok<<5);
TCCR1B = (1 << CS12) | (1 << CS10); // один тик (1/16)*1024=64 мкс
datchik_status = 0;
// DEBUG_INFO("OVF TCNT1= %d",TCNT1);
// DEBUG_INFO("OVF oCR1A= %d",OCR1A);
// DEBUG_INFO("OVF oCR1b= %d",OCR1B);
// DEBUG_INFO("cmpA status= %d",process_status );
}
ISR (TIMER1_COMPA_vect)//прерывание по совпадению TCNT1 c OCR1А
{
// отпускаем продукт
if (ready_klap && (process_status == 4)) {
if (Profile_Active.regim_raboty&(1<<1)) {digitalWrite(pin_bok1, 1);// закрываем тиристор
prigimG_status = 0;
}
// digitalWrite(pin_ots, 0);// открываем отсекатель
//prigimO_status = 1;
TCCR1B = 0;
TCNT1 = 0;
TIMSK1|= (1 << OCIE1B);//разрешаем прерывание Т1В
process_status = 0 ;
EIMSK |= (1 << INT0); // снимаем блокировку от повторной сработки
}
// включаем закрутку
if (ready_klap && (process_status == 3)&&(Profile_Active.regim_raboty&(1<<3))) {
// process_status = 4;
digitalWrite(pin_zakr, 0);// открываем тиристор закрутки
prigimZ_status = 1;
}
// захват продукта
if (ready_klap && (process_status == 2)&&(Profile_Active.regim_raboty&(1<<1))) {
digitalWrite(pin_bok1, 0);// фиксация бутылки
prigimG_status = 1;
}
// DEBUG_INFO("cmpA TCNT1= %d",TCNT1);// строка для отладки
// DEBUG_INFO("cmpA oCR1A= %d",OCR1A);
// DEBUG_INFO("cmpA oCR1b= %d",OCR1B);
// DEBUG_INFO("cmpA status= %d",process_status );
}
ISR (TIMER1_COMPB_vect)//прерывание по совпадению TCNT1 c OCR1А
{
// отпускаем продукт
//if (ready_klap && (process_status == 4)) {
// digitalWrite(pin_ots, 1);// закрываем тиристор
//prigimO_status = 0;
//TCCR1B = 0;
// TCNT1 = 0;
//process_status = 0 ;
//EIMSK |= (1 << INT0); // снимаем блокировку от повторной сработки датчика
// }
// выключаем закрутку
if (ready_klap && (process_status == 3)) {
if (Profile_Active.regim_raboty&(1<<2)) {digitalWrite(pin_vert, 1);// выключаем прижим крышки
prigimV_status = 0;
}
// digitalWrite(pin_ots, 0);// открываем отсекатель
if (Profile_Active.regim_raboty&(1<<3)) {digitalWrite(pin_zakr, 1);// выключаем закрутку
prigimZ_status = 0;
}
//process_status = 0 ;
TCCR1B = 0;
TCNT1 = 0;
process_status = 4;
OCR1A =Profile_Active.delay_vert<<5;
TIMSK1&= ~ (1 << OCIE1B); // запрет прерывания от Т 1 b
//OCR1A =length_product<<5;
//OCR1B =OCR1A+(length_product<<4);
TCCR1B = (1 << CS12) | (1 << CS10);
}
// сработка фиксатора крышки
if (ready_klap && (process_status == 2)) {
if ((Profile_Active.regim_raboty&(1<<2))) { digitalWrite(pin_vert, 0);// открываем тиристор верт. прижима
prigimV_status = 1;
}
process_status = 3;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = (Profile_Active.delay_spin<<5);
OCR1B = OCR1A + (Profile_Active.time_vert<<4);
TCCR1B = (1 << CS12) | (1 << CS10);
}
// DEBUG_INFO("cmpB TCNT1= %d",TCNT1);// строка для отладки
// DEBUG_INFO("cmpB oCR1A= %d",OCR1A);
// DEBUG_INFO("cmpB oCR1b= %d",OCR1B);
// DEBUG_INFO("cmpB status= %d",process_status );
}
ISR (INT1_vect)// прошли через 0 стартуем счетчиком
{ // еще раз проверяем точно через 0 прошли
if (!digitalRead(pin_zero))
{if (first_start ) {TCCR2B = 0;// останавливаем счетчик
t_detect = TCNT2;
mass[N_strob] = t_detect;
N_strob++;
if (N_strob >= 5) N_strob = 0;
TCNT2 = 0;
OCR2A = map(Profile_Active.strong_zakr, strong_min, strong_max, osr_max, osr_min);
OCR2B =osr_max;
TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20); //коэфициент деления 1024 1/16*1024=64 мкс
//if (dvig_on) digitalWrite(pin_shim, 1); //закрываем тиристор
digitalWrite(pin_shim, 1);
//OCR2A = map(strong_zakr, strong_min, strong_max, osr_max, osr_min);
}
else { TCCR2B = 0; // первый замер ничего не делаем
TCNT2 = 0;
TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20); //коэфициент деления 1024 1/16*1024=64 мк
first_start=1;
}
}
}
ISR (TIMER2_COMPA_vect)//прерывание по совпадению TCNT2 c OCR2
{// чем раньше откроем тиристор тем действующее значение полуволны будет больше
if (dvig_on) digitalWrite(pin_shim, 0);// открываем тиристор
}
ISR (TIMER2_COMPB_vect)//защита прерывание по совпадению TCNT2 c OCR2B
{ //TCCR2B = 0; // если вышли за пределы измерения строба
//t_detect = 0;
//mass[N_strob] = t_detect;
// N_strob++;
// if (N_strob >= 5) N_strob = 0;
//if (dvig_on) digitalWrite(pin_shim, 1); //закрываем тиристор
// TCNT2 = 0;
//TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20); //коэфициент деления 1024
digitalWrite(pin_shim, 1);// закрываем тиристор
}
void setup()
// put your setup code here, to run once:
{ pinMode(pin_isr, INPUT_PULLUP);
pinMode(pin_shim, OUTPUT);
pinMode(pin_bok1, OUTPUT);
pinMode(pin_zakr, OUTPUT);
pinMode(pin_vert, OUTPUT);
pinMode(pin_ots, OUTPUT);
digitalWrite(pin_bok1, 1);// все прижимы отключены
digitalWrite(pin_zakr, 1);
digitalWrite(pin_vert, 1);
digitalWrite(pin_ots, 1);
digitalWrite(pin_shim, 1);// шим отключен
lcd.begin(16, 2);
// attachInterrupt(0, isr, FALLING); // прерывание на D 2 (int0)
//Serial.begin(9600);// строка для отладки
//Debug.timestampOn();// строка для отладки
// Serial.begin(9600);
EICRA = (1 << ISC11); //детектор нуля спадающий фронт
EIMSK = (1 << INT1) | (1 << INT0); //разрешаем прерывания int0- int1
TIMSK2 = (1 << OCIE2A) | (1 << OCIE2B); //разрешаем прерывание по сравнению OCR2
TCCR2A = 0;
TCCR2B = 0;
TCNT2 = 0; //обнуляем счетчик 2
// настройка Т1 задержка старта фиксации продукта
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 0;
OCR1B = 0;
TIMSK1 = (1 << OCIE1A) | (1 << OCIE1B) | (1 << TOIE1);
process_status = 0;
OCR2A = map(Profile_Active.strong_zakr, strong_min, strong_max, osr_max, osr_min);
OCR2B = T_det_max;// лимит выхода за пределы измерения строба
sei();
lcd.clear();
if (EEPROM.read(INIT_ADDR) != INIT_KEY)
{ // первый запуск
EEPROM.write(INIT_ADDR, INIT_KEY); // записали ключ
EEPROM.write(ADDR_PROFILE,INIT_Profile); // В ячейку номера активного профиля =0
// в данном случае это значение переменной, объявленное выше
EEPROM.put(0,Profile0.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(2, Profile0.time_vert);
EEPROM.put(4, Profile0.delay_bok);
EEPROM.put(5,Profile0.delay_vert);
EEPROM.put(6, Profile0.delay_spin);
EEPROM.put(7, Profile0.length_product);
EEPROM.put(9, Profile0.strong_zakr);
EEPROM.put(10, Profile0.nomer_profile);
EEPROM.put(11,Profile0.regim_raboty);
EEPROM.put(12,Profile1.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(14, Profile1.time_vert);
EEPROM.put(16, Profile1.delay_bok);
EEPROM.put(17,Profile1.delay_vert);
EEPROM.put(18, Profile1.delay_spin);
EEPROM.put(19, Profile1.length_product);
EEPROM.put(21, Profile1.strong_zakr);
EEPROM.put(22, Profile1.nomer_profile);
EEPROM.put(23, Profile1.regim_raboty);
EEPROM.put(24,Profile2.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(26, Profile2.time_vert);
EEPROM.put(28, Profile2.delay_bok);
EEPROM.put(29,Profile2.delay_vert);
EEPROM.put(30, Profile2.delay_spin);
EEPROM.put(31, Profile2.length_product);
EEPROM.put(33, Profile2.strong_zakr);
EEPROM.put(34, Profile2.nomer_profile);
EEPROM.put(35, Profile2.regim_raboty);
EEPROM.put(36,Profile3.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(38, Profile3.time_vert);
EEPROM.put(40, Profile3.delay_bok);
EEPROM.put(41,Profile3.delay_vert);
EEPROM.put(42, Profile3.delay_spin);
EEPROM.put(43, Profile3.length_product);
EEPROM.put(45, Profile3.strong_zakr);
EEPROM.put(46, Profile3.nomer_profile);
EEPROM.put(47, Profile3.regim_raboty);
EEPROM.put(48,Profile4.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(50, Profile4.time_vert);
EEPROM.put(52, Profile4.delay_bok);
EEPROM.put(53,Profile4.delay_vert);
EEPROM.put(54, Profile4.delay_spin);
EEPROM.put(55, Profile4.length_product);
EEPROM.put(57, Profile4.strong_zakr);
EEPROM.put(58, Profile4.nomer_profile);
EEPROM.put(59, Profile4.regim_raboty);
EEPROM.put(60,Profile5.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(62, Profile5.time_vert);
EEPROM.put(64, Profile5.delay_bok);
EEPROM.put(65,Profile5.delay_vert);
EEPROM.put(66, Profile5.delay_spin);
EEPROM.put(67, Profile5.length_product);
EEPROM.put(69, Profile5.strong_zakr);
EEPROM.put(70, Profile5.nomer_profile);
EEPROM.put(71, Profile5.regim_raboty);
EEPROM.put(72,Profile6.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(74, Profile6.time_vert);
EEPROM.put(76, Profile6.delay_bok);
EEPROM.put(77,Profile6.delay_vert);
EEPROM.put(78, Profile6.delay_spin);
EEPROM.put(79, Profile6.length_product);
EEPROM.put(81, Profile6.strong_zakr);
EEPROM.put(82, Profile6.nomer_profile);
EEPROM.put(83, Profile6.regim_raboty);
EEPROM.put(84,Profile7.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(86, Profile7.time_vert);
EEPROM.put(88, Profile7.delay_bok);
EEPROM.put(89,Profile7.delay_vert);
EEPROM.put(90, Profile7.delay_spin);
EEPROM.put(91, Profile7.length_product);
EEPROM.put(93, Profile7.strong_zakr);
EEPROM.put(94, Profile7.nomer_profile);
EEPROM.put(95, Profile7.regim_raboty);
EEPROM.put(96,Profile8.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(98, Profile8.time_vert);
EEPROM.put(100, Profile8.delay_bok);
EEPROM.put(101,Profile8.delay_vert);
EEPROM.put(102, Profile8.delay_spin);
EEPROM.put(103, Profile8.length_product);
EEPROM.put(105, Profile8.strong_zakr);
EEPROM.put(106, Profile8.nomer_profile);
EEPROM.put(107, Profile8.regim_raboty);
EEPROM.put(108,Profile9.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(110 ,Profile9.time_vert);
EEPROM.put(112, Profile9.delay_bok);
EEPROM.put(113,Profile9.delay_vert);
EEPROM.put(114, Profile9.delay_spin);
EEPROM.put(115, Profile9.length_product);
EEPROM.put(117, Profile9.strong_zakr);
EEPROM.put(118, Profile9.nomer_profile);
EEPROM.put(119, Profile9.regim_raboty);
EEPROM.put(120,Profile10.time_bok); // инициализация значений активного профиля профилем 1
EEPROM.put(122 ,Profile10.time_vert);
EEPROM.put(124, Profile10.delay_bok);
EEPROM.put(125,Profile10.delay_vert);
EEPROM.put(126, Profile10.delay_spin);
EEPROM.put(127, Profile10.length_product);
EEPROM.put(129, Profile10.strong_zakr);
EEPROM.put(130, Profile10.nomer_profile);
EEPROM.put(131, Profile10.regim_raboty);
}
Profile_Active.nomer_profile=EEPROM.read(ADDR_PROFILE) ; // читаем номер последний активный номер профиля
if (Profile_Active.nomer_profile==0) { EEPROM.get(0,Profile_Active.time_bok); // читаем из профиля 0
EEPROM.get(2,Profile_Active.time_vert);
EEPROM.get(4, Profile_Active.delay_bok);
EEPROM.get(5,Profile_Active.delay_vert);
EEPROM.get(6, Profile_Active.delay_spin);
EEPROM.get(7, Profile_Active.length_product);
EEPROM.get(9, Profile_Active.strong_zakr);
EEPROM.get(10, Profile_Active.nomer_profile);
EEPROM.get(11,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==1) { EEPROM.get(12,Profile_Active.time_bok); // читаем из профиля 1
EEPROM.get(14,Profile_Active.time_vert);
EEPROM.get(16, Profile_Active.delay_bok);
EEPROM.get(17,Profile_Active.delay_vert);
EEPROM.get(18, Profile_Active.delay_spin);
EEPROM.get(19, Profile_Active.length_product);
EEPROM.get(21, Profile_Active.strong_zakr);
EEPROM.get(22, Profile_Active.nomer_profile);
EEPROM.get(23,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==2) { EEPROM.get(24,Profile_Active.time_bok); // читаем из профиля 2
EEPROM.get(26,Profile_Active.time_vert);
EEPROM.get(28, Profile_Active.delay_bok);
EEPROM.get(29,Profile_Active.delay_vert);
EEPROM.get(30, Profile_Active.delay_spin);
EEPROM.get(31, Profile_Active.length_product);
EEPROM.get(33, Profile_Active.strong_zakr);
EEPROM.get(34, Profile_Active.nomer_profile);
EEPROM.get(35,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==3) { EEPROM.get(36,Profile_Active.time_bok); // читаем из профиля 3
EEPROM.get(38,Profile_Active.time_vert);
EEPROM.get(40, Profile_Active.delay_bok);
EEPROM.get(41,Profile_Active.delay_vert);
EEPROM.get(42, Profile_Active.delay_spin);
EEPROM.get(43, Profile_Active.length_product);
EEPROM.get(45, Profile_Active.strong_zakr);
EEPROM.get(46, Profile_Active.nomer_profile);
EEPROM.get(47,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==4) { EEPROM.get(48,Profile_Active.time_bok); // читаем из профиля 4
EEPROM.get(50,Profile_Active.time_vert);
EEPROM.get(52, Profile_Active.delay_bok);
EEPROM.get(53,Profile_Active.delay_vert);
EEPROM.get(54, Profile_Active.delay_spin);
EEPROM.get(55, Profile_Active.length_product);
EEPROM.get(57, Profile_Active.strong_zakr);
EEPROM.get(58, Profile_Active.nomer_profile);
EEPROM.get(59,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==5) { EEPROM.get(60,Profile_Active.time_bok); // читаем из профиля 5
EEPROM.get(62,Profile_Active.time_vert);
EEPROM.get(64, Profile_Active.delay_bok);
EEPROM.get(65,Profile_Active.delay_vert);
EEPROM.get(66, Profile_Active.delay_spin);
EEPROM.get(67, Profile_Active.length_product);
EEPROM.get(69, Profile_Active.strong_zakr);
EEPROM.get(70, Profile_Active.nomer_profile);
EEPROM.get(71,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==6) { EEPROM.get(72,Profile_Active.time_bok); // читаем из профиля 6
EEPROM.get(74,Profile_Active.time_vert);
EEPROM.get(76, Profile_Active.delay_bok);
EEPROM.get(77,Profile_Active.delay_vert);
EEPROM.get(78, Profile_Active.delay_spin);
EEPROM.get(79, Profile_Active.length_product);
EEPROM.get(81, Profile_Active.strong_zakr);
EEPROM.get(82, Profile_Active.nomer_profile);
EEPROM.get(83,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==7) { EEPROM.get(84,Profile_Active.time_bok); // читаем из профиля 7
EEPROM.get(86,Profile_Active.time_vert);
EEPROM.get(88, Profile_Active.delay_bok);
EEPROM.get(89,Profile_Active.delay_vert);
EEPROM.get(90, Profile_Active.delay_spin);
EEPROM.get(91, Profile_Active.length_product);
EEPROM.get(93, Profile_Active.strong_zakr);
EEPROM.get(94, Profile_Active.nomer_profile);
EEPROM.get(95,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==8) { EEPROM.get(96,Profile_Active.time_bok); // читаем из профиля 8
EEPROM.get(98,Profile_Active.time_vert);
EEPROM.get(100, Profile_Active.delay_bok);
EEPROM.get(101,Profile_Active.delay_vert);
EEPROM.get(102, Profile_Active.delay_spin);
EEPROM.get(103, Profile_Active.length_product);
EEPROM.get(105, Profile_Active.strong_zakr);
EEPROM.get(106, Profile_Active.nomer_profile);
EEPROM.get(107,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==9) { EEPROM.get(108,Profile_Active.time_bok); // читаем из профиля 9
EEPROM.get(110,Profile_Active.time_vert);
EEPROM.get(112, Profile_Active.delay_bok);
EEPROM.get(113,Profile_Active.delay_vert);
EEPROM.get(114, Profile_Active.delay_spin);
EEPROM.get(115, Profile_Active.length_product);
EEPROM.get(117, Profile_Active.strong_zakr);
EEPROM.get(118, Profile_Active.nomer_profile);
EEPROM.get(119,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==10) {EEPROM.get(120,Profile_Active.time_bok); // читаем из профиля 10
EEPROM.get(122, Profile_Active.time_vert);
EEPROM.get(124, Profile_Active.delay_bok);
EEPROM.get(125,Profile_Active.delay_vert);
EEPROM.get(126, Profile_Active.delay_spin);
EEPROM.get(127, Profile_Active.length_product);
EEPROM.get(129, Profile_Active.strong_zakr);
EEPROM.get(130, Profile_Active.nomer_profile);
EEPROM.get(131,Profile_Active.regim_raboty);
}
}
void loop() {
// put your main code here, to run repeatedly:
// DEBUG_INFO("poiter= %d",pointer);
// DEBUG_INFO("ukasatel= %d",ukasatel);
// DEBUG_INFO("prigim G= %d",prigimG_status);
// DEBUG_INFO("ready_klap= %d",ready_klap);
// DEBUG_INFO("process status= %d",process_status);
// DEBUG_INFO("TCNT1= %d",TCNT1);
// DEBUG_INFO("oCR1A= %d",OCR1A);
// DEBUG_INFO("oCR1b= %d",OCR1B);
if (btn_vlevo.click())// нажата кнопка влево
{
// if (flag == 0) switch (pointer) { // описаны алгоритмы движения по меню при нажатии кнопки влево
switch (pointer) {
case 10: pointer = pointer - 10; ukasatel = 0; break;
case 11: pointer = pointer - 11; ukasatel = 0; break;
case 12: pointer = pointer - 12; ukasatel = 0; break;
case 13: pointer = pointer - 13; ukasatel = 0; break;
case 21: pointer = pointer - 20; ukasatel = 1; break;
case 22: pointer = pointer - 21; ukasatel = 1; break;
case 23: pointer = pointer - 22; ukasatel = 1; break;
case 24: pointer = pointer - 23; ukasatel = 1; break;
case 25: pointer = pointer - 24; ukasatel = 1; break;
case 26: pointer = pointer - 25; ukasatel = 1; break;
case 32:{ pointer = pointer - 30;// выход из диагностики
ukasatel = 0;
ready_klap=true;// разрешаем работу прижимов от прерываний
dvig_on=true; // включаем двигатель
prigimG_status = 0;// все прижимы выключаем
digitalWrite(pin_bok1, !prigimG_status);
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status);
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status);
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status);
break;
}
case 33: {pointer = pointer - 31;
ukasatel = 0;
ready_klap=true;
dvig_on=true;
prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status);
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status);
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status);
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status);
break;
}
case 34: {pointer = pointer - 32;
ukasatel = 0;
ready_klap=true;
dvig_on=true;
prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status);
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status);
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status);
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status);
break;
}
case 35: {pointer = pointer - 33;
ukasatel = 0;
ready_klap=true;
dvig_on=true;
prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status);
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status);
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status);
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status);
break;
}
case 36: {pointer = pointer - 34;
ukasatel = 0;
ready_klap=true;
dvig_on=true;
prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status);
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status);
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status);
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status);
break;
}
case 43: pointer = 3; ukasatel = 1; break;
case 44: pointer = 3; ukasatel = 1; break;
case 45: pointer = 3; ukasatel = 1; break;
case 54: pointer = 4; ukasatel =0;save_redakt=0; break;
case 55: pointer = 4; ukasatel =0;save_redakt=0; break;
case 121: pointer = pointer - 100; ukasatel = 0; break;
case 122: pointer = pointer - 101; ukasatel = 0; break;
case 123: pointer = pointer - 102; ukasatel = 0; break;
case 132: pointer = pointer - 100; ukasatel = 0; break;
case 133: pointer = pointer - 100; ukasatel = 1; break;
case 134: pointer = pointer - 100; ukasatel = 1; break;
case 135: pointer = pointer - 100; ukasatel = 1; break;
case 136: pointer = pointer - 101; ukasatel = 1; break;
case 137: pointer = pointer - 101; ukasatel = 0; break;
case 221: pointer = pointer - 199; ukasatel = 1; break;
case 222: pointer = pointer - 200; ukasatel = 1; break;
case 223: pointer = pointer - 201; ukasatel = 1; break;
case 225: pointer = pointer - 202; ukasatel = 0; break;
case 226: pointer = pointer - 203; ukasatel = 0; break;
case 230: pointer = pointer - 206; ukasatel = 1; break;
case 231: pointer = pointer - 207; ukasatel = 1; break;
case 232: pointer = pointer - 208; ukasatel = 1; break;
case 235: pointer = pointer - 210; ukasatel = 1; break;
case 236: pointer = pointer - 211; ukasatel = 1; break;
case 241: pointer = pointer - 215; ukasatel = 0; break;
default: break;
}
// if ((flag)&&(pointer =43)) flag=0;
//if ((flag)&& (pointer =55)) {pointer = 4; ukasatel =0;save_redakt=0;}
print_clr();
flag = 0;
is_redakt = false;
save_redakt= false;
// if ((flag)&&(pointer =43)&&(is_redakt=false)) flag=0;
}
if (btn_vpravo.click())// нажата кнопка вправо
{
if (flag == 0) switch (pointer) { // описаны алгоритмы движения по меню при нажатии кнопки вправо
case 0: pointer = pointer + 10; ukasatel = 0; break;
case 1: pointer = pointer + 20; ukasatel = 0; break;
case 2: {pointer = pointer + 30;// вход в режим диагностики
ukasatel = 0;
ready_klap=false;// запрещаем работу от прерываний
dvig_on=false; // двигатель выключаем
break;
}
case 3: pointer = pointer + 40; ukasatel = 0;save_redakt=0; break;
case 4: pointer = pointer + 50; ukasatel = 1;flag=1; break;
case 21: pointer = pointer + 100; ukasatel = 0; break;
case 22: pointer = pointer + 199; ukasatel = 0; break;
case 23: pointer = pointer + 202; ukasatel = 0; break;
case 24: pointer = pointer + 206; ukasatel = 0; break;
case 25: pointer = pointer + 210; ukasatel = 0; break;
case 26: pointer = pointer + 215; ukasatel = 0; break;
case 32: pointer = pointer + 100; ukasatel = 1; break;
case 33: pointer = pointer + 100; ukasatel = 1; break;
case 34: pointer = pointer + 100; ukasatel = 1; break;
case 35: pointer = pointer + 100; ukasatel = 0; break;
case 36: pointer = pointer + 101; ukasatel = 0; break;
default: break;
flag = 0;
is_redakt = false;
}
print_clr();
}
if (btn_vverh.click())// нажата кнопка вверх
{ // Двигаем указатель в пределах дисплея;
if ((millis() - btn_tmr) < btn_lim_tmr ) kolvo_btn++; else kolvo_btn = 0;
if (kolvo_btn > min_Kolvo_btn) btn_speed = 1; else btn_speed = 0;
btn_tmr = millis();
if (flag == 0) switch (pointer) {
// описаны алгоритмы движения по меню при нажатии кнопки вверх
case 0: pointer = 0; ukasatel = 0; break;
case 1: pointer = pointer - 1; ukasatel = 0; break;
case 2: pointer = pointer - 1; ukasatel = 1; break;
case 3: pointer = pointer - 1; ukasatel = 0; break;
case 4: pointer = pointer - 1; ukasatel = 0; break;
case 10: pointer = 10; ukasatel = 0; break;
case 11: pointer = pointer - 1; ukasatel = 0; break;
case 12: pointer = pointer - 1; ukasatel = 0; break;
// case 13: pointer = pointer - 1; ukasatel = 0; break;
case 21: pointer = 21; ukasatel = 0; break;
case 22: pointer = pointer - 1; ukasatel = 0; break;
case 23: pointer = pointer - 1; ukasatel = 1; break;
case 24: pointer = pointer - 1; ukasatel = 0; break;
case 25: pointer = pointer - 1; ukasatel = 1; break;
case 26: pointer = pointer - 1; ukasatel = 0; break;
case 32: pointer = 32; ukasatel = 0; break;
case 33: pointer = pointer - 1; ukasatel = 0; break;
case 34: pointer = pointer - 1; ukasatel = 1; break;
case 35: pointer = pointer - 1; ukasatel = 0; break;
case 36: pointer = pointer - 1; ukasatel = 1; break;
case 43: pointer = 3; ukasatel = 1; break;
// case 54: pointer = 4; ukasatel = 0; break;
// case 121: pointer = 121; ukasatel = 0; break;
// case 122: pointer = pointer - 1; ukasatel = 0; break;
// case 123: pointer = pointer - 1; ukasatel = 1; break;
case 135: pointer = 135; ukasatel = 0; break;
case 136: pointer = pointer - 1; ukasatel = 0; break;
case 221: pointer = 221; ukasatel = 0; break;
case 222: pointer = pointer - 1; ukasatel = 0; break;
case 223: pointer = pointer - 1; ukasatel = 1; break;
case 225: pointer = 225; ukasatel = 0; break;
case 226: pointer = pointer - 1; ukasatel = 0; break;
case 230: pointer = 230; ukasatel = 0; break;
case 231: pointer = pointer - 1; ukasatel = 0; break;
case 232: pointer = pointer - 1; ukasatel = 1; break;
case 235: pointer = 235; ukasatel = 0; break;
case 236: pointer = pointer - 1; ukasatel = 0; break;
default: break;
}
if (flag == 1) switch (pointer) {
// описаны алгоритмы движения по меню при нажатии кнопки вверх
case 43: if (Profile_Active.nomer_profile<max_profile) Profile_Active.nomer_profile++ ; is_redakt=1; break;
case 44: if ( save_redakt == 0) save_redakt = 1; else save_redakt = 0; break;
case 54: if ( save_redakt == 0) save_redakt = 1; else save_redakt = 0; break;
// case 121: if ( set_pedal == 0) set_pedal = 1; else set_pedal = 0; break;
// case 122: if ( akt_level == 0) {
// akt_level = 1;
// EICRA = (1 << ISC11) | (1 << ISC01) | (1 << ISC00);
// }
// else {
// akt_level = 0;
// EICRA = (1 << ISC11) | (1 << ISC01);
// }
// case 123: if (delay_block < debonce_max) delay_block ++; break;
case 132: {// управляем прижимами прямое включение без разрешения
if ( prigimG_status == 0) {
prigimG_status = 1;
digitalWrite(pin_bok1, !prigimG_status); // выход в статус
}
else {
prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status); // выход в статус
}
break;
}
case 133: {
if ( prigimV_status == 0) {
prigimV_status = 1;
digitalWrite(pin_vert, !prigimV_status); // выход в статус
}
else {
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status); // выход в статус
}
break;
}
case 134: {
//digitalWrite(pin_vert, prigimV_status); // выход в статус
if ( prigimZ_status == 0) {
prigimZ_status = 1;
digitalWrite(pin_zakr, !prigimZ_status); // выход в статус
}
else {
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status); // выход в статус
}
break;
}
case 135: if ( dvig_on == 0) {
// TIMSK2 |= (1 << OCIE2A);
dvig_on = 1;
}
else {
// TIMSK2 &= ~(1 << OCIE2A);
dvig_on = 0;
digitalWrite(pin_shim, 0);
}
break;
case 136: if (Profile_Active.strong_zakr < strong_max) {
if (btn_speed) Profile_Active.strong_zakr = Profile_Active.strong_zakr + 5;
else Profile_Active.strong_zakr++;
}
break;
case 137: {
if ( prigimO_status == 0) {
prigimO_status = 1;
digitalWrite(pin_ots, !prigimO_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
else {
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
break;
}
case 221: if (Profile_Active.time_bok < max_Boktime) {
if (btn_speed) Profile_Active.time_bok = Profile_Active.time_bok + 10;
else Profile_Active.time_bok++;
}
break;
case 222: if (Profile_Active.delay_vert < max_Vertdelay) {
if (btn_speed) Profile_Active.delay_vert = Profile_Active.delay_vert + 10;
else Profile_Active.delay_vert++;
}
break;
case 223: if ( Profile_Active.regim_raboty&(1<<1)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<1));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<1);
break;
case 225: if (Profile_Active.delay_bok < max_Bokdelay) {
if (btn_speed) Profile_Active.delay_bok = Profile_Active.delay_bok + 10;
else Profile_Active.delay_bok++;
}
break;
case 226: if ( Profile_Active.regim_raboty&(1<<2)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<2));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<2);
break;
case 230: if (Profile_Active.delay_spin < max_Spindelay) {
if (btn_speed) Profile_Active.delay_spin = Profile_Active.delay_spin + 10;
else
Profile_Active.delay_spin ++;
}
break;
case 231: if (Profile_Active.time_vert < max_Verttime) {
if (btn_speed) Profile_Active.time_vert = Profile_Active.time_vert + 10;
else
Profile_Active.time_vert++;
}
break;
case 232: if ( Profile_Active.regim_raboty&(1<<3)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<3));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<3);
break;
case 235: if (Profile_Active.length_product < max_length) {
if (btn_speed) Profile_Active.length_product = Profile_Active.length_product + 10;
else
Profile_Active.length_product++;
}
break;
case 236: if ( Profile_Active.regim_raboty&(1<<0)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<0));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<0);
break;
//length_product
case 241: if (Profile_Active.strong_zakr < strong_max) {
if (btn_speed) Profile_Active.strong_zakr =Profile_Active.strong_zakr + 5;
else Profile_Active. strong_zakr++;
// OCR2A = map(strong_zakr, strong_min, strong_max, osr_max, osr_min);
}
break;
default: break;
}
// flag = 0;
// is_redakt = false;
if (flag == 0) print_clr();
}
if (btn_vniz.click())// нажата кнопка вниз
{ if ((millis() - btn_tmr) < btn_lim_tmr ) kolvo_btn++; else kolvo_btn = 0;
if (kolvo_btn > min_Kolvo_btn) btn_speed = 1; else btn_speed = 0;
btn_tmr = millis();
if (flag == 0) switch (pointer) {
// описаны алгоритмы движения по меню при нажатии кнопки вниз
case 0: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 1: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 2: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 3: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 4: {
pointer = 4;
ukasatel = 0;
break;
}
case 10: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 11: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 12: {
pointer = 12;
ukasatel = 0;
break;
}
case 21: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 22: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 23: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 24: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 25: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 26: {
pointer = 26;
ukasatel = 0;
break;
}
case 32: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 33: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 34: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 35: {
pointer = pointer + 1;;
ukasatel = 1;
break;
}
case 36: {
pointer = 36;
ukasatel = 0;
break;
}
// case 121: {
// pointer = 121;
// ukasatel = 0;
// break;
// }
//case 122: {
// pointer = pointer + 1;
// ukasatel = 0;
// break;
// }
//case 123: {
// pointer = 123;
// ukasatel = 0;
// break;
// }
case 135: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 136: {
pointer = 136;
ukasatel = 1;
break;
}
case 221: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 222: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 223: {
pointer = 223;
ukasatel = 0;
break;
}
case 225: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 226: {
pointer = 226;
ukasatel = 1;
break;
}
case 230: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 231: {
pointer = pointer + 1;
ukasatel = 0;
break;
}
case 232: {
pointer = 232;
ukasatel = 0;
break;
}
case 235: {
pointer = pointer + 1;
ukasatel = 1;
break;
}
case 236: {
pointer =236;
ukasatel = 1;
break;
}
default: break;
}
if (flag == 1) switch (pointer) {
// описаны алгоритмы движения по меню при нажатии кнопки вниз
case 43: if (Profile_Active.nomer_profile>0) Profile_Active.nomer_profile--; is_redakt = 1 ; break;
case 44: if ( save_redakt == 0) save_redakt = 1; else save_redakt = 0; break;
case 54: if ( save_redakt == 0) save_redakt = 1; else save_redakt = 0; break;
// case 121: if ( set_pedal == 0) set_pedal = 1; else set_pedal = 0; break;
// case 122: if ( akt_level == 0) {
// akt_level = 1;
// EICRA = (1 << ISC11) | (1 << ISC01) | (1 << ISC00);
// }
// else {
// akt_level = 0;
// EICRA = (1 << ISC11) | (1 << ISC01);
// }
// break;
//case 123: if (delay_block > debonce_min) delay_block --; break;
case 132: {
// TIMSK1 = 0; // запрещаем все прерывания от таймера Т1
// TCCR1B = 0; // останавливаем счетчик
// TCNT1 = 0; // обнуляем значение
if ( prigimG_status == 0) {
prigimG_status = 1;
digitalWrite(pin_bok1, !prigimG_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
else
{ prigimG_status = 0;
digitalWrite(pin_bok1, !prigimG_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
break;
}
case 133: {
// TIMSK1 = 0; // запрещаем все прерывания от таймера Т1
// TCCR1B = 0; // останавливаем счетчик
// TCNT1 = 0; // обнуляем значение
if ( prigimV_status == 0) {
prigimV_status = 1;
digitalWrite(pin_vert, !prigimV_status); // выход в статус
}
else {
prigimV_status = 0;
digitalWrite(pin_vert, !prigimV_status); // выход в статус
}
break;
}
case 134: {
// TIMSK1 = 0; // запрещаем все прерывания от таймера Т1
// TCCR1B = 0; // останавливаем счетчик
// TCNT1 = 0; // обнуляем значение
if ( prigimZ_status == 0) {
prigimZ_status = 1;
digitalWrite(pin_zakr, !prigimZ_status); // выход в статус
}
else {
prigimZ_status = 0;
digitalWrite(pin_zakr, !prigimZ_status); // выход в статус
}
break;
}
case 135: if ( dvig_on == 0) {
// TIMSK2 |= (1 << OCIE2A);
dvig_on = 1;
}
else {
// TIMSK2 &= ~(1 << OCIE2A);
dvig_on = 0;
digitalWrite(pin_shim, 0);
}
break;
case 136: if (Profile_Active.strong_zakr > strong_min) {
if (btn_speed) Profile_Active.strong_zakr = Profile_Active.strong_zakr - 5;
else Profile_Active.strong_zakr--;
}
break;
case 137: {
// TIMSK1 = 0; // запрещаем все прерывания от таймера Т1
// TCCR1B = 0; // останавливаем счетчик
// TCNT1 = 0; // обнуляем значение
if ( prigimO_status == 0) {
prigimO_status = 1;
digitalWrite(pin_ots, !prigimO_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
else {
prigimO_status = 0;
digitalWrite(pin_ots, !prigimO_status); // выход в статус
// digitalWrite(pin_bok2, !prigimG_status);
}
break;
}
case 221: if (Profile_Active.time_bok > min_Boktime) {
if (btn_speed) Profile_Active.time_bok = Profile_Active.time_bok - 10;
else Profile_Active.time_bok--;
}
break;
case 222: if (Profile_Active.delay_vert > min_Vertdelay) {
if (btn_speed) Profile_Active.delay_vert = Profile_Active.delay_vert - 10;
else Profile_Active.delay_vert--;
}
break;
case 223: if ( Profile_Active.regim_raboty&(1<<1)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<1));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<1);
break;
case 225: if (Profile_Active.delay_bok > min_Bokdelay) {
if (btn_speed) Profile_Active.delay_bok = Profile_Active.delay_bok - 10;
else Profile_Active.delay_bok--;
}
break;
case 226: if ( Profile_Active.regim_raboty&(1<<2)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<2));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<2);
break;
case 230: if (Profile_Active.delay_spin> min_Spindelay) {
if (btn_speed) Profile_Active.delay_spin= Profile_Active.delay_spin- 10;
else Profile_Active.delay_spin--;
}
break;
case 231: if (Profile_Active.time_vert> min_Verttime) {
if (btn_speed) Profile_Active.time_vert= Profile_Active.time_vert- 10;
else Profile_Active.time_vert--;
}
break;
case 232: if ( Profile_Active.regim_raboty&(1<<3)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<3));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<3);
break;
case 235: if (Profile_Active.length_product> min_length) {
if (btn_speed) Profile_Active.length_product= Profile_Active.length_product- 10;
else Profile_Active.length_product--;
}
break;
case 236: if ( Profile_Active.regim_raboty&(1<<0)) Profile_Active.regim_raboty=Profile_Active.regim_raboty&(~(1<<0));
else Profile_Active.regim_raboty=Profile_Active.regim_raboty|(1<<0);
break;
case 241: if (Profile_Active.strong_zakr > strong_min) {
if (btn_speed) Profile_Active.strong_zakr = Profile_Active.strong_zakr - 5;
else Profile_Active.strong_zakr--;
// OCR2A = map(strong_zakr, strong_min, strong_max, osr_max, osr_min);
}
break;
default: break;
}
//flag = 0;
//is_redakt = false;
if (flag == 0) print_clr();
}
if (btn_enter.click())// открываем пункт
{
if (ukasatel == 0 && is_redakt) {
lcd.setCursor(15, 0);
lcd.print("<");
flag = true;
}
if (ukasatel == 1 && is_redakt) {
lcd.setCursor(15, 1);
lcd.print("<");
flag = true;
}
if ((is_redakt== true)&&(pointer==43)) //сохранение изменений настроек
{
pointer++;
is_redakt =false;
ukasatel = 1;
}
if ((is_redakt == 1)&&(pointer==44)&&(save_redakt == 1)) //загрузка профиля
{ pointer++;
EEPROM.write(ADDR_PROFILE,Profile_Active.nomer_profile);
if (Profile_Active.nomer_profile==0) {EEPROM.get(0,Profile_Active.time_bok); // читаем из профиля 0
EEPROM.get(2, Profile_Active.time_vert);
EEPROM.get(4, Profile_Active.delay_bok);
EEPROM.get(5,Profile_Active.delay_vert);
EEPROM.get(6, Profile_Active.delay_spin);
EEPROM.get(7, Profile_Active.length_product);
EEPROM.get(9, Profile_Active.strong_zakr);
EEPROM.get(10, Profile_Active.nomer_profile);
EEPROM.get(11,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==1) { EEPROM.get(12,Profile_Active.time_bok); // читаем из профиля 1
EEPROM.get(14,Profile_Active.time_vert);
EEPROM.get(16, Profile_Active.delay_bok);
EEPROM.get(17,Profile_Active.delay_vert);
EEPROM.get(18, Profile_Active.delay_spin);
EEPROM.get(19, Profile_Active.length_product);
EEPROM.get(21, Profile_Active.strong_zakr);
EEPROM.get(22, Profile_Active.nomer_profile);
EEPROM.get(23,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==2) { EEPROM.get(24,Profile_Active.time_bok); // читаем из профиля 2
EEPROM.get(26,Profile_Active.time_vert);
EEPROM.get(28, Profile_Active.delay_bok);
EEPROM.get(29,Profile_Active.delay_vert);
EEPROM.get(30, Profile_Active.delay_spin);
EEPROM.get(31, Profile_Active.length_product);
EEPROM.get(33, Profile_Active.strong_zakr);
EEPROM.get(34, Profile_Active.nomer_profile);
EEPROM.get(35,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==3) { EEPROM.get(36,Profile_Active.time_bok); // читаем из профиля 3
EEPROM.get(38,Profile_Active.time_vert);
EEPROM.get(40, Profile_Active.delay_bok);
EEPROM.get(41,Profile_Active.delay_vert);
EEPROM.get(42, Profile_Active.delay_spin);
EEPROM.get(43, Profile_Active.length_product);
EEPROM.get(45, Profile_Active.strong_zakr);
EEPROM.get(46, Profile_Active.nomer_profile);
EEPROM.get(47,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==4) { EEPROM.get(48,Profile_Active.time_bok); // читаем из профиля 4
EEPROM.get(50,Profile_Active.time_vert);
EEPROM.get(52, Profile_Active.delay_bok);
EEPROM.get(53,Profile_Active.delay_vert);
EEPROM.get(54, Profile_Active.delay_spin);
EEPROM.get(55, Profile_Active.length_product);
EEPROM.get(57, Profile_Active.strong_zakr);
EEPROM.get(58, Profile_Active.nomer_profile);
EEPROM.get(59,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==5) { EEPROM.get(60,Profile_Active.time_bok); // читаем из профиля 5
EEPROM.get(62,Profile_Active.time_vert);
EEPROM.get(64, Profile_Active.delay_bok);
EEPROM.get(65,Profile_Active.delay_vert);
EEPROM.get(66, Profile_Active.delay_spin);
EEPROM.get(67, Profile_Active.length_product);
EEPROM.get(69, Profile_Active.strong_zakr);
EEPROM.get(70, Profile_Active.nomer_profile);
EEPROM.get(71,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==6) { EEPROM.get(72,Profile_Active.time_bok); // читаем из профиля 6
EEPROM.get(74,Profile_Active.time_vert);
EEPROM.get(76, Profile_Active.delay_bok);
EEPROM.get(77,Profile_Active.delay_vert);
EEPROM.get(78, Profile_Active.delay_spin);
EEPROM.get(79, Profile_Active.length_product);
EEPROM.get(81, Profile_Active.strong_zakr);
EEPROM.get(82, Profile_Active.nomer_profile);
EEPROM.get(83,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==7) { EEPROM.get(84,Profile_Active.time_bok); // читаем из профиля 7
EEPROM.get(86,Profile_Active.time_vert);
EEPROM.get(88, Profile_Active.delay_bok);
EEPROM.get(89,Profile_Active.delay_vert);
EEPROM.get(90, Profile_Active.delay_spin);
EEPROM.get(91, Profile_Active.length_product);
EEPROM.get(93, Profile_Active.strong_zakr);
EEPROM.get(94, Profile_Active.nomer_profile);
EEPROM.get(95,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==8) { EEPROM.get(96,Profile_Active.time_bok); // читаем из профиля 8
EEPROM.get(98,Profile_Active.time_vert);
EEPROM.get(100, Profile_Active.delay_bok);
EEPROM.get(101,Profile_Active.delay_vert);
EEPROM.get(102, Profile_Active.delay_spin);
EEPROM.get(103, Profile_Active.length_product);
EEPROM.get(105, Profile_Active.strong_zakr);
EEPROM.get(106, Profile_Active.nomer_profile);
EEPROM.get(107,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==9) { EEPROM.get(108,Profile_Active.time_bok); // читаем из профиля 9
EEPROM.get(110,Profile_Active.time_vert);
EEPROM.get(112, Profile_Active.delay_bok);
EEPROM.get(113,Profile_Active.delay_vert);
EEPROM.get(114, Profile_Active.delay_spin);
EEPROM.get(115, Profile_Active.length_product);
EEPROM.get(117, Profile_Active.strong_zakr);
EEPROM.get(118, Profile_Active.nomer_profile);
EEPROM.get(119,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==10) {EEPROM.get(120,Profile_Active.time_bok); // читаем из профиля 10
EEPROM.get(122, Profile_Active.time_vert);
EEPROM.get(124, Profile_Active.delay_bok);
EEPROM.get(125,Profile_Active.delay_vert);
EEPROM.get(126, Profile_Active.delay_spin);
EEPROM.get(127, Profile_Active.length_product);
EEPROM.get(129, Profile_Active.strong_zakr);
EEPROM.get(130, Profile_Active.nomer_profile);
EEPROM.get(131,Profile_Active.regim_raboty);
}
flag = 0;
save_redakt = 0;
}
if ((save_redakt == 1)&&(pointer==54)) //сохранение изменений настроек
{ pointer++;
if (Profile_Active.nomer_profile==0) {EEPROM.put(0,Profile_Active.time_bok); // пишем в профиль 0
EEPROM.put(2, Profile_Active.time_vert);
EEPROM.put(4, Profile_Active.delay_bok);
EEPROM.put(5,Profile_Active.delay_vert);
EEPROM.put(6, Profile_Active.delay_spin);
EEPROM.put(7, Profile_Active.length_product);
EEPROM.put(9, Profile_Active.strong_zakr);
EEPROM.put(10, Profile_Active.nomer_profile);
EEPROM.put(11,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==1) {EEPROM.put(12,Profile_Active.time_bok); // пишем в профиль 1
EEPROM.put(14, Profile_Active.time_vert);
EEPROM.put(16, Profile_Active.delay_bok);
EEPROM.put(17,Profile_Active.delay_vert);
EEPROM.put(18, Profile_Active.delay_spin);
EEPROM.put(19, Profile_Active.length_product);
EEPROM.put(21, Profile_Active.strong_zakr);
EEPROM.put(22, Profile_Active.nomer_profile); EEPROM.put(23,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==2) {EEPROM.put(24,Profile_Active.time_bok); // пишем в профиль 2
EEPROM.put(26, Profile_Active.time_vert);
EEPROM.put(28, Profile_Active.delay_bok);
EEPROM.put(29,Profile_Active.delay_vert);
EEPROM.put(30, Profile_Active.delay_spin);
EEPROM.put(31, Profile_Active.length_product);
EEPROM.put(33, Profile_Active.strong_zakr);
EEPROM.put(34, Profile_Active.nomer_profile);
EEPROM.put(35,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==3) {EEPROM.put(36,Profile_Active.time_bok); // пишем в профиль 3
EEPROM.put(38, Profile_Active.time_vert);
EEPROM.put(40, Profile_Active.delay_bok);
EEPROM.put(41,Profile_Active.delay_vert);
EEPROM.put(42, Profile_Active.delay_spin);
EEPROM.put(43, Profile_Active.length_product);
EEPROM.put(45, Profile_Active.strong_zakr);
EEPROM.put(46, Profile_Active.nomer_profile);
EEPROM.put(47,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==4) {EEPROM.put(48,Profile_Active.time_bok); // пишем в профиль 4
EEPROM.put(50, Profile_Active.time_vert);
EEPROM.put(52, Profile_Active.delay_bok);
EEPROM.put(53,Profile_Active.delay_vert);
EEPROM.put(54, Profile_Active.delay_spin);
EEPROM.put(55, Profile_Active.length_product);
EEPROM.put(57, Profile_Active.strong_zakr);
EEPROM.put(58, Profile_Active.nomer_profile);
EEPROM.put(59,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==5) {EEPROM.put(60,Profile_Active.time_bok); // пишем в профиль 5
EEPROM.put(62, Profile_Active.time_vert);
EEPROM.put(64, Profile_Active.delay_bok);
EEPROM.put(65,Profile_Active.delay_vert);
EEPROM.put(66, Profile_Active.delay_spin);
EEPROM.put(67, Profile_Active.length_product);
EEPROM.put(69, Profile_Active.strong_zakr);
EEPROM.put(70, Profile_Active.nomer_profile);
EEPROM.put(71,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==6) {EEPROM.put(72,Profile_Active.time_bok); // пишем в профиль 6
EEPROM.put(74, Profile_Active.time_vert);
EEPROM.put(76, Profile_Active.delay_bok);
EEPROM.put(77,Profile_Active.delay_vert);
EEPROM.put(78, Profile_Active.delay_spin);
EEPROM.put(79, Profile_Active.length_product);
EEPROM.put(81, Profile_Active.strong_zakr);
EEPROM.put(82, Profile_Active.nomer_profile);
EEPROM.put(83,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==7) {EEPROM.put(84,Profile_Active.time_bok); // пишем в профиль 7
EEPROM.put(86, Profile_Active.time_vert);
EEPROM.put(88, Profile_Active.delay_bok);
EEPROM.put(89,Profile_Active.delay_vert);
EEPROM.put(90, Profile_Active.delay_spin);
EEPROM.put(91, Profile_Active.length_product);
EEPROM.put(93, Profile_Active.strong_zakr);
EEPROM.put(94, Profile_Active.nomer_profile);
EEPROM.put(95,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==8) {EEPROM.put(96,Profile_Active.time_bok); // пишем в профиль 8
EEPROM.put(98, Profile_Active.time_vert);
EEPROM.put(100, Profile_Active.delay_bok);
EEPROM.put(101,Profile_Active.delay_vert);
EEPROM.put(102, Profile_Active.delay_spin);
EEPROM.put(103, Profile_Active.length_product);
EEPROM.put(105, Profile_Active.strong_zakr);
EEPROM.put(106, Profile_Active.nomer_profile);
EEPROM.put(107,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==9) {EEPROM.put(108,Profile_Active.time_bok); // пишем в профиль 9
EEPROM.put(110, Profile_Active.time_vert);
EEPROM.put(112, Profile_Active.delay_bok);
EEPROM.put(113,Profile_Active.delay_vert);
EEPROM.put(114, Profile_Active.delay_spin);
EEPROM.put(115, Profile_Active.length_product);
EEPROM.put(117, Profile_Active.strong_zakr);
EEPROM.put(118, Profile_Active.nomer_profile);
EEPROM.put(119,Profile_Active.regim_raboty);
}
if (Profile_Active.nomer_profile==10) {EEPROM.put(120,Profile_Active.time_bok); // пишем в профиль 9
EEPROM.put(122, Profile_Active.time_vert);
EEPROM.put(124, Profile_Active.delay_bok);
EEPROM.put(125,Profile_Active.delay_vert);
EEPROM.put(126, Profile_Active.delay_spin);
EEPROM.put(127, Profile_Active.length_product);
EEPROM.put(129, Profile_Active.strong_zakr);
EEPROM.put(130, Profile_Active.nomer_profile);
EEPROM.put(131,Profile_Active.regim_raboty);
}
flag = 0;
save_redakt = 0;
}
}// открываем пункт
switch (pointer) { // По номеру указателей располагаем вложенные функции (можно вложенные меню)
case 0: {
lcd.setCursor(0, 0);
lcd.print(F(">")); // Вывод указателя
lcd.print(F("статус ->")) ;
lcd.setCursor(1, 1);
lcd.print(F("настройки "));
break;
}
case 1: {
lcd.setCursor(0, 0);
lcd.print(F(" статус ")); // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("настройки ->"));
break;
}
case 2: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("диагностика ->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" загрузить "));
break;
}
case 3: {
lcd.setCursor(0, 0);
lcd.print(F(" диагностика ")); // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("загрузить ->"));
break;
}
case 4: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("сохранить ->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" "));
//lcd.print(pointer,DEC);
break;
}
case 10: {
lcd.setCursor(0, 0);
//lcd.print(F(">"));
lcd.print(F("Датчик:")) ; // Вывод всех пунктов
print_bool(datchik_status);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F("Губки:"));
print_bool(prigimG_status);
lcd.print(F(" "));
break;
}
case 11: {
lcd.setCursor(0, 0);
// lcd.print(F(">"));
lcd.print(F("Верт прижим:")) ; // Вывод всех пунктов
print_bool(prigimV_status);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F("Ролики:"));
print_bool(prigimZ_status);
lcd.print(F(" "));
break;
}
case 12: {
lcd.setCursor(0, 0);
// lcd.print(F(">"));
lcd.print(F("Отсекатель:")) ;
print_bool(prigimO_status);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F("T_d:"));
uint16_t summ = 0;
for (int i = 0; i < 5; i++)
{
summ = summ + mass[i];
}
lcd.print(summ / 5, DEC);
lcd.print(F(" OCR:"));
lcd.print(uint8_t(OCR2A), DEC);
break;
}
case 21: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Продукт ->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" Губки "));
is_redakt = false;
break;
}
case 22: {
lcd.setCursor(0, 0);
lcd.print(F(" Продукт ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Губки ->"));
is_redakt = false;
break;
}
case 23: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Верт.прижим >")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" Ролики "));
//lcd.print((uint8_t)strong_zakr);
lcd.print(F(" "));
is_redakt = false;
break;
}
case 24: {
lcd.setCursor(0, 0);
lcd.print(F(" Верт.прижим ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Ролики ->"));
//lcd.print((uint8_t)strong_zakr);
lcd.print(F(" "));
is_redakt = false;
break;
}
case 25: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Отсекатель ->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" Мотор "));
//lcd.print((uint8_t)strong_zakr);
lcd.print(F(" "));
is_redakt = false;
break;
}
case 26: {
lcd.setCursor(0, 0);
lcd.print(F(" Отсекатель ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Мотор ->"));
//lcd.print((uint8_t)strong_zakr);
lcd.print(F(" "));
is_redakt = false;
break;
}
case 32: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Губки->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" Вертик прижим ")) ;
// TIMSK1 = (1 << OCIE1A) | (1 << OCIE1B) | (1 << TOIE1);
break;
}
case 33: {
lcd.setCursor(0, 0);
lcd.print(F(" Губки ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Вертик прижим->")) ;
//TIMSK1 = (1 << OCIE1A) | (1 << OCIE1B) | (1 << TOIE1);
break;
}
case 34: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Ролики ->")) ; // Вывод всех пунктов
// print_bool(dvig_on);
lcd.setCursor(0, 1);
lcd.print(F(" Мотор")) ;
//lcd.print(strong_zakr);
lcd.print(F(" "));
// is_redakt = true;
break;
}
case 35: {
lcd.setCursor(0, 0);
lcd.print(F(" Ролики ")) ; // Вывод всех пунктов
//print_bool(dvig_on);
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Мотор ->")) ;
// lcd.print(strong_zakr);
lcd.print(F(" "));
// is_redakt = true;
break;
}
case 36: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Отсекатель ->")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(" ")) ;
break;
}
case 43: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
// lcd.print(F("N")) ; // Вывод всех пунктов
lcd.print(Profile_Active.nomer_profile,DEC);
lcd.print(F("-")) ;
if (Profile_Active.nomer_profile==0) lcd.print(F("CARE365 445ml"));
if (Profile_Active.nomer_profile==1) lcd.print(F("КУПАЖЪ 300ml "));
if (Profile_Active.nomer_profile==2) lcd.print(F("Profline200ml"));
if (Profile_Active.nomer_profile==3) lcd.print(F("Professional "));
if (Profile_Active.nomer_profile==4) lcd.print(F("Vito's 1000ml"));
if (Profile_Active.nomer_profile==5) lcd.print(F("Банан/Берри "));
if (Profile_Active.nomer_profile==6) lcd.print(F("Bi max 400ml "));
if (Profile_Active.nomer_profile==7) lcd.print(F("Миц.вода 7в1 "));
if (Profile_Active.nomer_profile==8) lcd.print(F("Vitanica 3в1 "));
if (Profile_Active.nomer_profile==9) lcd.print(F("Delicare Milk"));
if (Profile_Active.nomer_profile==10) lcd.print(F("Название 1 "));
lcd.setCursor(0, 1);
if (Profile_Active.nomer_profile==0) lcd.print(F("Sensi-re Coctail"));
if (Profile_Active.nomer_profile==1) lcd.print(F(" "));
if (Profile_Active.nomer_profile==2) lcd.print(F("Сочный манго "));
if (Profile_Active.nomer_profile==3) lcd.print(F("Care 500 ml "));
if (Profile_Active.nomer_profile==4) lcd.print(F("Кератин протеин "));
if (Profile_Active.nomer_profile==5) lcd.print(F("крем мыло 1000ml"));
if (Profile_Active.nomer_profile==6) lcd.print(F("Жидкий утюг "));
if (Profile_Active.nomer_profile==7) lcd.print(F("С гиалуроном650m"));
if (Profile_Active.nomer_profile==8) lcd.print(F("гель с масл200ml"));
if (Profile_Active.nomer_profile==9) lcd.print(F("&Silk "));
if (Profile_Active.nomer_profile==10) lcd.print(F("свои настройки "));
flag=true;
//is_redakt = false;
break;
}
case 44: {
lcd.setCursor(0, 0);
lcd.print(F(" Вы уверены: ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
if (save_redakt) lcd.print(F("да ")); else lcd.print(F("нет "));
//print_bool(save_redakt);
// lcd.print(F(" "));
is_redakt = true;
break;
}
case 45: {
lcd.setCursor(0, 0);
lcd.print(F(" Вы уверены: ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">Успешно "));
is_redakt = false;
break;
}
case 54: {
lcd.setCursor(0, 0);
lcd.print(F(" Вы уверены: ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
if (save_redakt) lcd.print(F("да ")); else lcd.print(F("нет "));
is_redakt = true;
break;
}
case 55: {
lcd.setCursor(0, 0);
lcd.print(F(" Вы уверены: ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">Успешно "));
is_redakt = false;
break;
}
case 121: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
//lcd.print(F("")) ; // Вывод всех пунктов
lcd.print(Profile_Active.nomer_profile,DEC);
lcd.print(F("-")) ;
if (Profile_Active.nomer_profile==0) lcd.print(F("CARE365 445ml"));
if (Profile_Active.nomer_profile==1) lcd.print(F("Купажъ 300ml"));
if (Profile_Active.nomer_profile==2) lcd.print(F("Profline200ml"));
if (Profile_Active.nomer_profile==3) lcd.print(F("Professional "));
if (Profile_Active.nomer_profile==4) lcd.print(F("Vito's 1000ml"));
if (Profile_Active.nomer_profile==5) lcd.print(F("Банан/Берри "));
if (Profile_Active.nomer_profile==6) lcd.print(F("BiMax 400ml "));
if (Profile_Active.nomer_profile==7) lcd.print(F("Миц.вода 7в1 "));
if (Profile_Active.nomer_profile==8) lcd.print(F("Vitanica 3в1 "));
if (Profile_Active.nomer_profile==9) lcd.print(F("Delicare Milk"));
if (Profile_Active.nomer_profile==10) lcd.print(F("Название 1 "));
lcd.setCursor(0, 1);
if (Profile_Active.nomer_profile==0) lcd.print(F("Sensi-re Coctail"));
if (Profile_Active.nomer_profile==1) lcd.print(F(" "));
if (Profile_Active.nomer_profile==2) lcd.print(F("Сочный манго "));
if (Profile_Active.nomer_profile==3) lcd.print(F("Care 500 ml "));
if (Profile_Active.nomer_profile==4) lcd.print(F("Кератин протеин"));
if (Profile_Active.nomer_profile==5) lcd.print(F("крем мыло 1000ml"));
if (Profile_Active.nomer_profile==6) lcd.print(F("Жидкий утюг "));
if (Profile_Active.nomer_profile==7) lcd.print(F("С гиалуроном650m"));
if (Profile_Active.nomer_profile==8) lcd.print(F("гель с масл200ml"));
if (Profile_Active.nomer_profile==9) lcd.print(F("&Silk "));
if (Profile_Active.nomer_profile==10) lcd.print(F("свои настройки "));
is_redakt = false;
break;
}
// case 122: {
// lcd.setCursor(0, 0);
//
// lcd.print(F(" Номер:")) ; // Вывод всех пунктов
// lcd.print(Profile_Active.nomer_profile,DEC);
//
// lcd.setCursor(0, 1);
//
// lcd.print(F(">Название:")) ;
//
// is_redakt = true;
// break;
// }
// case 123: {
// lcd.setCursor(0, 0);
// lcd.print(F(">"));
// lcd.print(F("Детект:")) ; // Вывод всех пунктов
// lcd.print(delay_block,DEC);
lcd.print(F(" ")) ;
lcd.setCursor(0, 1);
lcd.print(F(" "));
is_redakt = true;
break;
// }
case 132: {
lcd.setCursor(1, 0);
lcd.print(F("Губки ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
print_bool(prigimG_status);
is_redakt = true;
break;
}
case 133: {
lcd.setCursor(1, 0);
lcd.print(F("Верт прижим ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
print_bool(prigimV_status);
is_redakt = true;
break;
}
case 134: {
lcd.setCursor(1, 0);
lcd.print(F("Ролики ")) ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(F(">"));
print_bool(prigimZ_status);
is_redakt = true;
break;
}
case 135: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Двигатель:")) ; // Вывод всех пунктов
print_bool(dvig_on);
lcd.setCursor(0, 1);
// lcd.print(F(" "));
lcd.print(F(" Усилие:")) ;
lcd.print(Profile_Active.strong_zakr,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 136: {
lcd.setCursor(0, 0);
//lcd.print(F(">"));
lcd.print(F(" Двигатель:")) ; // Вывод всех пунктов
print_bool(dvig_on);
lcd.setCursor(0, 1);
// lcd.print(F(" "));
lcd.print(F(">"));
lcd.print(F("Усилие:")) ;
lcd.print(Profile_Active.strong_zakr,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 137: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Отсекатель:")) ; // Вывод всех пунктов
print_bool(prigimO_status);
lcd.setCursor(0, 1);
// lcd.print(F(" "));
// lcd.print(F(">"));
lcd.print(F(" ")) ;
is_redakt = true;
break;
}
case 221: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Задержка:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.time_bok,DEC);
//lcd.print(pointer,DEC);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F(" Удержание:"));
lcd.print(Profile_Active.delay_vert,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 222: {
lcd.setCursor(0, 0);
lcd.print(F(" Задержка:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.time_bok,DEC);
// lcd.print(pointer,DEC);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Удержание:"));
lcd.print(Profile_Active.delay_vert,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 223: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Активно:"));
if (Profile_Active.regim_raboty&(1<<1)) lcd.print(F("да ")); else lcd.print(F("нет"));
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 225: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Задержка:"));
lcd.print(Profile_Active.delay_bok,DEC);
lcd.print(F(" "));
lcd.setCursor(0, 1);
//lcd.print(Profile_Active.delay_vert,DEC);
lcd.print(F(" Активно:"));
if (Profile_Active.regim_raboty&(1<<2)) lcd.print(F("да ")); else lcd.print(F("нет"));
lcd.print(F(" "));
is_redakt = true;
break;
}
case 226: {
lcd.setCursor(0, 0);
lcd.print(F(" Задержка:"));
lcd.print(Profile_Active.delay_bok,DEC);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Активно:"));
if (Profile_Active.regim_raboty&(1<<2)) lcd.print(F("да ")); else lcd.print(F("нет"));
lcd.print(F(" "));
is_redakt = true;
break;
}
case 230: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Задержка:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.delay_spin,DEC);
lcd.print(F(" "));
// lcd.print(pointer);
lcd.setCursor(0, 1);
lcd.print(F(" Время:"));
lcd.print(Profile_Active.time_vert,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 231: {
lcd.setCursor(0, 0);
lcd.print(F(" Задержка:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.delay_spin,DEC);
lcd.print(F(" "));
// lcd.print(pointer);
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Время:"));
lcd.print(Profile_Active.time_vert,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 232: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Активно:")) ; // Вывод всех пунктов
if (Profile_Active.regim_raboty&(1<<3)) lcd.print(F("да ")); else lcd.print(F("нет"));
lcd.print(F(" "));
// lcd.print(pointer);
lcd.setCursor(0, 1);
lcd.print(F(" "));
is_redakt = true;
break;
}
case 235: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Длина:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.length_product,DEC);
lcd.print(F(" ")) ;
lcd.setCursor(0, 1);
lcd.print(F(" Активно:")) ;
if (Profile_Active.regim_raboty&(1<<0)) lcd.print(F("да ")); else lcd.print(F("нет"));
is_redakt = true;
break;
}
case 236: {
lcd.setCursor(0, 0);
lcd.print(F(" Длина:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.length_product,DEC);
lcd.print(F(" ")) ;
lcd.setCursor(0, 1);
lcd.print(F(">"));
lcd.print(F("Активно:")) ;
if (Profile_Active.regim_raboty&(1<<0)) lcd.print(F("да ")); else lcd.print(F("нет"));
is_redakt = true;
break;
}
case 241: {
lcd.setCursor(0, 0);
lcd.print(F(">"));
lcd.print(F("Усилие:")) ; // Вывод всех пунктов
lcd.print(Profile_Active.strong_zakr,DEC);
lcd.print(F(" "));
is_redakt = true;
break;
}
default: break;
}
}
void print_clr(void) {
lcd.setCursor(0, 0);
lcd.print(" ") ; // Вывод всех пунктов
lcd.setCursor(0, 1);
lcd.print(" ");
}
void print_bool(bool i) {
if (i) lcd.print(F("on ")); else lcd.print(F("off"));
}