Возврат на главную страницу меню GyverEnc

DimaProh

✩✩✩✩✩✩✩
25 Мар 2021
11
0
Доброй ночи. Уважаемые, подскажите такой вопрос. Написал меню для 1602, с использованием библиотеки Гайвер.Энк.
Столкнулся с такой проблемой:
Хочу организовать выход из под субменю, если энкодер не нажат и не повернут, в течении 10 секунд.
Код вставил вот такой:
C++:
void Bozvrat()
{
  enc.tick();
  if (!(enc.isTurn()) || !(enc.isPress()))
  {
  if (millis() - timer2 > 10000)
  {
    timer2 = millis();
    menuPosition = 0;
  }
  }
}
Я что-то явно сделал не так. Подскажите
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Конечно не то.
При каком либо движении энкодером надо в timer2 запоминать миллис
а вот проверку миллис-timer2 надо делать независимо от движения энкодера. т.е. безусловно
 

DimaProh

✩✩✩✩✩✩✩
25 Мар 2021
11
0
Конечно не то.
При каком либо движении энкодером надо в timer2 запоминать миллис
а вот проверку миллис-timer2 надо делать независимо от движения энкодера. т.е. безусловно
Да, это я уже понял, пока ждал публикации). Вышло коряво, но работает.
C++:
void Bozvrat()
{
  enc.tick();
  if (enc.isTurn() || enc.isPress()) timer2 = millis();
  else if (!(enc.isTurn()) || !(enc.isPress()))
  {
  if (millis() - timer2 > 10000)
  {
    timer2 = millis();
    lcd.clear();
    mPos = 0;
    lcd.clear();
  }
  }
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
C++:
void Bozvrat()
{
  enc.tick();
  if (enc.isTurn() || enc.isPress()) timer2 = millis();
  else
  {
  if (millis() - timer2 > 10000)
  {
    timer2 = millis();
    lcd.clear();
    mPos = 0;
    lcd.clear();
  }
  }
}
C++:
void Bozvrat()
{
  enc.tick();
  if (enc.isTurn() || enc.isPress()) timer2 = millis();

  if (millis() - timer2 > 10000)
  {
    timer2 = millis();
    lcd.clear();
    mPos = 0;
    lcd.clear();
  } 
}