GyverOLED. Вопросы по библиотеке

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Вы уже не первый, кто пишет что строчки на этой либе отображаются неверно.
для ОЛЕД много библиотек, поищите другую.
 
  • Лойс +1
Реакции: ru3gp

ru3gp

✩✩✩✩✩✩✩
6 Янв 2022
3
0
... для ОЛЕД много библиотек, поищите другую.
Спасибо! Попробовал различные варианты и с текстом и с фигурами, с буфером и без, и тоже пришел к такому же выводу. А жаль :(
Но в некоторых проектах возможно эта библиотека и вполне устроит.
 

wertfgh

✩✩✩✩✩✩✩
28 Май 2023
1
0
Можно ли как-то на этой библиотеке инвертировать всё на дисплее по иску ?
 

CHE77

✩✩✩✩✩✩✩
5 Ноя 2020
6
0
Максимальный размер букв 32 пикселя. Это пол экрана. Как сделать во весь экран? Если убрать ограничение масштаба в библиотеке, то криво рисует.
Также не могу вывести заглавную Ё с точками.
 
Изменено:

CHE77

✩✩✩✩✩✩✩
5 Ноя 2020
6
0
Подскажите, пожалуйста. Как вывести символ по его коду?
 

CHE77

✩✩✩✩✩✩✩
5 Ноя 2020
6
0
@CHE77, поясните что вы имеете в виду под символом и кодом - обычно для этого используются шрифты.
делаю обучающий планшет. Нужно по нажатию на матричную клавиатуру 6х6 выводить символ на экран.
Вот могу связать код клавиши с кодировкой ASCII, или по тому коду что в charMap.h (c 32 начинается) и что дальше?
Каким методом вывести символ в OLED?

кирилицу так вывожу
почему то надо создавать массив на 4 байта и затирать последние и даже что вне массива. Иначе полсе нужной буквы выводит мусор на 3 знака.
Понятно что костыль. Вот и решил узнать как правильно это делать.


//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); // четвёртый аргумент: параметр фигуры
}


вот думал что с латиницей будет просто
C++:
char letter[1];
customKey = 1;// для моей английской А
letter[0] = customKey + 64;
oled.println(letter);
но вот так выводит букву А
 

Вложения

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
Функция печати ищет конец строки, нулевой байт, и будет печатать из памяти байты подряд пока не наткнется на нулл.
попробуйте так:

C++:
char mystring[2] = {0,0};
mysting[0] = 0x40;  // нужный acsii код
Serial.println(mysting);
 
Изменено:
  • Лойс +1
Реакции: CHE77

AdOrherwise1130

✩✩✩✩✩✩✩
31 Дек 2021
1
0
Подскажите размеры букв в зависимости от размера шрифта. В описание к библиотеке и в этой теме ничего не нашел. Опытным путем определил, что размер 2, равен одной строке с высотой 2. А как посчитать ширину? В том плане, что в случае вывода скажем температуры я нехочу обновлять весь дисплей, а только нужную область, только я не понимаю как посчитать точку начала обновляемой зоны.

Пример. Температура: 26. Логично же обновлять только 26 при изменении температурв
 

MIXSUZ

✩✩✩✩✩✩✩
22 Фев 2024
2
0
Подскажите пожалуйста почему не работают примеры из библиотеки ГайверОллед. На экране мусор. Спасибо.
 

MIXSUZ

✩✩✩✩✩✩✩
22 Фев 2024
2
0
Спасибо. Но дисплей подключен верно. Другие библиотеки работают. По поводу указания дисплея. Я ничего не указывал. Там же в примерах все указано. Или я чего то не понимаю, подскажите пожалуйста что может быть.
 

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

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
C++:
// примеры:
//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;
В примерах стоит дисплей 1106 у меня так, я могу спецом его забить) , если дисплй другой, то его и надо выбрать
 

Виталийc

✩✩✩✩✩✩✩
4 Ноя 2024
5
0
Доброго времени суток!
Подскажите пожалуйста, какие строчки в коде gyveroled необходимо поменять, чтобы выводить информацию на дисплей с разрешением 96х16 пикселей?
 

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

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Тут скорее методом тыка. Как правило такие дисплеи корректно отзываются на работу если указать большее разрешение, но ограничивать надо самому уже. При этом будет некоторый перерасход памяти, если использовать буфер
 

Виталийc

✩✩✩✩✩✩✩
4 Ноя 2024
5
0
@Старик Похабыч, все верно, мой дисплей 96х16 корректно отображает символы при установке настроек для дисплея 128х32. Именно и нужно, что ограничить разрешение в данном коде, вот только не знаю какие строки за это отвечают. Допустим есть в коде функция которая понимает что строка закончилась на 127 и переводит на новую строку. Вот где нужно поменять со 127 на 95?
 

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

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
По хорошему расковырять библиотеку и сделать свой вариант дисплея. Смотреть надо GyverOLED.h
Там вот есть такие строки:
C++:
#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)
...
Вот надо добавлять поддержку своего варианта. Все нужное прописать и заставить работать.
 

Виталийc

✩✩✩✩✩✩✩
4 Ноя 2024
5
0
@Старик Похабыч, Спасибо за информацию! Однако выход из ситуации нашел путем выставления ограничения на количество символов отображаемых на одной строчке. Для 128х64 или 128х32 это значение было 20. Я же себе поставил 16 и все заработало.
 

LiOH

✩✩✩✩✩✩✩
10 Дек 2024
1
0
Всем привет. А как эту либу подружить с SSD1306 SPI 7 pin?
С либой <Adafruit_SSD1306.h> работает норм.

Пробовал так запускать, но дисплей даже не включается
C++:
#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:

}