Git Product home page Git Product logo

gyveroled's Introduction

latest PIO Foo Foo Foo

Foo

GyverOLED

Лёгкая и быстрая библиотека для OLED дисплея

  • Поддержка OLED дисплеев на SSD1306/SSH1106 с разрешением 128х64 и 128х32 с подключением по I2C и SPI
  • Выбор буфера
    • Вообще без буфера (и без особой потери возможностей)
    • Буфер на стороне МК (тратит кучу оперативки, но удобнее в работе)
    • Обновление буфера в выбранном месте (для быстрой отрисовки)
    • Динамический буфер выбранного размера (вся геометрия, текст, байты)
    • TODO: Буфер на стороне дисплея (только для SSH1106!!!)
  • Вывод текста
    • Самый быстрый вывод текста среди OLED библиотек
    • Поддержка русского языка и буквы ё (!)
    • Более приятный шрифт (по сравнению с beta)
    • Координаты вне дисплея для возможности прокрутки
    • Вывод текста в любую точку (попиксельная адресация)
    • Полноэкранный вывод с удалением лишних пробелов
    • 4 размера букв (на базе одного шрифта, экономит кучу памяти!)
    • Возможность писать чёрным-по-белому и белым-по-чёрному
  • Управление дисплеем
    • Установка яркости
    • Быстрая инверсия всего дисплея
    • Включение/выключение дисплея из скетча
    • Изменение ориентации дисплея (зеркально по вертикали и горизонтали)
  • Графика (контур, заливка, очистка)
    • Точки
    • Линии
    • Прямоугольники
    • Прямоугольники со скруглёнными углами
    • Окружности
    • Кривые Безье
  • Изображения (битмап)
    • Вывод битмапа в любую точку дисплея
    • Вывод "за дисплей"
    • Программа для конвертации изображений есть в библиотеке
  • Поддержка библиотеки microWire для ATmega328 (очень лёгкий и быстрый вывод)

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию GyverOLED и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Инициализация

// I2C
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<SSH1106_128x64> oled;                     // только программный буфер
// конструктору можно передать адрес oled(0x3C)

// SPI
GyverOLED<SSD1306_128x64, OLED_BUFFER, OLED_SPI, CS, DS, RST> oled;
// где CS, DS, RST - цифровые пины
// дисплей подключается D0 к SCK, D1 к MOSI

// примечание: можно разогнать шину i2c для увеличения скорости обновления дисплея. Вызвать
// Wire.setClock(800000L);
// после init() инициализации дисплея
// примечание: не все другие i2c модули и датчики будут работать на такой частоте!

Использование

// ===== СЕРВИС =====
void init();                    // инициализация
void init(sda, scl);            // инициализация (можно указать пины i2c для esp8266/32)

void clear();                   // очистить дисплей
void clear(int x0, int y0, int x1, int y1); // очистить область
void setContrast(uint8_t value);    // яркость 0-255 (умолч. 127)
void setPower(bool mode);       // вкл/выкл
void flipH(bool mode);          // отразить по горизонтали
void invertDisplay(bool mode);  // инвертировать дисплей
void flipV(bool mode);          // отразить по вертикали

// ==== НАСТРОЙКИ ===
// дефайны ПЕРЕД подключением библиотеки
#define OLED_NO_PRINT   // отключить модуль вывода текста. Экономит ~2.5 кБ Flash
#define OLED_SPI_SPEED  // скорость SPI

// ===== ПЕЧАТЬ =====
// наследует класс Print, то есть print/println любой тип данных

void autoPrintln(bool mode);    // автоматически переносить текст
void home();                    // отправить курсор в 0,0
void setCursor(int x, int y);   // поставить курсор для символа столбец 0-127, строка 0-8(4)
void setCursorXY(int x, int y); // поставить курсор для символа столбец 0-127, пиксель 0-63(31)
void setScale(uint8_t scale);   // масштаб шрифта (1-4)
void invertText(bool inv);      // инвертировать текст (0-1)
bool isEnd();                   // возвращает true, если дисплей "кончился" - при побуквенном выводе

void textMode(byte mode);       // режим отрисовки текста
BUF_ADD - добавить
BUF_SUBTRACT - вычесть
BUF_REPLACE - заменить

// ===== ГРАФИКА =====
// далее fill:
OLED_CLEAR - очистить область под фигурой
OLED_FILL - залить фигуру
OLED_STROKE - обвести фигуру

void dot(int x, int y, byte fill);                      // точка (заливка 1/0)
void line(int x0, int y0, int x1, int y1, byte fill);   // линия (x0, y0, x1, y1)
void fastLineH(int y, int x0, int x1, byte fill);       // горизонтальная линия
void fastLineV(int x, int y0, int y1, byte fill);       // вертикальная линия
void rect(int x0, int y0, int x1, int y1, byte fill);   // прямоугольник (лев. верхн, прав. нижн)	
void roundRect(int x0, int y0, int x1, int y1, byte fill);  // прямоугольник скруглённый (лев. верхн, прав. нижн)
void circle(int x, int y, int radius, byte fill);       // окружность (центр х, центр у, радиус, заливка)
void bezier(int* arr, uint8_t size, uint8_t dense, uint8_t fill);   // кривая Безье

// вывести битмап
// invert - BITMAP_NORMAL/BITMAP_INVERT инвертировать
// mode BUF_ADD / BUF_SUBTRACT / BUF_REPLACE
void drawBitmap(int x, int y, const uint8_t *frame, int width, int height, uint8_t invert = 0, byte mode = 0);

void fill(uint8_t data);                        // залить весь дисплей указанным байтом
void drawByte(uint8_t data);                    // шлёт байт в "столбик" setCursor() и setCursorXY()
void drawBytes(uint8_t* data, byte size);       // вывести одномерный байтовый массив (линейный битмап высотой 8)
void update();                                  // полностью обновить дисплей из буфера
void update(int x0, int y0, int x1, int y1);    // выборочно обновить дисплей из буфера (x0, y0, x1, y1)

Дисплей по SPI + SD карта

известная беда SD карт http://elm-chan.org/docs/mmc/mmc_e.html, пункт Cosideration on Multi-slave Configuration. Как решить: после завершения общения с картой памяти нужно отпустить CS карты (библа SD возможно сама это делает, либо отпустить вручную) и закинуть по SPI пару байт (пару нулей условно). Почему - карта держит линию даты.

Пример

Остальные примеры смотри в examples!

// дефайн перед подключением либы - использовать microWire (лёгкая либа для I2C)
//#define USE_MICRO_WIRE

// дефайн перед подключением либы - скорость SPI
//#define OLED_SPI_SPEED 4000000ul

#include <GyverOLED.h>

// инициализация:
// GyverOLED<модель, буфер, интерфейс, CS, DC, RST> oled;
// "по умолчанию" - можно не указывать

// модель дисплея:
// SSD1306_128x32
// SSD1306_128x64
// SSH1106_128x64 (ТОЛЬКО С БУФЕРОМ)

// буфер:
// OLED_NO_BUFFER (без буфера)
// OLED_BUFFER (с буфером на стороне МК) - по умолчанию

// интерфейс:
// OLED_I2C - по умолчанию
// OLED_SPI (указать пины CS, DC, RST/RES)

// примеры:
//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;

// для I2C можно передать адрес: GyverOLED oled(0x3C);

// битмап создан в ImageProcessor https://github.com/AlexGyver/imageProcessor
// с параметрами вывода vertical byte (OLED)
const uint8_t bitmap_32x32[] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x70, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x20, 0x00, 0x00,
  0x00, 0x30, 0x78, 0xFC, 0x7F, 0x3F, 0x0F, 0x0F, 0x1F, 0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x40, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0x7F, 0x33, 0x13, 0x1E, 0x1C, 0x1C, 0x0E, 0x07, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xF7, 0xEF, 0x5F, 0x3F, 0x7F, 0xFE, 0xFD, 0xFB, 0xF1, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x33, 0x33, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x1F, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
};

void setup() {
  Serial.begin(9600);
  oled.init();  // инициализация

  // --------------------------
  // настройка скорости I2C
  //Wire.setClock(800000L);   // макс. 800'000

  // --------------------------
  oled.clear();   // очистить дисплей (или буфер)
  oled.update();  // обновить. Только для режима с буфером! OLED_BUFFER

  // --------------------------
  oled.home();            // курсор в 0,0
  oled.print("Hello!");   // печатай что угодно: числа, строки, float, как Serial!
  oled.update();
  delay(2000);

  // --------------------------
  oled.setCursor(5, 1);   // курсор в (пиксель X, строка Y)
  oled.setScale(2);
  oled.print("Hello!");
  oled.update();
  delay(2000);

  // --------------------------
  oled.setCursorXY(15, 30); // курсор в (пиксель X, пиксель Y)
  oled.setScale(3);
  oled.invertText(true);    // инвертируй текст!
  oled.print("Привет!");
  oled.update();
  delay(2000);

  // --------------------------
  oled.clear();
  oled.home();
  oled.setScale(1);
  oled.invertText(false);
  oled.autoPrintln(true);   // автоматически переносить текст
  oled.print(F("Lorem ipsum dolor sit amet, лорем ипсум долор сит амет привет народ ё, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam"));
  oled.update();
  delay(2000);

  // --------------------------
  oled.home();
  oled.textMode(BUF_ADD);
  // BUF_ADD - наложить текст
  // BUF_SUBTRACT - вычесть текст
  // BUF_REPLACE - заменить (весь прямоугольник буквы)
  oled.home();
  oled.setScale(3);
  oled.print("KEK!");
  oled.update();
  delay(2000);

  // --------------------------
  // СЕРВИС
  //oled.setContrast(10);   // яркость 0..15
  //oled.setPower(true);    // true/false - включить/выключить дисплей
  //oled.flipH(true);       // true/false - отзеркалить по горизонтали
  //oled.flipV(true);       // true/false - отзеркалить по вертикали
  //oled.isEnd();           // возвращает true, если дисплей "кончился" - при побуквенном выводе

  // --------------------------
  oled.clear();
  oled.dot(0, 0);     // точка на x,y
  oled.dot(0, 1, 1);  // третий аргумент: 0 выкл пиксель, 1 вкл пиксель (по умолч)
  oled.line(5, 5, 10, 10);        // линия x0,y0,x1,y1
  //oled.line(5, 5, 10, 10, 0);   // пятый аргумент: 0 стереть, 1 нарисовать (по умолч)
  oled.fastLineH(0, 5, 10);       // горизонтальная линия (y, x1, x2)
  //oled.fastLineH(0, 5, 10, 0);  // четвёртый аргумент: 0 стереть, 1 нарисовать (по умолч)
  oled.fastLineV(0, 5, 10);       // аналогично верт. линия (x, y1, y2)
  oled.rect(20, 20, 30, 25);      // прямоугольник (x0,y0,x1,y1)
  oled.rect(5, 35, 35, 60, OLED_STROKE);      // прямоугольник (x0,y0,x1,y1)
  // параметры фигуры:
  // OLED_CLEAR - очистить
  // OLED_FILL - залить
  // OLED_STROKE - нарисовать рамку
  oled.roundRect(50, 5, 80, 25, OLED_STROKE);  // аналогично скруглённый прямоугольник
  oled.circle(60, 45, 15, OLED_STROKE);        // окружность с центром в (x,y, с радиусом)
  oled.circle(60, 45, 5, OLED_FILL);           // четвёртый аргумент: параметр фигуры

  // битмап
  oled.drawBitmap(90, 16, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
  //oled.drawBitmap(90, 16, bitmap_32x32, 32, 32);  // по умолч. нормал и BUF_ADD
  // x, y, имя, ширина, высота, BITMAP_NORMAL(0)/BITMAP_INVERT(1), BUF_ADD/BUF_SUBTRACT/BUF_REPLACE
  
  oled.update();
}

void loop() {
}

Версии

  • v0.1 (27.02.2021) - исправил непечатающуюся нижнюю строку

  • v0.2 (16.03.2021) - исправлены символы [|]~$

  • v0.3 (26.03.2021) - добавил кривую Безье

  • v0.4 (10.04.2021) - совместимость с есп

  • v0.5 (09.05.2021) - добавлена поддержка SPI и SSH1106 (только буфер)! gnd-vcc-sck-data-rst-dc-cs

  • v1.0 - релиз

  • v1.1 - улучшен перенос строк (не убирает первый символ просто так)

  • v1.2 - переделан FastIO

  • v1.3 - прямоугольники можно рисовать из любого угла

  • v1.3.1 - пофиксил линии (сломались в 1.3.0)

  • v1.3.2 - убран FastIO

  • v1.4 - пофикшены SPI дисплеи

  • v1.5 - пофикшен битый вывод после очистки без указания курсора

  • v1.6 - добавлен выбор пинов I2C для espX, исправлен clear(..) для BUFFER, добавлена возможность отключить модуль текста

  • v1.6.1 - повторный релиз для менеджера библиотек

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту [email protected]
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

gyveroled's People

Contributors

alexgyver avatar gyverlibs avatar mzhuvka avatar tarampampam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gyveroled's Issues

SPI SCK and MOSI change

Добавьте, пожалуйста, возможность изменения адресов SCK и MOSI для SPI интерфейса.
У меня используются другие контакты, не смог разобраться как изменить.
"дисплей подключается D0 к SCK, D1 к MOSI"
П.С. не нашёл как буквы Ш и Щ отображаются?

Добавить логирование

Добрый день! Все прекрасно, но хорошо бы чтобы был функционал вывода на экран лога - чтобы по мере добавления новых строк, старое затиралось и картинка двигалась вверх. В общем чтобы можно было выводить логи работы устройства.

ESP8266 + SH1106 - Demo/oledPrintTest – error, reboot

Перезагрузка с ошибкой во время прокрутки текста.

16:06:31.199 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
16:06:31.199 -> 
16:06:31.199 -> load 0x4010f000, len 3584, room 16 
16:06:31.232 -> tail 0
16:06:31.232 -> chksum 0xb0
16:06:31.232 -> csum 0xb0
16:06:31.232 -> v2843a5ac
16:06:31.232 -> ~ld

error ESP32

in microWire.cpp

'TWBR' was not declared in this scope
'TWSR' was not declared in this scope
'TWCR' was not declared in this scope
'TWEN' was not declared in this scope
'TWIE' was not declared in this scope

platformio, lolin 32d pro board

[CRIT] NO_BUFFER флаг FILL не работает

...
371#    void dot(int x, int y, byte fill = 1) { 
...
381# sendByte(1 << (y & 0b111));    // задвигаем 1 на высоту y
..

а почему собственно "1", а не "fill" ?
из-за этого в режиме без буффера флаг fill не работает

Как сделать, чтобы update() не очищал экран

Добрый день! Мне нужно, чтобы всё ранее нарисованное изображение оставалось на экране. Но update() очищает буфер. Как это исправить? Дисплей подключён по SPI.

#define OLED_SPI_SPEED 4000000ul
#include <GyverOLED.h>

GyverOLED<SSD1306_128x64, OLED_BUFFER, OLED_SPI, 6, 7, 8> oled;

uint32_t timer;
int period = 10;
byte xpos, ypos = 0;

void setup() {
  oled.init();
  timer = millis();
}

void loop() {
  if(millis() - timer >= period) {
    timer += period;
    int xpos1 = (xpos + 3) & 127;
    int ypos1 = (ypos + 2) & 63;
    
    oled.circle(xpos, ypos, 5, OLED_FILL);
    oled.update();
    
    xpos = xpos1;
    ypos = ypos1;
  }
}

Маштабирование неприятный эффект SSD1306

Если маштабировать цифры то появляется неприятный эффект. В моём случае сделал тахометр всё работало нормально. Решил увеличить размер вывода и получается что первый столбец пикселей пропадает или мигает . Чем больше маштаб тем больше столбцов пропадает. Без маштабирования выводится нормально. Дисплей SSD1306 128x64 no buffer.

Глюки при отображении картинок на экране sh1106 128x64

Это происходит не со всеми картинками, но в основном с теми что по крупней(бывало и с мелкими иконками). Под картинкой появляется белая полоса, или весь экран заполняется хаотично символами и т.д. Запускал из стандартного примера oled_demo, sh1106 128x64px i2c. Картинку конвертировал через вложенную программу к вашей библиотеки.

Вот пример картинки с которой вылазиет глюк:
https://disk.yandex.ru/i/mQPA-3yG8c5m3A

А вот так это выглядит:
https://disk.yandex.ru/i/C-gArP0gmUdC9w

English doc pls

Hi there,
the library is really good and easy to use, I like it but I don't understand Russian so it's very exhausting to use the library.

Can someone translate it to english? It's enough if you just explain the functions what they do etc. no need to translate everything.

is % symbol supported?

I'm formatting a string containing a percentage symbol. Printing it using Serial.printf provides the following output

Temp: 18.42 C
R.Hum: 66.73 %
Press: 914.75 hPa
Brightness: 7

on the OLED display I see the same output without %

Temp: 18.42 C
R.Hum: 66.73
Press: 914.75 hPa
Brightness: 7

is the % symbol supported?

Arduino IDE 2.0.0 не компилирует для esp32

После выхода 2 версии IDE начал потихоньку переносить свои проекте. И проект с GyverOLED отказался компилироваться. Начал разбираться и понял что примеры из библиотеки тоже не копулируются. При чем на Arduino IDE 1.8.19 все работает нормально. Везде стоит GyverOLED 1,5 и менеджер платы esp32 1.0.6 отличия только в IDE. Пробовал компилировать ардуино и esp8266 все получается, а вот esp32 не хочет. Вначале подумал на кириллицу в адресе, но другие библиотеки работают нормально , да и проблема только с компиляцией для esp32. Мне кажется что в новой IDE по другому компилирует и то что раньше "некоторые предупреждения" допускались, то с новой "интерпретируются как ошибки" и не дают компилироваться.

Версия: IDE2.0.0
Дата: 2022-09-14T07:06:37.759Z
Версия CLI: 0.27.1 [a900cfb2]

лог

In file included from C:\Users\Администратор\AppData\Local\Temp.arduinoIDE-unsaved202292-2916-rtwq2w.nrhhp\oled_demo\oled_demo.ino:7:0:
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h: In instantiation of 'void GyverOLED<_TYPE, _BUFF, _CONN, _CS, _DC, _RST>::fastLineH(int, int, int, byte) [with int _TYPE = 2; int _BUFF = 1; int _CONN = 0; signed char _CS = -1; signed char _DC = -1; signed char _RST = -1; byte = unsigned char]':
C:\Users\Администратор\AppData\Local\Temp.arduinoIDE-unsaved202292-2916-rtwq2w.nrhhp\oled_demo\oled_demo.ino:114:26: required from here
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:412:28: error: operation on 'x1' may be undefined [-Werror=sequence-point]
if (x0 > x1) _swap(x0, x1);
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:147:21: note: in definition of macro '_swap'
#define _swap(x, y) x = x ^ y ^ (y = x)
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h: In instantiation of 'void GyverOLED<_TYPE, _BUFF, _CONN, _CS, _DC, _RST>::fastLineV(int, int, int, byte) [with int _TYPE = 2; int _BUFF = 1; int _CONN = 0; signed char _CS = -1; signed char _DC = -1; signed char _RST = -1; byte = unsigned char]':
C:\Users\Администратор\AppData\Local\Temp.arduinoIDE-unsaved202292-2916-rtwq2w.nrhhp\oled_demo\oled_demo.ino:116:26: required from here
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:441:28: error: operation on 'y1' may be undefined [-Werror=sequence-point]
if (y0 > y1) _swap(y0, y1);
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:147:21: note: in definition of macro '_swap'
#define _swap(x, y) x = x ^ y ^ (y = x)
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h: In instantiation of 'void GyverOLED<_TYPE, _BUFF, _CONN, _CS, _DC, _RST>::rect(int, int, int, int, byte) [with int _TYPE = 2; int _BUFF = 1; int _CONN = 0; signed char _CS = -1; signed char _DC = -1; signed char _RST = -1; byte = unsigned char]':
C:\Users\Администратор\AppData\Local\Temp.arduinoIDE-unsaved202292-2916-rtwq2w.nrhhp\oled_demo\oled_demo.ino:117:27: required from here
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:483:28: error: operation on 'x1' may be undefined [-Werror=sequence-point]
if (x0 > x1) _swap(x0, x1);
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:147:21: note: in definition of macro '_swap'
#define _swap(x, y) x = x ^ y ^ (y = x)
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:484:28: error: operation on 'y1' may be undefined [-Werror=sequence-point]
if (y0 > y1) _swap(y0, y1);
^
c:\Users\�������������\Documents\Arduino\libraries\GyverOLED\src/GyverOLED.h:147:21: note: in definition of macro '_swap'
#define _swap(x, y) x = x ^ y ^ (y = x)
^
cc1plus.exe: some warnings being treated as errors

exit status 1

Compilation error: exit status 1

P.S. Во время написания Issues решил погонять другие библиотеки гайвера которые у меня стояли и похожая проблема c esp32 1.0.6 возникла в новой среде с GyverTM1637 хотя лог немного другой. Возможно проблемы есть с другими старыми библиотеками.
GyverMotor я так понял вообще не поддерживает esp32
А вот с EncButton, GyverStepper, GyverPortal проблем никаких не было.

Проблема не существенная и легко обходиться, но для новичков которые начинают с 2.0 могут не понять что проблема в IDE

Совместимость с cmake

После обновления FastIO.h при попытке компилировать проект с помощью cmake выбрасывается ошибка
invalid conversion from ‘volatile uint8_t* {aka volatile unsigned char*}’ to ‘uint8_t* {aka unsigned char*}’ в нескольких строках (24,25,46,47,62,63). Если добавить volatile к переменным то все работает (я тестировал на дисплее и Mega 2560). Возможно ли добавить эти изменения в основной код (если надо - создам ПР)? Но боюсь что то сломать потому и спрашиваю )

Спасибо

Переназначение портов i2c

Добавьте, пожалуйста, возможность переназначения портов I2c, по аналогии с Wire.begin(sda, scl).
Это важно для комфортного применения данной библиотеки на Wemos D1 mini.

Линии без буфера

Режим без буфера.
Когда наклон линии ближе к вертикали (<45°), линия рассыпается на отдельные точки. Как я понял отрисовка следующей точки затирает предыдущую в этом столбце строки (у него отрисовка графики в текстовом режиме?).
У меня одного так?
oled 128х64, закупал пачку очень давно (лет 7 назад). SPI, 6 контактный.

Доделайте пожалуйста шрифты

очень не хватает шрифтов больших.
масштабирование маленького не очень красиво выглядит. самому не получается нифига прикрутить свои шрифты .

Symbol degree ° are supported?

Alex, i try out degree symbol ° (ALT+0176), but out "a" symbol
Алекс, я попробовал вывести символ градуса ° (ALT+0176), но выводится мелкая буква "а"

String text = bme.readTemperature() + "°C";
oled.setScale(2);
oled.setCursor(0,0);
oled.print(text);

Ожидаемое/Expected 27.74°C
Выводится/Output 27.74aC

не подключается oled spi

помогите делаю всё по инструкции а изображение не выводится использую arduino nano и uno нигде не работает

SSH1106 использование встроенного буфера

Правильно ли я понял, что если использовать SSH1106 то можно использовать его буфер, тем самым не использовать динамическую память микроконтроллера? Сейчас нет такого дисплея, чтобы проверить. Если так, думаю заказать себе таких дисплеев.

Selective Clear on SSH1106

I´ve edited the selective Clear function, changing _TYPE < 2 to TYPE <= 2

The function works just fine with my SSH1106, I´m posting this issue because in the library it says that is only for the 1306

Копирование буфера

Здравствуйте. Не уверен, есть ли такая возможность. Хотелось бы иметь.

Копирование подразумеваю - copy(srcX,srcY,srcW,srcH, dstX, dstY)

Нужна возможность клипирования зоны для такой операции.

Мне эта фича понадобилась в такой задаче - на экран выводится график в реальном времени. Сейчас приходится вывод зацикливать, затирая старые значения. А вот с фичей копирования можно было бы сделать скроллинг.

Если по вашей оценке всё для этого есть, но нет времени на задачу, готов залезть в код и сделать пулреквест.

Форматирование текн

Пользуюсь библиотекой, очень лекгая, понятная, но не хватает расположения текста.

На пример при выводе числа, 4 значного, потом уменьшая его, остаются цифры в конце. Можно конечно очищать дисплей, но это моргание текста.

Шум на экране SSD1306 при подключении через SPI вместе с адаптером для SD карт

SPI экран модели SSD1306 при одновременном подключении с адаптером microSD карт выдает случайные пиксели по всему экрану (похоже на белый шум). Проверил оба элемента отдельно - работают исправно, но вместе нет

Может ли это быть из-за особенностей поддержки SPI в библиотеке?

Некорректное отображение

Добрый день!
Имею SSD1306 с возможностью смены I2C адреса с 0x3C на 0x3D. Перепаял перемычку.
В результате экран отображает данные с разрывами горизонтальных линий пикселей через одну: получается текст в полосках.
Не знаете в чем может быть проблема?

P.S. Такая же ситуация и с вертикальными линиями((

Невозможно близко подогнать текст в прямоукольнике

Экран 1306 (128х64), Arduino Nano.
Пример:

oled.rect(0, 10, 127, 40, OLED_STROKE); // Draw rect
oled.setScale(2);
oled.setCursorXY(40, 16);
oled.print("10.80");

Так всё ок, но там еще есть куча места вверху, поднимаем на -1, oled.setCursorXY(40, 15); и число наезжает на прямоугольник. Снизу такое не наблюдается. Может посоветуете что-то?

Can't seem to type "ä, ö, ü"?

Hello!

Sorry for the silly question. Is there a way to type "a", "ö", "ü"? When doing so, the display instead shows the standard replacement character ("?" in a Rhombus).

Thanks in advance for any help!

Низкий FPS

Прошу явно указать в примерах и описании что параметр Wire.setClock(800000L); сильно влияет на FPS и что без нее высокой частоты не добиться

clear(int x0, int y0, int x1, int y1)

  1. Координаты задаются относительно текущей позиции курсора. О таком следует или предупреждать, или сделать, чтобы отчет был относительно начала координат (левый верхний угол дисплея).
  2. нельзя очищать не кратное 8 число пикселей. Тоесть при y = 5, оно очистит от у = 0, до у = 7.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.