Здраствуйте. Возникла такая проблема: При переключении страниц в многостраничном меню пропадает курсор,при чем, на 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]/
}
/* пример вложеной функции, которую можно вызвать из под меню */