maniu Napisano Grudzień 17, 2017 Udostępnij Napisano Grudzień 17, 2017 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ą? Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 17, 2018 Udostępnij Grudzień 17, 2018 (edytowany) Biblioteka nie radzi sobie z niepełnymi ósemkami w poziomie. Trzeba szerokość ustawić na 80 pikseli, a nie 84. Edytowano Grudzień 17, 2018 przez radek04 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!