ARDUINO Сделать обновление таймера в oledmenu

faradayz

✩✩✩✩✩✩✩
2 Фев 2025
3
0
Всем привет, можно ли как то организовать функционал так, чтоб таймер который представлен в oledmenu https://github.com/gewisser/GyverOLEDMenu/blob/master/examples/oledMenu.ino

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


Или

Суть в чем, хочу создавать поля в этом меню, с полученными данными, к примеру от модуля температуры.
Типа пункт в меню
Температура: 32.2C

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


C++:
boolean onItemPrintOverride(const int index, const void* val, const byte valType) {
  if (index == 1) {
    sensor.requestTemp();
    oled.print(sensor.getTemp()); // тут просто обновляется в поле TIMER температура полученная с MicroDS18B20
    return true; // сигнализируем, что мы сами вызываем метод oled.print(...) с нужным нам форматированием
  }

  // возвращаем всегда `false`, если мы не собираемся для других пунктов меню принтить значение
  return false;
}
А как сделать так, чтоб поле обновлялось независимо от действий, а просто.
Пытался в исходнике библиотеки написать функционал, но ума пока не хватило сделать функцию типа renameItem

Мне не важно чтоб это было в поле типа GM_N_BYTE
Можно просто в поле типа
C++:
menu.addItem(PSTR("<- ВЫХОД"));
Обновлять STR этого item при каком либо изменении.
Надеюсь изложил все подробно
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
511
151
@faradayz,
Может я не понял ваш вопрос.
Если хотите обновлять значение переменной в меню - записывайте в переменную новое значение и вызывайте menu.refresh(); если меню отображается в данный момент.
C++:
d_i = Новое значение;   // изменяем значение d_i из примера oledMenu.ino
if (menu.isMenuShowing) {
    menu.refresh();
}

можно, но не обязательно, проверять активна ли нужная страница

  if (menu.isMenuShowing && menu.currentPage == 1) {
    menu.refresh();
  }
 
  • Лойс +1
Реакции: faradayz