Skocz do zawartości

LCD PCD8544 z 74HC4050 z Arduino UNO (oryginał) [Nokia 3310 LCD] - Problem z wyświetlaniem bitmapy


maniu

Pomocna odpowiedź

Witam serdecznie grono. Wziąłem się za wyświetlacz monochromatyczny 84x48, zgodny z PCD8544, kupiony na allegro.

Korzystam w projekcie z bibliotek:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Od razu mówię, że program testowy (pcdtest) działa, własne experymenty też pomyślne. Mam natomiast chęć wyświetlania własnej, monochromatycznej bitmapy i tutaj napotkałem trudności, do których straciłem cierpliwość.

Wiem z kilkunastu źródeł, że wyświetlanie jest możliwe po wgraniu do pamięci FLASH jakieś "mapy hexagonalnej", uzyskanej za pomocą chociażby programu: LCD ASSISTANT lub IMAGE2GLCD. Oto, co robię:

1) Tworzę obraz w paincie, w rozmiarze odpowiadającym rozmiarowi wyświetlacza 84x48.

2) Konwertuję .jpg na plik .c za pomocą programu IMAGE2GLCD

3) Uzyskuję "mapę", w postaci zmiennej, do której dodaję PROGMEM, np.:

const unsigned char PROGMEM test[504] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x03, 0xFF, 0xE3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE3, 0xFF, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
0x00, 0xFC, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 
0x00, 0x03, 0x80, 0x00, 0x00, 0x0F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 
0x80, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 
0xC0, 0x00, 0x00, 0x07, 0x0C, 0x70, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x07, 0x3E, 0x70, 
0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x0E, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 

0x00, 0x0F, 0xF7, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x7F, 0xF8, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 
0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x1E, 
0x00, 0x3C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x0F, 0x80, 
0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1E, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0xE0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x8E, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x01, 0xEF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xDF, 
0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x01, 0xF8, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x1F, 0x80, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 
};

4) Fajno! Dalej wrzucam gościa, do przykładowego programu, który wydziubałem z pomocą wszelkich bibliotek:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// this file generated by Image2GLCD
const unsigned char PROGMEM test[504] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x03, 0xFF, 0xE3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE3, 0xFF, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
0x00, 0xFC, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 
0x00, 0x03, 0x80, 0x00, 0x00, 0x0F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 
0x80, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 
0xC0, 0x00, 0x00, 0x07, 0x0C, 0x70, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x07, 0x3E, 0x70, 
0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x0E, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 

0x00, 0x0F, 0xF7, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x7F, 0xF8, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 
0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x1E, 
0x00, 0x3C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x0F, 0x80, 
0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1E, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0xE0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x8E, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x01, 0xEF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xDF, 
0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x01, 0xF8, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x1F, 0x80, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 
};


void setup() {
 Serial.begin(9600);
 display.begin();
 display.setContrast(50);

 display.clearDisplay();
 display.drawBitmap(0, 0,  test, 84, 48, 1);
 display.display();


}

void loop() {
 // put your main code here, to run repeatedly:

}

display.drawBitmap(0, 0, test, 84, 48, 1); - funkcja odpowiedzialna za rysowanie (start X, start Y, nazwa_obrazu, szerokość, wysokość, 1 [w sensie kolor1=set, black])

5) Po kompilacji zamiast uzyskać obraz, nagryklany w PAINCIE: załącznik 1

6) Wychodzi jakiś makaron: załącznik 2

[btw. czemu nie mogę upać poprawnych plików graficznych?]

Idąc dalej, wiem, że jeżeli stworzę sobie wektor binarny z 1 (jako set pixel) i 0 (jako off pixel), mogę stworzyć jaki tylko obraz chcę, np.:

static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
 B00000001, B11000000,
 B00000001, B11000000,
 B00000011, B11100000,
 B11110011, B11100000,
 B11111110, B11111000,
 B01111110, B11111111,
 B00110011, B10011111,
 B00011111, B11111100,
 B00001101, B01110000,
 B00011011, B10100000,
 B00111111, B11100000,
 B00111111, B11110000,
 B01111100, B11110000,
 B01110000, B01110000,
 B00000000, B00110000 };

Ale, ale.... po

1) nie chce mi się tyle tego pisać (w końcu 84x48 małe, a pisania sporo)

2) nie znam programu, który umożliwiałby taką konwersję bmp2bin, w takim właśnie ciągu (stylu)

Moja prośba brzmi następująco:

1) czy znacie sposób, na wyświetlanie własnej botmapy, za pomocą takiego wyświetlacza?

2) czy znacie program (kod), który przerobi obraz (czarno-biały) na mapę binarną 8-bitową?

2.thumb.jpg.45e9bec808a0e15d4785ee6c7ba66f38.jpg

test.jpg.1206595dd9e2ee13f4870964620c80da.jpg

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.