Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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

  • 1 rok później...
(edytowany)

Biblioteka nie radzi sobie z niepełnymi ósemkami w poziomie. Trzeba szerokość ustawić na 80 pikseli, a nie 84.

Edytowano przez radek04

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...