Спасибо! Попробовал различные варианты и с текстом и с фигурами, с буфером и без, и тоже пришел к такому же выводу. А жаль... для ОЛЕД много библиотек, поищите другую.
делаю обучающий планшет. Нужно по нажатию на матричную клавиатуру 6х6 выводить символ на экран.@CHE77, поясните что вы имеете в виду под символом и кодом - обычно для этого используются шрифты.
//customKey с матричной клавитуры от 1 до 33 - кирилица
int j = 2;
char letter[4];
letter[j - 2] = 32;
letter[j - 1] = 32;
letter[j] = -48;
if (customKey < 7) {
letter[j + 1] = -113 + customKey;
} else {
letter[j + 1] = -114 + customKey;
}
letter[j + 2] = 13;
letter[j + 3] = 10;
oled.println(letter);
if (letter == 7) { // для точек Ё
oled.circle(60, 21, 2, OLED_FILL); // четвёртый аргумент: параметр фигуры
oled.circle(69, 21, 2, OLED_FILL); // четвёртый аргумент: параметр фигуры
}
char letter[1];
customKey = 1;// для моей английской А
letter[0] = customKey + 64;
oled.println(letter);
#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]/
}
/* пример вложеной функции, которую можно вызвать из под меню */
Когда pointer > 8 , то курсор просто не попадает на экран где количество строк = 8.oled.setCursor(0, pointer);
// примеры:
//GyverOLED<SSD1306_128x32, OLED_BUFFER> oled;
//GyverOLED<SSD1306_128x32, OLED_NO_BUFFER> oled;
//GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
//GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
//GyverOLED<SSD1306_128x64, OLED_BUFFER, OLED_SPI, 8, 7, 6> oled;
GyverOLED<SSH1106_128x64> oled;
#define SSD1306_128x32 0
#define SSD1306_128x64 1
#define SSH1106_128x64 2
...
// ============================ БЭКЭНД КОНСТАНТЫ ==============================
// внутренние константы
#define OLED_WIDTH 128
#define OLED_HEIGHT_32 0x02
#define OLED_HEIGHT_64 0x12
#define OLED_64 0x3F
#define OLED_32 0x1F
...
#define BUFSIZE_128x64 (128 * 64 / 8)
...
#define OLED_SOFT_BUFFER_64
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_BUFFER, OLED_SPI, 6, 2, 3> oled;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
oled.init(); // инициализация
// --------------------------
oled.clear(); // очистить дисплей (или буфер)
oled.update(); // обновить. Только для режима с буфером! OLED_BUFFER
// --------------------------
oled.home(); // курсор в 0,0
oled.print("Hello!"); // печатай что угодно: числа, строки, float, как Serial!
oled.update();
delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
}