GyverLibs / GyverOLED

Лёгкая и быстрая библиотека для OLED дисплея
MIT License
124 stars 20 forks source link

Проблема с частичным обновлением SH1106. #48

Open koreshforever opened 4 months ago

koreshforever commented 4 months ago

Частичное обновление на дисплеях SH1106 работает некорректно. Проверил на Arduino Nano и на NodeMCU 1.0. При попытке частичного обновления, фрагмент появляется в непредсказуемых местах и растянут по горизонтали. При полном обновлении проблем не наблюдается.

IMG_20240714_151405

#include <GyverOLED.h>

GyverOLED<SSH1106_128x64> oled(0x3C);     

void setup() {
  oled.init();
  oled.clear();
  oled.setContrast(0);
  oled.setCursor(0, 0);
  oled.print("TEST");
  oled.update();

  delay(1000);
}

void loop() {
  oled.clear();
  oled.setCursor(0, 0);
  oled.print(millis());
  oled.setCursor(0, 2);
  oled.print(millis());
  oled.setCursor(0, 4);
  oled.print(millis());
  oled.setCursor(0, 6);
  oled.print(millis());

  oled.update(0, 16, 64, 32);
}
Tlinmo commented 4 months ago

Я не знаю насколько это правильно, но поставил контраст 0... Попробуй с 255. Я проверил со своим SSD1306 с режимом буфера с таким кодом и у меня все заработало(скорее всего библа работает норм и проблема на твоей стороне, за слова не ручаюсь):

#include <GyverOLED.h>

GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;  

void setup() {
  oled.init();        // инициализация
  oled.setScale(1);

  Wire.setClock(800000L);   // макс. 800'000

  oled.clear();       // очистка
  oled.update();
  oled.setContrast(255);
  oled.setCursor(0, 0);
  oled.print("TEST");
  oled.update();

  delay(1000);
}

void loop() {
  oled.clear();
  oled.setCursor(0, 0);
  oled.print(millis());
  oled.setCursor(0, 2);
  oled.print(millis());
  oled.setCursor(0, 4);
  oled.print(millis());
  oled.setCursor(0, 6);
  oled.print(millis());

  oled.update(0, 16, 64, 32);
}