Энкодер изменяет переменную там, где не должен

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@Сотнег,а не подскажите как вывести в порт однократно?

@bort707,кстати нашёл вот такую "Си для встраиваемых систем". Заказал, скоро приедет ))))
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
@bort707,кстати нашёл вот такую "Си для встраиваемых систем". Заказал, скоро приедет ))))
не уверен, нужны ли вам "встраиваемые системы" (кстати, что это ?:) - в сети сотни книг и пособий по языку совершенно бесплатно.
Посоветую почитать курс на ravesli.com - правда туда теперь из рф нужен впн, но оно того стоит. Очень хороший материал.
Или классику типа КерниганРичи - много на каких сайтах лежит свободно.
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
не уверен, нужны ли вам "встраиваемые системы" (кстати, что это ?
это как раз то, что мне нужно. Это когда создаётся контроллер для определенной вещи, и этот контроллер должен будет с ней/ в ней работать

Посоветую почитать курс на ravesli.com - спасибо
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
Так, на всякий случай - контроллер ардуино это не "встраиваемая система"
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
Так, на всякий случай - контроллер ардуино это не "встраиваемая система"
Это я понимаю )))), но знакомство с миром МК через ардуино - это отлично придумали! Я инженер по слаботочным сетям, а там работа в основном с готовыми устройствами, а тут столько всего умеет этот МК. я по началу афигел даже )))

По прежнему не хотите показать код? боитесь украдем? Тогда ищите сами
Да нет конечно, наоборот, если более-менее хорошо получится хочу выложить как проект )))

Везде воткнул вывод в порт, и проверил поисковиком, сейчас везде после MenuPage =... стоит Serial.println(MenuPage); Надеюсь правильно вас понял.
C++:
// Контроллер самогонного аппарата
//            "ХАН - 1"
//                                  by minash87
// Версия 1.0

// Сокращения
// CUB - датчик температуры в кубе (Cube) (ёмкость в которой находится брага)
// TRA - датчик в трубке связи с атмосферой (Temperature Relationship with the Atmosphere)
// CS - датчик в охладителе (Cooling System)



// --------------------- Установка пинов подключения периферии ---------------------

// Энкодер
#define CLK 3   //S1 должен быть подключен на пин аппаратного прерывания
#define DT 2    //S2 должен быть подключен на пин аппаратного прерывания
#define SW 4    //KEY

// Кнопки
#define BSt 10   //Кнопка Пуск
#define BSp 11   //Кнопка Стоп/Звук
#define BMn 12   //Кнопка Меню
#define BEx 13   //Кнопка Выход

// Датчики температуры DS18B20
#define SCUB 7   // Датчик в кубе
#define STRA 9   // Датчик в ТСА
#define SCS 8    // Датчик в охладителе

// Реле
#define SSRCUB 5     // SSR включения/отключения тэна куба
#define SSRFCUB 6    // SSR включения/отключения форсажа нагревания куба
#define R1CS 14      // Реле 1 включения/отключения охлаждения
#define R2Ring 15    // Реле 2 включения/отключения сирены
#define R3RLamp 16   // Реле 3 включения/отключения красной лампы
#define R4GLamp 17   // Реле 4 включения/отключения зелёной лампы


// --------------------- Библиотеки, настройки, переменные ---------------------

//Библиотеки
#include <EncButton.h>
#include <microDS18B20.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

// Энкодер и кнопки
EncButton <EB_TICK, CLK, DT, SW> Enc;
EncButton <EB_TICK, BSt> BtnStart; //Кнопка Пуск
EncButton <EB_TICK, BSp> BtnStop;  //Кнопка Стоп/Звук
EncButton <EB_TICK, BMn> BtnMenu;  //Кнопка Меню
EncButton <EB_TICK, BEx> BtnExit;  //Кнопка Выход

// Датчики температуры DS18B20
MicroDS18B20<SCUB> SensorCUB; // Датчик в кубе
MicroDS18B20<STRA> SensorTRA; // Датчик в ТСА
MicroDS18B20<SCS> SensorCS;   // Датчик в охладителе

// LCD дисплей
LiquidCrystal_I2C lcd(0x27, 16, 2); // Дисплей 1602A

// Таймеры
uint32_t TOne;  // Таймер 1

// Меню
uint16_t MenuPage = 0;

// Коэффициенты калибровка датчиков температуры
float kCUB = 0;
float kTRA = 0;
float kCS = 0;

// Суммы с датчиков температур и коэффициентов калибровки
float TempCUB;
float TempTRA;
float TempCS;

// Защита по превышению температуры
boolean ActivateProtectTempCUB = 0;       // Включение/выключение слежения за превышением температуры. 0 - выкл, 1 - вкл
boolean ActivateProtectTempTRA = 0;       // Включение/выключение слежения за превышением температуры. 0 - выкл, 1 - вкл
boolean ActivateProtectTempCS = 0;        // Включение/выключение слежения за превышением температуры. 0 - выкл, 1 - вкл
uint8_t ProtectTempCUB = 99;              // Установка температуры полного отключения тэнов
uint8_t ProtectTempTRA = 45;              // Установка температуры полного отключения тэнов
uint8_t ProtectTempCS = 45;               // Установка температуры полного отключения тэнов

// Защита по потере датчиков температуры
boolean OnlineSensorCUB = 0;              // Включение/выключение слежения за потерей датчиков температуры. 0 - выкл, 1 - вкл
boolean OnlineSensorTRA = 0;              // Включение/выключение слежения за потерей датчиков температуры. 0 - выкл, 1 - вкл
boolean OnlineSensorCS = 0;               // Включение/выключение слежения за потерей датчиков температуры. 0 - выкл, 1 - вкл

// Отбор спирта сырца
boolean EnableRAW = 0;                    // Начальное меню режима отбора спирта сырца. 0 - выкл этого режима, 1 - вкл.
uint8_t TempTurnOnCSRAW = 30;             // Температура активации охлаждение при отборе спирта сырца.
uint8_t TempTurnOffCUBRAW = 99;           // Температура выключения тэна(ов) по окончанию отбора спирта сырца.

// Отбор голов
boolean EnableHEAD = 0;                   // Начальное меню режима отбора голов. 0 - выкл этого режима, 1 - вкл.

// Отбор тела
boolean EnableBODY = 0;                   // Начальное меню режима отбора тела. 0 - выкл этого режима, 1 - вкл.

// Отбор хвостов
boolean EnableTAIL = 0;                   // Начальное меню режима отбора хвостов. 0 - выкл этого режима, 1 - вкл.

void setup() {
  Serial.begin(9600);


  // Энкодер
  attachInterrupt (0, isrCLK, CHANGE);
  attachInterrupt (1, isrDT, CHANGE);

  // Реле
  pinMode(SSRCUB, OUTPUT);  // SSR куба
  pinMode(SSRFCUB, OUTPUT); // SSR форсажа куба (дополнительные тэны, или просто электроплитка)
  pinMode(R1CS, OUTPUT);    // реле включения охлаждения
  pinMode(R2Ring, OUTPUT);  // Сирена
  pinMode(R3RLamp, OUTPUT); // Красная лампа
  pinMode(R4GLamp, OUTPUT); // Зелёная лампа

  // Дисплей
  lcd.init();
  lcd.backlight();


}

void loop() {
  Serial.println(MenuPage);

  Enc.tick();       // опрос энкодера
  BtnStart.tick();  // опрос кнопки Старт
  BtnStop.tick();   // опрос кнопки Стоп
  BtnMenu.tick();   // опрос кнопки Меню
  BtnExit.tick();   // опрос кнопки Выход

  Temperature();     // Расчёт температур с коэффициентом калибровки
  AlarmTemp();       // Превышение заданой температуры в режиме защиты

  if (BtnExit.held()) { // в любом месте меню, если зажать кнопку выход, выходит на основной экран
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }

  // --------------------- Конструкция переходов по меню ---------------------

  // Если переменная MenuPage равна какому-то значению, на дисплей выводится та менюшка, которая за это отвечает
  // Если первое меню равно 10, все относящиеся к этому меню имюет значения +1 (11, 12, 13 и т.д.)
  // Если меню другого режима, переменная равна + 10 (10, 20, 30 и т.д.)
  // Таким образом видна связь по меню, если PageMenu равно 56, то начальное меню будет 50.
  // Вывод основной информации начинается с нуля
  // Меню по основным режимам начинается с 10
  // Меню по настройкам начинается со 100
  // Вывод тревог начинается с 200

  switch (MenuPage) {
    case 0:
      TempGUI();                          // Основной экран, выводится температуры с датчиков
      if (BtnMenu.click()) {
        lcd.clear();
        MenuPage = 10;
        Serial.println(MenuPage);
      }
      if (BtnMenu.held()) {
        lcd.clear();
        MenuPage = 100;
        Serial.println(MenuPage);
      }
      //if (Enc.rightH());
      //if (Enc.leftH());
      break;
    case 10: MenuRAW();                   // Начальное меню режима отбора спитра сырца
      break;
    case 11: TurnOnCSRAW();               // Температура активации охлаждение при отборе спирта сырца.
      break;
    case 12: TurnOffCUBRAW();             // Температура выключения тэна(ов) по окончанию отбора спирта сырца.
      break;
    case 20: MenuHEAD();                  // Начальное меню режима отбора голов.
      break;
    case 30: MenuBODY();                  // Начальное меню режима отбора тела.
      break;
    case 40: MenuTAIL();                  // Начальное меню режима отбора хвостов.
      break;
    case 100: CalibrationSensorTemp();    // Начальное меню калибровки датчиков температуры
      break;
    case 101: CalibrationCUB();           // Калибровки датчика в кубе
      break;
    case 102: CalibrationTRA();           // Калибровки датчика в ТСА
      break;
    case 103: CalibrationCS();            // Калибровки датчика в охладителе
      break;
    case 110: ProtectionTemp();           // Начальное меню функции защиты при повышении температуры
      break;
    case 111: ProtectionTempCUB();        // Установка значения для датчика в кубе
      break;
    case 112: ProtectionTempTRA();        // Установка значения для датчика в ТСА
      break;
    case 113: ProtectionTempCS();         // Установка значения для датчика в охладителе
      break;
    case 120: ProtectionSensor();         // Начальное меню функции защиты от потери датчиков температуры
      break;
    case 121: ProtectionSensorCUB();      // Включение/выключение реакции на потерю датчика в кубе
      break;
    case 122: ProtectionSensorTRA();      // Включение/выключение реакции на потерю датчика в ТСА
      break;
    case 123: ProtectionSensorCS();       // Включение/выключение реакции на потерю датчика в охладителе
      break;
    case 200:
      AlarmTempCUB();                       //Вывод тревоги на дисплей при превышении температуры в кубе
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 201:
      AlarmTempTRA();                       //Вывод тревоги на дисплей при превышении температуры в ТСА
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 202:
      AlarmTempCS();                        //Вывод тревоги на дисплей при превышении температуры в охладителе
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 203:
      AlarmTempCUBTRA();                    //Вывод тревоги на дисплей при превышении температуры в кубе и ТСА
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 204:
      AlarmTempCUBCS();                     //Вывод тревоги на дисплей при превышении температуры в кубе и охладителе
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 205:
      AlarmTempTRACS();                     //Вывод тревоги на дисплей при превышении температуры в ТСА и охладителе
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
    case 206:
      AlarmTempCUBTRACS();                  //Вывод тревоги на дисплей при превышении температуры в кубе, ТСА и охладителе
      ResetProtecTemp();                    //Сброс настроек защиты по превышению температуры
      break;
  }
}

// --------------------- Вывод температур с датчиков на дисплей ---------------------
void TempGUI() { //MenuPage = 0
  lcd.setCursor(0, 0);
  lcd.print("CUB ");
  lcd.print(TempCUB);

  lcd.setCursor(0, 1);
  lcd.print("TRA ");
  lcd.print(TempTRA);

  lcd.setCursor(12, 0);
  lcd.print("CS");
  lcd.setCursor(11, 1);
  lcd.print(TempCS);
}

// --------------------- МЕНЮ ОТБОРА СПИРТА СЫРЦА ---------------------

// Начальное меню режима отбора спитра сырца
void MenuRAW() { //MenuPage = 10
  lcd.setCursor(0, 0);
  lcd.print("RAW   ");
  if (EnableRAW == 1) {
    lcd.print("ON ");
    if (Enc.click()) {
      lcd.clear();
      MenuPage = 11;
      Serial.println(MenuPage);
    }
  }
  if (EnableRAW == 0) lcd.print("OFF");   //Если выключено войти в меню нельзя и при запуске программы отбор спитра сырца производится не будет
  if (Enc.rightH()) EnableRAW = 1;
  if (Enc.leftH()) EnableRAW = 0;
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 20;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

// Температура активации охлаждение при отборе спирта сырца.
void TurnOnCSRAW() { //MenuPage = 11
  lcd.setCursor(1, 0);
  lcd.print("1.On CS Temp  ");
  lcd.setCursor(8, 1);
  lcd.print(TempTurnOnCSRAW);
  if (Enc.right()) TempTurnOnCSRAW += 1.00;
  if (Enc.left()) TempTurnOnCSRAW -= 1.00;
  if (BtnMenu.click()) {
    MenuPage = 12;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 10;
    Serial.println(MenuPage);
  }
  if (TempTurnOnCSRAW >= 100) TempTurnOnCSRAW = 10;  //Ограничиваю выбор температуры потому что на дисплее остаются знаки
  if (TempTurnOnCSRAW <= 9) TempTurnOnCSRAW = 99;    //И потому что использовать lcd.clear() не вариант (экран мигает как сумасшедший)
}

// Температура выключения тэна(ов) по окончанию отбора спирта сырца.
void TurnOffCUBRAW() { //MenuPage = 12
  lcd.setCursor(1, 0);
  lcd.print("2.Off CUB Temp");
  lcd.setCursor(8, 1);
  lcd.print(TempTurnOffCUBRAW);
  if (Enc.right()) TempTurnOffCUBRAW += 1.00;
  if (Enc.left()) TempTurnOffCUBRAW -= 1.00;
  if (BtnMenu.click()) {
    MenuPage = 11;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 10;
    Serial.println(MenuPage);
  }
  if (TempTurnOffCUBRAW >= 100) TempTurnOffCUBRAW = 10; //Ограничиваю выбор температуры потому что на дисплее остаются знаки
  if (TempTurnOffCUBRAW <= 9) TempTurnOffCUBRAW = 99;   //И потому что использовать lcd.clear() не вариант (экран мигает как сумасшедший)
}

// --------------------- МЕНЮ ОТБОРА ГОЛОВ ---------------------
void MenuHEAD() { //MenuPage = 20
  lcd.setCursor(0, 0);
  lcd.print("HEAD  ");
  if (EnableHEAD == 1) {
    lcd.print("ON ");
  }
  if (EnableHEAD == 0) lcd.print("OFF");
  if (Enc.rightH()) EnableHEAD = 1;
  if (Enc.leftH()) EnableHEAD = 0;
  if (BtnMenu.click()) {
    MenuPage = 30;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

// --------------------- МЕНЮ ОТБОРА ТЕЛА ---------------------
void MenuBODY() { //MenuPage = 30
  lcd.setCursor(0, 0), lcd.print("BODY  ");
  if (EnableBODY == 1) {
    lcd.print("ON ");
  }
  if (EnableBODY == 0) lcd.print("OFF");
  if (Enc.rightH()) EnableBODY = 1;
  if (Enc.leftH()) EnableBODY = 0;
  if (BtnMenu.click()) {
    MenuPage = 40;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

// --------------------- МЕНЮ ОТБОРА ХВОСТОВ ---------------------
void MenuTAIL() { //MenuPage = 40
  lcd.setCursor(0, 0), lcd.print("TAIL  ");
  if (EnableTAIL == 1) {
    lcd.print("ON ");
  }
  if (EnableTAIL == 0) lcd.print("OFF");
  if (Enc.rightH()) EnableTAIL = 1;
  if (Enc.leftH()) EnableTAIL = 0;
  if (BtnMenu.click()) {
    MenuPage = 10;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

// --------------------- МЕНЮ КАЛИБРОВКИ ДАТЧИКОВ ТЕМПЕРАТУРЫ ---------------------
void CalibrationSensorTemp() { //MenuPage = 100
  lcd.setCursor(0, 0);
  lcd.print("Calibration");
  lcd.setCursor(3, 1);
  lcd.print("Sensor");
  if (Enc.click()) {
    lcd.clear();
    MenuPage = 101;
    Serial.println(MenuPage);
  }
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 110;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

void CalibrationCUB() { //MenuPage = 101
  lcd.setCursor(1, 0);
  lcd.print("CUB ");
  lcd.print(SensorCUB.getTemp());
  lcd.setCursor(0, 1);
  lcd.print(kCUB);
  lcd.setCursor(6, 1);
  lcd.print(TempCUB);
  if (Enc.right()) {
    lcd.clear(); 
    kCUB += 0.10;
  }
  if (Enc.left()) {
    lcd.clear();
    kCUB -= 0.10;
  }
  if (Enc.rightH()) {
    lcd.clear();
    kCUB += 0.01;
  }
  if (Enc.leftH()) {
    lcd.clear();       // КАК ОТ ЭТИХ lcd.clear() ИЗБАВИТЬСЯ?????? АААААААААААА
    kCUB -= 0.01;
  }
  if (Enc.held()) {
    lcd.clear();
    kCUB = 0;
  }
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 102;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 100;
    Serial.println(MenuPage);
  }
}

void CalibrationTRA() { //MenuPage = 102
  lcd.setCursor(1, 0);
  lcd.print("TRA ");
  lcd.print(SensorTRA.getTemp());
  lcd.setCursor(0, 1);
  lcd.print(kTRA);
  lcd.setCursor(6, 1);
  lcd.print(TempTRA);
  if (Enc.right()) {
    lcd.clear();
    kTRA += 0.10;
  }
  if (Enc.left()) {
    lcd.clear();
    kTRA -= 0.10;
  }
  if (Enc.rightH()) {
    lcd.clear();
    kTRA += 0.01;
  }
  if (Enc.leftH()) {
    lcd.clear();
    kTRA -= 0.01;
  }
  if (Enc.held()) {
    lcd.clear();
    kTRA = 0;
  }
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 103;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 100;
    Serial.println(MenuPage);
  }
}

void CalibrationCS() { //MenuPage = 103
  lcd.setCursor(1, 0);
  lcd.print("CS  ");
  lcd.print(SensorCS.getTemp());
  lcd.setCursor(0, 1);
  lcd.print(kCS);
  lcd.setCursor(6, 1);
  lcd.print(TempCS);
  if (Enc.right()) {
    lcd.clear();
    kCS += 0.10;
  }
  if (Enc.left()) {
    lcd.clear();
    kCS -= 0.10;
  }
  if (Enc.rightH()) {
    lcd.clear();
    kCS += 0.01;
  }
  if (Enc.leftH()) {
    lcd.clear();
    kCS -= 0.01;
  }
  if (Enc.held()) {
    lcd.clear();
    kCS = 0;
  }
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 101;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 100;
    Serial.println(MenuPage);
  }
}

// --------------------- МЕНЮ ЗАЩИТЫ ПО ТЕМПЕРАТУРЕ ---------------------
void ProtectionTemp() { //MenuPage = 110
  lcd.setCursor(0, 0);
  lcd.print("Protect");
  lcd.setCursor(3, 1);
  lcd.print("Temp");
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 120;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
  if (Enc.click()) {
    lcd.clear();
    MenuPage = 111;
    Serial.println(MenuPage);
  }
}

void ProtectionTempCUB() { //MenuPage = 111
  lcd.setCursor(1, 0);
  lcd.print("CUB  ");
  if (ActivateProtectTempCUB == 1) {
    lcd.print ("ON  ");
    lcd.print(ProtectTempCUB);
    if (Enc.right()) ProtectTempCUB += 1;
    if (Enc.left()) ProtectTempCUB -= 1;
    if (ProtectTempCUB >= 99) ProtectTempCUB = 99;  //Ограничиваю выбор температуры потому что на дисплее остаются знаки
    if (ProtectTempCUB <= 10) ProtectTempCUB = 10;  //И потому что использовать lcd.clear() не вариант (экран мигает как сумасшедший)
  }
  if (ActivateProtectTempCUB == 0) lcd.print ("OFF   ");  //Если выключено изменять температуру нельзя
  if (Enc.rightH()) ActivateProtectTempCUB = 1;
  if (Enc.leftH()) ActivateProtectTempCUB = 0;
  if (BtnMenu.click()) {
    MenuPage = 112;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 110;
    Serial.println(MenuPage);
  }
}

void ProtectionTempTRA() { //MenuPage = 112
  lcd.setCursor(1, 0);
  lcd.print("TRA  ");
  if (ActivateProtectTempTRA == 1) {
    lcd.print ("ON  ");
    lcd.print(ProtectTempTRA);
    if (Enc.right()) ProtectTempTRA += 1;
    if (Enc.left()) ProtectTempTRA -= 1;
    if (ProtectTempTRA >= 99) ProtectTempTRA = 99;   //Ограничиваю выбор температуры потому что на дисплее остаются знаки
    if (ProtectTempTRA <= 10) ProtectTempTRA = 10;   //И потому что использовать lcd.clear() не вариант (экран мигает как сумасшедший)
  }
  if (ActivateProtectTempTRA == 0) lcd.print ("OFF   ");  //Если выключено изменять температуру нельзя
  if (Enc.rightH()) ActivateProtectTempTRA = 1;
  if (Enc.leftH()) ActivateProtectTempTRA = 0;
  if (BtnMenu.click()) {
    MenuPage = 113;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 110;
    Serial.println(MenuPage);
  }
}

void ProtectionTempCS() { //MenuPage = 113
  lcd.setCursor(1, 0);
  lcd.print("CS   ");
  if (ActivateProtectTempCS == 1) {
    lcd.print ("ON  ");
    lcd.print(ProtectTempCS);
    if (Enc.right()) ProtectTempCS += 1;
    if (Enc.left()) ProtectTempCS -= 1;
    if (ProtectTempCS >= 99) ProtectTempCS = 99;   //Ограничиваю выбор температуры потому что на дисплее остаются знаки
    if (ProtectTempCS <= 10) ProtectTempCS = 10;   //И потому что использовать lcd.clear() не вариант (экран мигает как сумасшедший)
  }
  if (ActivateProtectTempCS == 0) lcd.print ("OFF   ");   //Если выключено изменять температуру нельзя
  if (Enc.rightH()) ActivateProtectTempCS = 1;
  if (Enc.leftH()) ActivateProtectTempCS = 0;
  if (BtnMenu.click()) {
    MenuPage = 111;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 110;
    Serial.println(MenuPage);
  }
}

// --------------------- МЕНЮ ЗАЩИТЫ ПО ПОТЕРЕ ДАТЧИКОВ ТЕМПЕРАТУРЫ ---------------------
void ProtectionSensor() { //MenuPage = 120
  lcd.setCursor(0, 0);
  lcd.print("Protect  ");
  lcd.setCursor(3, 1);
  lcd.print("Sensor");
  if (BtnMenu.click()) {
    lcd.clear();
    MenuPage = 100;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
  if (Enc.click()) {
    lcd.clear();
    MenuPage = 121;
    Serial.println(MenuPage);
  }
}

void ProtectionSensorCUB() { //MenuPage = 121
  lcd.setCursor(1, 0);
  lcd.print("CUB  ");
  if (Enc.rightH()) OnlineSensorCUB = 1;
  if (Enc.leftH()) OnlineSensorCUB = 0;
  if (OnlineSensorCUB == 1) lcd.print("ON ");
  if (OnlineSensorCUB == 0) lcd.print("OFF");
  if (BtnMenu.click()) {
    MenuPage = 122;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    MenuPage = 120;
    Serial.println(MenuPage);
  }
}

void ProtectionSensorTRA() { //MenuPage = 122
  lcd.setCursor(1, 0);
  lcd.print("TRA  ");
  if (Enc.rightH()) OnlineSensorTRA = 1;
  if (Enc.leftH()) OnlineSensorTRA = 0;
  if (OnlineSensorTRA == 1) lcd.print("ON ");
  if (OnlineSensorTRA == 0) lcd.print("OFF");
  if (BtnMenu.click()) {
    MenuPage = 123;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    MenuPage = 120;
    Serial.println(MenuPage);
  }
}

void ProtectionSensorCS() { //MenuPage = 123
  lcd.setCursor(1, 0);
  lcd.print("CS   ");
  if (Enc.rightH()) OnlineSensorCS = 1;
  if (Enc.leftH()) OnlineSensorCS = 0;
  if (OnlineSensorCS == 1) lcd.print("ON ");
  if (OnlineSensorCS == 0) lcd.print("OFF");
  if (BtnMenu.click()) {
    MenuPage = 121;
    Serial.println(MenuPage);
  }
  if (BtnExit.click()) {
    MenuPage = 120;
    Serial.println(MenuPage);
  }
}

// --------------------- Вывод тревог на дисплей ---------------------
void AlarmTempCUB() { //MenuPage = 200
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(3, 1);
  lcd.print("CUB");
}

void AlarmTempTRA() { //MenuPage = 201
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(7, 1);
  lcd.print("TRA");
}

void AlarmTempCS() { //MenuPage = 202
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(11, 1);
  lcd.print("CS");
}

void AlarmTempCUBTRA() { //MenuPage = 203
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(3, 1);
  lcd.print("CUB TRA");
}

void AlarmTempCUBCS() { //MenuPage = 204
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(3, 1);
  lcd.print("CUB");
  lcd.setCursor(11, 1);
  lcd.print("CS");
}

void AlarmTempTRACS() { //MenuPage = 205
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(7, 1);
  lcd.print("TRA CS");
}

void AlarmTempCUBTRACS() { //MenuPage = 206
  lcd.setCursor(0, 0);
  lcd.print("ALARM");
  lcd.setCursor(3, 1);
  lcd.print("CUB TRA CS");
}

// --------------------- Вывод тревог по температуре на дисплей ---------------------
void AlarmTemp() {
  //Вывод тревоги на дисплей при превышении температуры в кубе
  if (ActivateProtectTempCUB == 1 && ActivateProtectTempTRA == 0 && ActivateProtectTempCS == 0) {
    if (TempCUB >= ProtectTempCUB) {
      lcdclear();
      MenuPage = 200;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в ТСА
  if (ActivateProtectTempCUB == 0 && ActivateProtectTempTRA == 1 && ActivateProtectTempCS == 0) {
    if (TempTRA >= ProtectTempTRA) {
      lcdclear();
      MenuPage = 201;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в охладителе
  if (ActivateProtectTempCUB == 0 && ActivateProtectTempTRA == 0 && ActivateProtectTempCS == 1) {
    if (TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 202;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в кубе и ТСА
  if (ActivateProtectTempCUB == 1 && ActivateProtectTempTRA == 1 && ActivateProtectTempCS == 0) {
    if (TempCUB >= ProtectTempCUB && TempTRA < ProtectTempTRA) {
      lcdclear();
      MenuPage = 200;
      Serial.println(MenuPage);
    }
    if (TempCUB < ProtectTempCUB && TempTRA >= ProtectTempTRA) {
      lcdclear();
      MenuPage = 201;
      Serial.println(MenuPage);
    }
    if (TempCUB >= ProtectTempCUB && TempTRA >= ProtectTempTRA) {
      lcdclear();
      MenuPage = 203;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в кубе и охладителе
  if (ActivateProtectTempCUB == 1 && ActivateProtectTempTRA == 0 && ActivateProtectTempCS == 1) {
    if (TempCUB >= ProtectTempCUB && TempCS < ProtectTempCS) {
      lcdclear();
      MenuPage = 200;
      Serial.println(MenuPage);
    }
    if (TempCUB < ProtectTempCUB && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 202;
      Serial.println(MenuPage);
    }
    if (TempCUB >= ProtectTempCUB && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 204;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в ТСА и охладителе
  if (ActivateProtectTempCUB == 0 && ActivateProtectTempTRA == 1 && ActivateProtectTempCS == 1) {
    if (TempTRA >= ProtectTempTRA && TempCS < ProtectTempCS) {
      lcdclear();
      MenuPage = 201;
      Serial.println(MenuPage);
    }
    if (TempTRA < ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 202;
      Serial.println(MenuPage);
    }
    if (TempTRA >= ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 205;
      Serial.println(MenuPage);
    }
  }
  //Вывод тревоги на дисплей при превышении температуры в кубе, ТСА и охладителе
  if (ActivateProtectTempCUB == 1 && ActivateProtectTempTRA == 1 && ActivateProtectTempCS == 1) {
    if (TempCUB >= ProtectTempCUB && TempTRA < ProtectTempTRA && TempCS < ProtectTempCS) {
      lcdclear();
      MenuPage = 200;
      Serial.println(MenuPage);
    }
    if (TempCUB < ProtectTempCUB && TempTRA >= ProtectTempTRA && TempCS < ProtectTempCS) {
      lcdclear();
      MenuPage = 201;
      Serial.println(MenuPage);
    }
    if (TempCUB < ProtectTempCUB && TempTRA < ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 202;
      Serial.println(MenuPage);
    }
    if (TempCUB >= ProtectTempCUB && TempTRA >= ProtectTempTRA && TempCS < ProtectTempCS) {
      lcdclear();
      MenuPage = 203;
      Serial.println(MenuPage);
    }
    if (TempCUB >= ProtectTempCUB && TempTRA < ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 204;
      Serial.println(MenuPage);
    }
    if (TempCUB < ProtectTempCUB && TempTRA >= ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 205;
      Serial.println(MenuPage);
    }
    if (TempCUB >= ProtectTempCUB && TempTRA >= ProtectTempTRA && TempCS >= ProtectTempCS) {
      lcdclear();
      MenuPage = 206;
      Serial.println(MenuPage);
    }
  }
}

void lcdclear() {
  if (millis() - TOne >= 1000) {
    TOne = millis();
    lcd.clear();
  }
}

// Сброс настроек защиты по температуре
void ResetProtecTemp() {
  if (Enc.held()) {
    ActivateProtectTempCUB = 0;
    ActivateProtectTempTRA = 0;
    ActivateProtectTempCS = 0;
    ProtectTempCUB = 99;
    ProtectTempTRA = 99;
    ProtectTempCS = 99;
    lcd.clear();
    MenuPage = 0;
    Serial.println(MenuPage);
  }
}

// Температура с датчиков + коэффициент калибровки
void Temperature() {
  if (millis() - TOne >= 2250) {
    TOne = millis();
    SensorCUB.requestTemp(); // Запрос температур с датчиков
    SensorTRA.requestTemp();
    SensorCS.requestTemp();
    TempCUB = SensorCUB.getTemp() + kCUB;
    TempTRA = SensorTRA.getTemp() + kTRA;
    TempCS = SensorCS.getTemp() + kCS;
  }
}

// Аппаратные прерывания энкодера
void isrCLK() {
  Enc.tick();
}

void isrDT() {
  Enc.tick();
}
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@Сотнег,спасибо, убрал, теперь выводятся по одной, но проблема осталась (((
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@minash87,
ну добавьте вывод EnableRAW сразу после строчек EnableRAW = ..;
И лог с демонстрацией проблемы в студию...
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@bort707,так в нём (в логе монитора порта) не видно этой проблемы. Я когда зажимаю и поворачиваю энкодер, EnableRAW изменяется, но это изменение не отображается в мониторе порта. Может лучше видео? оно короткое будет минута - полторы.

@bort707,суть я понял, везде втыкать вывод в порт то, что не работает
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
Может лучше видео
не вижу смысла. Посмотреть, чтоб убедиться, что и правда не выводит в порт? - зачем, я вам и так верю:)
Важно разобраться, почему так - а в этом видео не поможет.

когда зажимаю и поворачиваю энкодер, EnableRAW изменяется, но это изменение не отображается в мониторе порта
откуда вы тогда знаете, что оно меняется, если в порте этого нет?
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
откуда вы тогда знаете, что оно меняется, если в порте этого нет?
При включении МК, MenuPage == 0 и EnableRAW == 0; если зажать энкодер и повернуть вправо, а потом перейти в MenuPage == 10, нажав кнопку BtnMenu, то там EnableRAW == 1. И наоборот, при MenuPage == 0 и EnableRAW == 1 если зажать энкодер и повернуть влево, то при переходе в меню 10 EnableRAW == 0
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
@minash87, вы реально видите эти значения, выводимые в порт? Или это просто так должно быть?
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
Т.е. MenuPage меняется или при нажатом повороте энкодера, или от комбинации нажатого поворота энкодера и после этого нажатой кнопки Меню. При чём время между отпусканием энкодера и нажатием кнопки не имеет значения.
Если просто нажимать кнопку меню EnableRAW не меняется

@bort707,в мониторе порта происходит следующее: при включении МК EnableRAW = 0, потом я нажимаю и поворачиваю энкодер вправо, EnableRAW = 0, потом я нажимаю кнопку меню (BtnMenu) и EnableRAW =1.

Но такого не должно быть же. Там же чётко написано: При MenuPage == 10, если зажать и повернуть энкодер вправо сделать EnableRAW =1. А при MenuPage == 0 не написано такого делать ((((
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@Сотнег, простите, что-то затупил я
Просто цифры это MenuPage
ER - EnableRaw
Перезагрузил МК
Нажал кнопку порта

подождал


23:25:21.994 -> 10 - нажал Меню
23:25:21.994 -> ER0
23:25:21.994 -> ER0
23:25:21.994 -> ER0
23:25:21.994 -> ER0
23:25:21.994 -> ER0
23:25:21.994 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.040 -> ER0
23:25:22.086 -> ER0
23:25:22.086 -> ER0
23:25:22.086 -> ER0
23:25:22.086 -> ER0
23:25:22.086 -> ER0
23:25:22.086 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.132 -> ER0
23:25:22.178 -> ER0
23:25:22.178 -> ER0
23:25:22.178 -> ER0
23:25:22.178 -> ER0
23:25:22.178 -> ER0
23:25:22.178 -> ER0
23:25:22.224 -> ER0
23:25:22.224 -> ER0
23:25:22.224 -> ER0
23:25:22.224 -> ER0
23:25:22.224 -> ER0
23:25:22.224 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.271 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.317 -> ER0
23:25:22.363 -> ER0
23:25:22.363 -> ER0
23:25:22.363 -> ER0
23:25:22.363 -> ER0
23:25:22.363 -> ER0
23:25:22.363 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.410 -> ER0
23:25:22.456 -> ER0
23:25:22.456 -> ER0
23:25:22.456 -> ER0
23:25:22.456 -> ER0
23:25:22.456 -> ER0
23:25:22.456 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.502 -> ER0
23:25:22.548 -> ER0
23:25:22.548 -> ER0
23:25:22.548 -> ER0
23:25:22.548 -> ER0
23:25:22.548 -> ER0
23:25:22.548 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.594 -> ER0
23:25:22.640 -> ER0
23:25:22.640 -> ER0
23:25:22.640 -> ER0
23:25:22.640 -> ER0
23:25:22.640 -> ER0
23:25:22.640 -> ER0
23:25:22.686 -> ER0
23:25:22.686 -> ER0
23:25:22.686 -> ER0
23:25:22.686 -> ER0
23:25:22.686 -> ER0
23:25:22.686 -> 0 - нажал выход

Зажал и повернул энкодер

23:25:28.321 -> 10 - нажал меню
23:25:28.321 -> ER0
23:25:28.321 -> ER1
23:25:28.321 -> ER1
23:25:28.321 -> ER1
23:25:28.321 -> ER1
23:25:28.321 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.367 -> ER1
23:25:28.413 -> ER1
23:25:28.413 -> ER1
23:25:28.413 -> ER1
23:25:28.413 -> ER1
23:25:28.413 -> ER1
23:25:28.413 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.458 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.504 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.550 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.597 -> ER1
23:25:28.643 -> ER1
23:25:28.643 -> ER1
23:25:28.643 -> ER1
23:25:28.643 -> ER1
23:25:28.643 -> ER1
23:25:28.643 -> ER1
23:25:28.690 -> ER1
23:25:28.690 -> ER1
23:25:28.690 -> ER1
23:25:28.690 -> ER1
23:25:28.690 -> ER1
23:25:28.690 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.736 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.782 -> ER1
23:25:28.828 -> ER1
23:25:28.828 -> ER1
23:25:28.828 -> ER1
23:25:28.828 -> ER1
23:25:28.828 -> ER1
23:25:28.828 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.875 -> ER1
23:25:28.920 -> ER1
23:25:28.920 -> ER1
23:25:28.920 -> ER1
23:25:28.920 -> ER1
23:25:28.920 -> ER1
23:25:28.920 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> ER1
23:25:28.966 -> 0 - нажал выход
23:25:32.843 -> 10 - нажал меню
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.843 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.889 -> ER1
23:25:32.935 -> ER1
23:25:32.935 -> ER1
23:25:32.935 -> ER1
23:25:32.935 -> ER1
23:25:32.935 -> ER1
23:25:32.935 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:32.981 -> ER1
23:25:33.028 -> ER1
23:25:33.028 -> ER1
23:25:33.028 -> ER1
23:25:33.028 -> ER1
23:25:33.028 -> ER1
23:25:33.028 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.074 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.119 -> ER1
23:25:33.165 -> ER1
23:25:33.165 -> ER1
23:25:33.165 -> ER1
23:25:33.165 -> ER1
23:25:33.165 -> ER1
23:25:33.165 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.211 -> ER1
23:25:33.257 -> ER1
23:25:33.257 -> ER1
23:25:33.257 -> ER1
23:25:33.257 -> ER1
23:25:33.257 -> ER1
23:25:33.257 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.303 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.349 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.395 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.441 -> ER1
23:25:33.487 -> ER1
23:25:33.487 -> ER1
23:25:33.487 -> ER1
23:25:33.487 -> ER1
23:25:33.487 -> ER1
23:25:33.487 -> ER1
23:25:33.533 -> ER1
23:25:33.533 -> ER1
23:25:33.533 -> ER1
23:25:33.533 -> ER1
23:25:33.533 -> ER1
23:25:33.533 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.579 -> ER1
23:25:33.625 -> ER1
23:25:33.625 -> ER1
23:25:33.625 -> ER1
23:25:33.625 -> ER1
23:25:33.625 -> ER1
23:25:33.625 -> ER1
23:25:33.671 -> ER1
23:25:33.671 -> ER1
23:25:33.671 -> ER1
23:25:33.671 -> 0
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@minash87,
длинные логи лучше прятать под спойлер.
Не увидел в логе, чтобы менялось ER, когда меню не равно 10.
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@Сотнег,так я и говорил что не показывает ))) Может не правильно выразился... Просто я код раза четыре построчно проверил, нигде нет указаний на изменение ER, кроме как в MenuRAW
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
@minash87, пипец..... А выводить переменные ТОЛЬКО ПРИ ИЗМЕНЕНИИ вы не умеете?
 

bort707

★★★★★★✩
21 Сен 2020
2,859
850
@Сотнег,но переменная то изменяется
повторяю вопрос - откуда это известно, если в логе этого нет?
Поймите, в программировании все четко. Если переменной в логе нет - значит не меняется, если Вы в лог правильно пишете.
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
@bort707,
Я это узнаю когда перехожу в MenuPage == 10, на дисплее пишет ON или OFF. Естественно ON это 1, OFF это 0.
 

minash87

✩✩✩✩✩✩✩
1 Мар 2022
32
1
Нашёл!
C++:
void MenuRAW() { //MenuPage = 10
    Serial.print("1-");
    Serial.println(EnableRAW);
  lcd.setCursor(0, 0);
    Serial.print("2-");
    Serial.println(EnableRAW);
  lcd.print("RAW   ");
    Serial.print("3-");
    Serial.println(EnableRAW);
  if (EnableRAW == 1) {
        Serial.print("4-");
        Serial.println(EnableRAW);
      lcd.print("ON ");
        Serial.print("5-");
        Serial.println(EnableRAW);
  }
  if (Enc.click()) {
      Serial.print("6-");
      Serial.println(EnableRAW);
    lcd.clear();
      Serial.print("7-");
      Serial.println(EnableRAW);
    MenuPage = 11;
      Serial.print("8-");
      Serial.println(EnableRAW);
  }
  if (EnableRAW == 0) {
      Serial.print("9-");
      Serial.println(EnableRAW);
    lcd.print("OFF");
      Serial.print("10-");
      Serial.println(EnableRAW);
  }
  if (Enc.rightH()) {
      Serial.print("11-");
      Serial.println(EnableRAW);
    EnableRAW = 1;
      Serial.print("12-");            // Вот здесь присваивается 1
      Serial.println(EnableRAW);
  }
  if (Enc.leftH()) {
      Serial.print("13-");
      Serial.println(EnableRAW);
    EnableRAW = 0;
      Serial.print("14-");               // Вот здесь присваивается 0
      Serial.println(EnableRAW);
  }
  if (BtnMenu.click()) {
      Serial.print("15-");
      Serial.println(EnableRAW);
    lcd.clear();
      Serial.print("16-");
      Serial.println(EnableRAW);
    MenuPage = 20;
      Serial.print("17-");
      Serial.println(EnableRAW);
  }
  if (BtnExit.click()) {
      Serial.print("18-");
      Serial.println(EnableRAW);
    lcd.clear();
      Serial.print("19-");
      Serial.println(EnableRAW);
    MenuPage = 0;
      Serial.print("20-");
      Serial.println(EnableRAW);
  }
}
Но условие то Swich Case стоит что при MenuPage == 10 должно изменяться...

@minash87, пипец..... А выводить переменные ТОЛЬКО ПРИ ИЗМЕНЕНИИ вы не умеете?
Вы не могли бы сказать как так сделать? А то я не нашёл (((
 
Изменено:
  • Лойс +1
Реакции: Старик Похабыч