• 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
Bitmapa dla OLED 128x64
#1
Hej, jak w temacie, grafik ze mnie żaden ale staram się zrobić plik BMP dla OLEDa.
Biblioteki jakie użyłem to:
Kod:
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>

Kod generuję z pliku BMP (w załączniku) na stronie:
http://javl.github.io/image2cpp/

wygenerowany kod:
Kod:
static const unsigned char PROGMEM TEMP [] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 
  0x1f, 0xe0, 0x00, 0x00, 0x01, 0xc1, 0xc0, 0x00, 0x00, 0x06, 0x01, 0x80, 0x00, 0x00, 0x18, 0x06, 
  0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0x03, 0x00, 0x30, 0x00, 0x3f, 0xcd, 0xfe, 0xc0, 0x00, 
  0x00, 0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0xec, 0x00, 0x01, 0xf3, 0x7f, 0xb0, 0x00, 0x00, 0x0d, 
  0xfe, 0xc0, 0x00, 0x00, 0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0xec, 0x00, 0x00, 0x03, 0x7f, 0xb0, 
  0x00, 0x00, 0x0d, 0xfe, 0xc0, 0x00, 0x00, 0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0xec, 0x00, 0x00, 
  0x03, 0x7f, 0xb0, 0x00, 0x00, 0x0d, 0xfe, 0xc0, 0x00, 0x00, 0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 
  0xec, 0x00, 0x00, 0x03, 0x7f, 0xb0, 0x00, 0x00, 0x0d, 0xfe, 0xc0, 0x00, 0x00, 0x37, 0xfb, 0x00, 
  0x00, 0x00, 0xdf, 0xec, 0x00, 0x00, 0x03, 0x7f, 0xb0, 0x00, 0x00, 0x0d, 0xfe, 0xc0, 0x00, 0x00, 
  0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0xec, 0x00, 0x00, 0x03, 0x7f, 0xb0, 0x00, 0x00, 0x0d, 0xfe, 
  0xc0, 0x00, 0x00, 0x37, 0xfb, 0x00, 0x00, 0x00, 0xdf, 0xec, 0x00, 0x00, 0x07, 0x7f, 0xb0, 0x00, 
  0x00, 0x39, 0xfc, 0x70, 0x00, 0x01, 0xcf, 0xfc, 0xe0, 0x00, 0x0c, 0xff, 0xfd, 0xc0, 0x00, 0x77, 
  0xff, 0xfb, 0x00, 0x01, 0xbf, 0xff, 0xf6, 0x00, 0x0d, 0xff, 0xff, 0xf8, 0x00, 0x37, 0xff, 0xff, 
  0xb0, 0x01, 0xbf, 0xff, 0xfe, 0x40, 0x06, 0xff, 0xff, 0xfb, 0x00, 0x1b, 0xff, 0xff, 0xf4, 0x00, 
  0x6f, 0xff, 0xff, 0xd0, 0x01, 0xbf, 0xff, 0xff, 0x40, 0x06, 0xff, 0xff, 0xfd, 0x00, 0x1b, 0xff, 
  0xff, 0xec, 0x00, 0x3f, 0xff, 0xff, 0xb0, 0x00, 0xdf, 0xff, 0xfe, 0xc0, 0x01, 0x3f, 0xff, 0xf6, 
  0x00, 0x06, 0xff, 0xff, 0xd8, 0x00, 0x1d, 0xff, 0xfe, 0xc0, 0x00, 0x3b, 0xff, 0xf6, 0x00, 0x00, 
  0x73, 0xfe, 0x30, 0x00, 0x00, 0xe3, 0xe3, 0x80, 0x00, 0x00, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0xff, 
  0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f
};

Kod rysowania grafiki w kodzie:

Kod:
  display.drawBitmap(0, 0,  TEMP, 38, 63, 1);
  display.display();

rezultat:
   

Ktoś podpowie co robię nie tak ?
Wydaje się jakby był przekoszony o 45*.


Załączone pliki
.bmp   MAX.bmp (Rozmiar: 3.58 KB / Pobrań: 3)
 
Odpowiedź
#2
Przyczyn może byc wiele:
- zły plik wejściowy
- źle ustawiona rozdzielczość pozioma, pionowa
- źle ustawiona organizacja ekranu

Poszukaj konwertera oferującego więcej opcji i oferującego podgląd wczytanego obrazka.
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0, MC683xx, Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#3
Wdg tego jet wszystko OK, rozdzielsczość, głębia, ilość kolorów a wychodzi przekoszony. LCD-Asustant daje ten sam wynik (czyli zły).
 
Odpowiedź
#4
(03-10-2018, 20:20)error105 napisał(a): Wdg tego jet wszystko OK, rozdzielsczość, głębia, ilość kolorów a wychodzi przekoszony. LCD-Asustant daje ten sam wynik (czyli zły).

Skoro tak,to biblioteka graficzna dla Arduino lub jej konfiguracja jest zła.

A jak ustawiasz parametry konwersji obrazu?
Jaka rozdzielczość ma obraz wejściowy?
Na 90% tu popełniasz błąd.
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0, MC683xx, Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#5
Użyj konwertera od Adafruit. Kod z bitmapy można generować na wiele sposobów, Adafruit ma jakiś pokręcony, ale z ich konwerterem działać powinno: https://learn.adafruit.com/steampunk-cam...s-and-code
 
Odpowiedź
#6
(03-10-2018, 22:24)es2 napisał(a): A jak ustawiasz parametry konwersji obrazu?
Jaka rozdzielczość ma obraz wejściowy?
Na 90% tu popełniasz błąd.

ArduinoCode, Horizontal (vertical daje to samo), rozdzielczość ta sama co obrazka.
Sam narysowałem w gimpie rysunek, ma tylko dwa kolory i ma tą sama rozdzielczość co chce mieć na wyświetlaczu.

(03-10-2018, 22:37)kaczakat napisał(a): Użyj konwertera od Adafruit. Kod z bitmapy można generować na wiele sposobów, Adafruit ma jakiś pokręcony, ale z ich konwerterem działać powinno:  https://learn.adafruit.com/steampunk-cam...s-and-code

Konwenter od Adafruid żadnego obrazka nigdy nie pociął mi dobrze, w tym wypadku efekt jest jeszcze gorsyz bo nawet nie widać zarysu tego co miało być widać Smile


Zawsze używam albo exkport do bitmapy gimpa albo stronę co podałem, ale przy tym jednym konkretnym obrazku w żadnym z tych wypadków nie wyświetla się to co chcę Sad
 
Odpowiedź
#7
Liczba danych się zgadza
display.drawBitmap(0, 0, TEMP, 38, 63, 1);
czyli rozmiar obrazka to 38*63/8 = 299,25 bajta
static const unsigned char PROGMEM TEMP [] ma (16*18+12) czyli 300 bajtów. Tu jest ok.
Zobacz funkcję drawBitmap(0, 0, TEMP, 38, 63, 1); czy nie ma w niej błędu.

W wyświetlaczach kolorowych ustawia się okno wyświetlania i kierunek, następnie wysyła dane jak leci, kontroler je umieści jak trzeba.
W monochromatcznych jest inaczej. Nie ma okna wyświetlania i trzeba w odpowiednim miejscu umieścić rozkaz ustawiający miejsce od krórego dane mają być zapisywane w pamięci kontrolera. Ponadto, ekran jest podzielony na strony, które też trzeba ustawiać. Fotka wygląda tak, jakby dane były wysyłane bez ustawiania w odpowiednim momencie adresu w kontrolerze.

Jest jeszcze jeden "kruczek". Organizacja danych w wyświetlaczu. Odwzorowanie bajtu może być w pionie albo w poziomie i to w sposób taki jak w VIC C-64. OLED, którego używasz ma odwzorowanie w pionie. Tu akurat nie masz z tym problemy, bo piszesz, że cało ekranowe są ok.
Stawiam więc na skaszanioną obsługę drawBitmap.
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0, MC683xx, Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#8
W samej funkcji drawBitmap nie ma raczej błedu bo inny rysunek który zrobiłem dosłownie 2h przed tym który nie działa, działa idealnie jak trzeba.
Nie mam pojęcia czemu coś się pokasztaniło, bo jak chciałem znowu ten poprzedni wygenerowac to też są krzaki a nie obraz Sad
 
Odpowiedź
#9
Artuino tak już (niczym Windows). Może okna pozamykaj :-) Albo format C :-)
A na poważnie, to "znalazłem xxx bibliotek yyy, użyłem zzzz". Tu może być problem.
W sumie dobrze, że Ci się kaszani, może zrezygnujesz z Arduino.

Jeśli jednak mimo wszystko chcesz walczyć z Arduino, to mogę podpowiedzieć co robić ale droga będzie długa i mecząca. Gotowy na pot i łzy?
- uC: ARM Angel , AVR, Z8, PIC, 8051 / CPU: MC680x0, MC683xx, Z-80, 6502
- CPLD, FPGA, GAL
- GSM, ISDN, ETH, USB, RS232C/485/422
- C, ASM, CUPL, PHP

http://er-mik.prv.pl/projekty_avt.php * http://er-mik.prv.pl/ * http://kolejki.prv.pl/

KA-NUCLEO-F411CE Idea , ESP32, Mega2560, UNO PLUS
 
Odpowiedź
#10
Program od Adafruit działa znakomicie, no może w instrukcji w linku jest błąd, ja użyłem ustawienia dla Main Scan Direction "Top to botton", reszta bez zmian. Upewnij się, że w pliku *.h biblioteki jest wybrany w #define ekran, którego używasz, są trzy do wyboru, ewentualnie odkomentuj właściwy i zakomentuj błędny.
Możesz też użyć programu od Radzio LCD Assistant. Wybierz byte orentation horizontal. Wymaga lepszego przygotowania bliku bmp, najlepiej monochromatyczny, nie radził sobie z takim zrzutem kolorowym jak ten od Ada.
Tu przykład z kawałkiem screenu Twojego posta, sprawdź czy działa:
Kod:
/*********************************************************************
This is an example for our Monochrome OLEDs based on SSD1306 drivers

 Pick one up today in the adafruit shop!
 ------> http://www.adafruit.com/category/63_98

This example is for a 128x64 size display using I2C to communicate
3 pins are required to interface (2 I2C and one reset)

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.  
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define SSD1306_128_64

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
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 };

static const uint8_t PROGMEM image_data_error[1024] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00,
0x00, 0x1e, 0x02, 0x27, 0x9f, 0x1c, 0x08, 0x1f, 0x02, 0x04, 0x4f, 0x06, 0x60, 0x78, 0x8b, 0x0f,
0x02, 0x01, 0x24, 0x20, 0x01, 0x22, 0x08, 0x01, 0x22, 0x48, 0x40, 0x11, 0x10, 0x04, 0x88, 0x80,
0x00, 0x01, 0x25, 0x24, 0x02, 0x22, 0x08, 0x82, 0x20, 0x48, 0x00, 0x91, 0x10, 0x04, 0x88, 0x10,
0x04, 0x1f, 0x05, 0x03, 0x84, 0x3e, 0x08, 0x04, 0x04, 0x42, 0x8f, 0x91, 0x10, 0x7c, 0x88, 0x10,
0x08, 0x11, 0x10, 0x40, 0x48, 0x20, 0x08, 0x08, 0x14, 0x02, 0x90, 0x91, 0x10, 0x44, 0x88, 0x10,
0x00, 0x11, 0x10, 0x40, 0x40, 0x20, 0x08, 0x80, 0x10, 0x30, 0x91, 0x91, 0x10, 0x44, 0x88, 0x88,
0x1f, 0x9d, 0x18, 0x87, 0x9f, 0x1e, 0x06, 0x1f, 0x08, 0x31, 0x0e, 0x91, 0x10, 0x74, 0x6f, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1e, 0x38, 0x0e, 0x38, 0x07, 0x2e, 0x1c, 0x70, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x44, 0x10, 0x44, 0x08, 0x32, 0x20, 0x88, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x04, 0x10, 0x42, 0x10, 0x20, 0x40, 0x08, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x84, 0x10, 0x42, 0x10, 0x20, 0x41, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x04, 0x10, 0x42, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x44, 0x10, 0x44, 0x08, 0x20, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x38, 0x0e, 0x38, 0x07, 0x20, 0x3c, 0x70, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

void setup()   {                
 Serial.begin(9600);

 // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
 // init done
  int i=0;
  while(1)
 {
 
display.clearDisplay();
display.drawBitmap(0, i,  image_data_error, 128, 64, 1);
  display.display();
//  delay(50);
  i++;
  if(i>63) i=-64;
 
 }
 // Show image buffer on the display hardware.
 // Since the buffer is intialized with an Adafruit splashscreen
 // internally, this will display the splashscreen.
 display.display();
 delay(2000);

 // Clear the buffer.
 display.clearDisplay();

 // draw a single pixel
 display.drawPixel(10, 10, WHITE);
 // Show the display buffer on the hardware.
 // NOTE: You _must_ call display after making any drawing commands
 // to make them visible on the display hardware!
 display.display();
 delay(2000);




 // draw many lines
 testdrawline();
 display.display();
 delay(2000);
 display.clearDisplay();

 // draw rectangles
 testdrawrect();
 display.display();
 delay(2000);
 display.clearDisplay();

 // draw multiple rectangles
 testfillrect();
 display.display();
 delay(2000);
 display.clearDisplay();

 // draw mulitple circles
 testdrawcircle();
 display.display();
 delay(2000);
 display.clearDisplay();

 // draw a white circle, 10 pixel radius
 display.fillCircle(display.width()/2, display.height()/2, 10, WHITE);
 display.display();
 delay(2000);
 display.clearDisplay();

 testdrawroundrect();
 delay(2000);
 display.clearDisplay();

 testfillroundrect();
 delay(2000);
 display.clearDisplay();

 testdrawtriangle();
 delay(2000);
 display.clearDisplay();
 
 testfilltriangle();
 delay(2000);
 display.clearDisplay();

 // draw the first ~12 characters in the font
 testdrawchar();
 display.display();
 delay(2000);
 display.clearDisplay();

 // draw scrolling text
 testscrolltext();
 delay(2000);
 display.clearDisplay();

 // text display tests
 display.setTextSize(1);
 display.setTextColor(WHITE);
 display.setCursor(0,0);
 display.println("Hello, world!");
 display.setTextColor(BLACK, WHITE); // 'inverted' text
 display.println(3.141592);
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.print("0x"); display.println(0xDEADBEEF, HEX);
 display.display();
 delay(2000);
 display.clearDisplay();

 // miniature bitmap display
 display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
 display.display();
 delay(1);

 // invert the display
 display.invertDisplay(true);
 delay(1000);
 display.invertDisplay(false);
 delay(1000);
 display.clearDisplay();

 // draw a bitmap icon and 'animate' movement
 testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
}


void loop() {
 
}


void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
 uint8_t icons[NUMFLAKES][3];

 // initialize
 for (uint8_t f=0; f< NUMFLAKES; f++) {
   icons[f][XPOS] = random(display.width());
   icons[f][YPOS] = 0;
   icons[f][DELTAY] = random(5) + 1;
   
   Serial.print("x: ");
   Serial.print(icons[f][XPOS], DEC);
   Serial.print(" y: ");
   Serial.print(icons[f][YPOS], DEC);
   Serial.print(" dy: ");
   Serial.println(icons[f][DELTAY], DEC);
 }

 while (1) {
   // draw each icon
   for (uint8_t f=0; f< NUMFLAKES; f++) {
     display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
   }
   display.display();
   delay(200);
   
   // then erase it + move it
   for (uint8_t f=0; f< NUMFLAKES; f++) {
     display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
     // move it
     icons[f][YPOS] += icons[f][DELTAY];
     // if its gone, reinit
     if (icons[f][YPOS] > display.height()) {
       icons[f][XPOS] = random(display.width());
       icons[f][YPOS] = 0;
       icons[f][DELTAY] = random(5) + 1;
     }
   }
  }
}


void testdrawchar(void) {
 display.setTextSize(1);
 display.setTextColor(WHITE);
 display.setCursor(0,0);

 for (uint8_t i=0; i < 168; i++) {
   if (i == '\n') continue;
   display.write(i);
   if ((i > 0) && (i % 21 == 0))
     display.println();
 }    
 display.display();
 delay(1);
}

void testdrawcircle(void) {
 for (int16_t i=0; i<display.height(); i+=2) {
   display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
   display.display();
   delay(1);
 }
}

void testfillrect(void) {
 uint8_t color = 1;
 for (int16_t i=0; i<display.height()/2; i+=3) {
   // alternate colors
   display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
   display.display();
   delay(1);
   color++;
 }
}

void testdrawtriangle(void) {
 for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
   display.drawTriangle(display.width()/2, display.height()/2-i,
                    display.width()/2-i, display.height()/2+i,
                    display.width()/2+i, display.height()/2+i, WHITE);
   display.display();
   delay(1);
 }
}

void testfilltriangle(void) {
 uint8_t color = WHITE;
 for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
   display.fillTriangle(display.width()/2, display.height()/2-i,
                    display.width()/2-i, display.height()/2+i,
                    display.width()/2+i, display.height()/2+i, WHITE);
   if (color == WHITE) color = BLACK;
   else color = WHITE;
   display.display();
   delay(1);
 }
}

void testdrawroundrect(void) {
 for (int16_t i=0; i<display.height()/2-2; i+=2) {
   display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
   display.display();
   delay(1);
 }
}

void testfillroundrect(void) {
 uint8_t color = WHITE;
 for (int16_t i=0; i<display.height()/2-2; i+=2) {
   display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
   if (color == WHITE) color = BLACK;
   else color = WHITE;
   display.display();
   delay(1);
 }
}
 
void testdrawrect(void) {
 for (int16_t i=0; i<display.height()/2; i+=2) {
   display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
   display.display();
   delay(1);
 }
}

void testdrawline() {  
 for (int16_t i=0; i<display.width(); i+=4) {
   display.drawLine(0, 0, i, display.height()-1, WHITE);
   display.display();
   delay(1);
 }
 for (int16_t i=0; i<display.height(); i+=4) {
   display.drawLine(0, 0, display.width()-1, i, WHITE);
   display.display();
   delay(1);
 }
 delay(250);
 
 display.clearDisplay();
 for (int16_t i=0; i<display.width(); i+=4) {
   display.drawLine(0, display.height()-1, i, 0, WHITE);
   display.display();
   delay(1);
 }
 for (int16_t i=display.height()-1; i>=0; i-=4) {
   display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
   display.display();
   delay(1);
 }
 delay(250);
 
 display.clearDisplay();
 for (int16_t i=display.width()-1; i>=0; i-=4) {
   display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
   display.display();
   delay(1);
 }
 for (int16_t i=display.height()-1; i>=0; i-=4) {
   display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
   display.display();
   delay(1);
 }
 delay(250);

 display.clearDisplay();
 for (int16_t i=0; i<display.height(); i+=4) {
   display.drawLine(display.width()-1, 0, 0, i, WHITE);
   display.display();
   delay(1);
 }
 for (int16_t i=0; i<display.width(); i+=4) {
   display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
   display.display();
   delay(1);
 }
 delay(250);
}

void testscrolltext(void) {
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(10,0);
 display.clearDisplay();
 display.println("scroll");
 display.display();
 delay(1);

 display.startscrollright(0x00, 0x0F);
 delay(2000);
 display.stopscroll();
 delay(1000);
 display.startscrollleft(0x00, 0x0F);
 delay(2000);
 display.stopscroll();
 delay(1000);    
 display.startscrolldiagright(0x00, 0x07);
 delay(2000);
 display.startscrolldiagleft(0x00, 0x07);
 delay(2000);
 display.stopscroll();
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości