Проблема с многостраничным меню на библиотеке GyverOled

pqwerty123

✩✩✩✩✩✩✩
2 Сен 2024
2
0
Здраствуйте. Возникла такая проблема: При переключении страниц в многостраничном меню пропадает курсор,при чем, на 1й странице он есть, а на других нету, при чем сами страницы переключаются, то есть, все работает ,просто нет курсора.
Даже интересно ,была ли у кого то такая проблема.
Скетч взял из урока про меню на дисплее .Изменил модель дисплея и отключил библиотеку с кнопками. Помогите пожалуйста! Заранее спасибо!

Menu:
#define OLED_SOFT_BUFFER_64     // Буфер на стороне МК
#include <GyverOLED.h>          // Библиотека дисплея
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled; // Объект дисплея



#define ITEMS 24               // Общее кол во пунктов (больше 8 - нужно несколько страниц)




void setup() {
  oled.init();           // Инициализация дисплея
  oled.setContrast(255); // Макс. яркость
    
  pinMode(4, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
}

void loop() {
  static int8_t pointer = 0; // Переменная указатель

  /* Кнопки */
 
  if (!digitalRead(4)) {               
    pointer = constrain(pointer - 1, 0, ITEMS - 1); // Двигаем указатель в пределах дисплея
  }

  if (!digitalRead(8)) {
    pointer = constrain(pointer + 1, 0, ITEMS - 1);
  }



  /* меню */
  oled.clear();           // Очищаем буфер
  oled.home();            // Курсор в левый верхний угол

  if (pointer < 8) {      // Первая страница
   oled.print("  1");
 oled.setCursor(0,1);
 oled.print("  2");
oled.setCursor(0,2);
  oled.print("  3");
oled.setCursor(0,3);
  oled.print("  4");
oled.setCursor(0,4);
  oled.print("  5");
oled.setCursor(0,5);
  oled.print("  6");
oled.setCursor(0,6);
  oled.print("  7");
oled.setCursor(0,7);
  oled.print("  8");
  } else if (pointer < 16) {// Вторая страница
    
   oled.print("  8,5");
 oled.setCursor(0,1);
 oled.print("  9");
oled.setCursor(0,2);
  oled.print("  10");
oled.setCursor(0,3);
  oled.print("  11");
oled.setCursor(0,4);
  oled.print("  12");
oled.setCursor(0,5);
  oled.print("  13");
oled.setCursor(0,6);
  oled.print("  14");
oled.setCursor(0,7);
  oled.print("  15");
  } else {                  // Последняя страница
      oled.print("  16");
 oled.setCursor(0,1);
 oled.print("  17");
oled.setCursor(0,2);
  oled.print("  18");
oled.setCursor(0,3);
  oled.print("  19");
oled.setCursor(0,4);
  oled.print("  20");
oled.setCursor(0,5);
  oled.print("  21");
oled.setCursor(0,6);
  oled.print("  22");
oled.setCursor(0,7);
  oled.print("  23");
  }

  printPointer(pointer);  // Вывод указателя
  oled.update();          // Выводим кадр на дисплей
}
void printPointer(uint8_t pointer) {
  // Символьный указатель - лучший выбор в многостраничном меню
  // Указатель в начале строки
  oled.setCursor(0, pointer);
  oled.print(">");
  // Можно еще в конце
  /*oled.setCursor(20, pointer);
    oled.print("<");*/
  // Указатель в виде прямоугольной рамки со скругленными углами
  /[I]oled.roundRect(0, pointer * 8, 127, (pointer * 8) + 6);[/I]/
  // Указатель в виде битмапа (картинки)
  /[I]oled.drawBitmap(0, pointer * 8, ptr_bmp, 10, 8);[/I]/
}

/* пример вложеной функции, которую можно вызвать из под меню */
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
430
129
oled.setCursor(0, pointer);
Когда pointer > 8 , то курсор просто не попадает на экран где количество строк = 8.
Надо или вычитать 8 для второй страницы oled.setCursor(0, pointer - 8);, 16 для третьей
Или взять остаток от деления на 8, и это будет работать на всех страницах.
oled.setCursor(0, pointer % 8);
 

pqwerty123

✩✩✩✩✩✩✩
2 Сен 2024
2
0
Благодарю вас. Заработало! Еще интересно то, что в видео, вроде бы, все работает и без этого
 
Изменено: