Arduino Polska Forum
Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Konstrukcje (https://forum.arduinopolska.pl/dzial-konstrukcje)
+--- Wątek: Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib (/watek-wy%C5%9Bwietlacz-oled-0-96-128x64-biblioteki-u8glib)



Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - ArduinoNewbie - 01-09-2018

Witam
Od jakiegoś czasu w wolnych chwilach kontynuuję przygodę z Arduino i proszę o wyrozumiałość dla początkującego/amatora.

Już kilka dni walczę z wyświetlaczem Oled 0,96". Będzie on użyty do projektu termometru pokojowego, który będzie korzystał z dwóch czujników DS18B20 (temperatura wewnętrzna i zewnętrzna). Z założenia ma wyglądać to estetycznie, więc chciałbym, aby podczas uruchomienia kontrolera pojawiło się logo (pierwsza bitmapa) a po upływie 2-3 sekund kolejna bitmapa, która będzie uzupełniona pomiarami z czujników. 
Jak do tej pory udało mi się uzyskać pożądany efekt w wyświetleniu pierwszej bitmapy, lecz problem pojawia się przy dodaniu kolejnej.

Kod:
#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);


const uint8_t test [] PROGMEM = {
//wartości hex bitmapy//
};

void draw(void) {
 u8g.drawBitmapP(0, 0, 16, 64, test);
}

void setup(void) {
 u8g.firstPage();
 do {
   draw();
 } while( u8g.nextPage() );
 delay(1000);
 }
void loop(void) {

 }


Z bibliotek u8glib korzystam pierwszy raz i byłbym niezmiernie wdzięczny, gdyby ktoś pomógł mi rozwinąć kod, aby po wyświetleniu powitalnej bitmapy, wyświetlona została kolejna.
Z góry dziękuję za wyrozumiałość Smile


RE: Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - es2 - 01-09-2018

Najprostsze rozwiązanie, tak jak wyświetlasz pierwszą bitmapę wyświetl i drugą po zadanym czasie.
Trochę więcej zabawy aby na ową bitmapę nanieść wyniki pomiarów. Najłatwiej to zrobić gdy masz bufor wyświetlacza w RAM. Nie piszesz ile RAM ma uC w Arduino, którego użyłeś, więc trzeba zgadywać, że to pewnie UNO. Mega328 w UNO ma śladowe ilości RAM. Bufor wyświetlacza pochłonie połowę pamięci UNO. Czy to co zostanie wystarczy na resztę zadań? Mnie by wystarczyło ale nie piszę w C++ i nie używam niedopracowanych bibliotek Arduino.
Zakładam, że RAM wystarczy, musisz więc:
- skopiować bitmapę do bufora w RAM.
- nanieść wyniki pomiaru do bufora w RAM
- skopiować bufor do wyświetlacza

Jeśli chcesz zużyć mało RAM, to sprawa się komplikuje, zacznij więc od prostego rozwiązania z buforem w RAM.


RE: Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - Robson Kerman - 02-09-2018

Jak użyjesz biblioteki Adafruit zamiast U8G, to kod wynikowy będzie zdecydowanie mniejszy.
https://github.com/adafruit/Adafruit_SSD1306


RE: Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - es2 - 02-09-2018

(02-09-2018, 00:29)Robson Kerman napisał(a): Jak użyjesz biblioteki Adafruit zamiast U8G, to kod wynikowy będzie zdecydowanie mniejszy.

Można też napisać samemu. Wystarczy gotową, działającą bibliotekę zmodyfikować na swoje potrzeby. Po co np funkcje rysujące kółka jak sie ich nie używa?


RE: Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib - ArduinoNewbie - 02-09-2018

Dziękuję za wszystkie odpowiedzi!
Użyłem bibliotek Adafruit_SSD1306, które okazały się znacznie prostsze w obsłudze i po skompilowaniu projekt zajmuje zdecydowanie mniej pamięci Smile
Uzyskałem dokładnie taki efekt, jakiego oczekiwałem. Teraz pozostało mi czekać na dostarczenie czujników temperatury i podłączenie wszystkiego.
Jeszcze raz wszystkim dziękuję za pomoc Smile