• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyświetlacz OLED 0,96" 128x64 biblioteki u8glib
#1
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
 
Odpowiedź
#2
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.
 
Odpowiedź
#3
Jak użyjesz biblioteki Adafruit zamiast U8G, to kod wynikowy będzie zdecydowanie mniejszy.
https://github.com/adafruit/Adafruit_SSD1306
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#4
(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?
 
Odpowiedź
#5
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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości