To forum używa plików cookies
To forum wykorzystuje pliki cookies do przechowywania informacji o Twoim logowaniu, jeśli jesteś zarejestrowany, oraz informacji o Twojej ostatniej wizycie, jeśli nie jesteś zalogowany. Pliki cookies to niewielkie pliki tekstowe zapisywane na Twoim komputerze; cookies ustawiane przez to forum mogą być używane wyłącznie na tej stronie i nie stanowią zagrożenia dla bezpieczeństwa. Cookies na tym forum śledzą również, które tematy zostały przez Ciebie przeczytane oraz kiedy miało to miejsce. Prosimy o potwierdzenie, czy akceptujesz, czy odrzucasz zapisywanie tych plików cookies.

Niezależnie od wyboru w Twojej przeglądarce zostanie zapisany plik cookie, aby zapobiec ponownemu zadawaniu tego pytania. W każdej chwili będziesz mógł zmienić ustawienia cookies, korzystając z linku w stopce strony.

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
WALET – czyli jak buduję sobie transceiver SDR
#33
Ekran dotykowy TFT został ogólnie opisany wcześniej. Aby go używać należy zainstalować bibliotekę TFT dla procesorów esp co opisałem wcześniej a jednym z ważniejszych  elementów tej instalacji jest konfiguracja pliku Arduino/libraries/TFT_eSPI/User_Setup.h (oczywiście uwzględniając lokalny format ścieżek oraz miejsce instalacji Arduino). 
Do celów pracy w tym projekcie można skorzystać z mojego pliku User_Setup.h zamieszczonego na Github

Przy pierwszym uruchomieniu programu Waleta z wyświetlaczem pojawi się żądanie kalibracji ekranu dotykowego
[Obrazek: https://lx-net.pl/walet/image/kalibr_dotyk.jpg]
Kalibracja wymaga zaznaczenia wszystkich, czterech rogów wyświetlacza.

Mając działający wyświetlacz można korzystać z jego definicji oraz API (czyli dostępnych poleceń linii komend) zdefiniowanych w pliku: Arduino/libraries/TFT_eSPI/TFT_eSPI.h
Kod Waleta korzysta z takich funkcji jak: tft.init,  tft.fillScreen, tft.fillCircle, tft.drawString, tft.drawRect oraz kilku innych i mam nadzieję, że nazwy tych funkcji tłumaczą co robią. 
Ale z punktu widzenia grafiki Waleta najbardziej istotne polecenie to tft.pushImage .
Ekran należy początkowo uruchomić i zorientować co ma miejsce w liniach 408 i 411 kodu, następnie można korzystać z wymienionych funkcji do woli.

Funkcja tft.pushImage(xs,ys,xw,yw,data) - to funkcja rysowania na ekranie gotowej grafiki w formie prostokąta. Jest ona zdefiniowana przez swoje parametry następująco:
xs - miejsce gdzie należy wkleić grafikę w osi X
ys - miejsce gdzie należy wkleić grafikę w osi Y
xw - szerokość grafiki w osi X
yw - wysokość grafiki w osi Y
data - wskaźnik do tablicy zawierającej dane związane z grafiką zapisane w formacie RGB565

[Obrazek: https://lx-net.pl/walet/image/ekran01.jpg]
W przyjętej orientacji ekranu (tft.setRotation(1);) każdy kolorowy pixel RGB ma współrzędne x w zakresie 0-239 oraz współrzędne y w zakresie 0-239.
Zakładając, że chcemy na przykład wkleić do ekranu grafikę  o nazwie image (zawsze w formacie prostokątnym) o rozmiarze 90x130 pixel-i  należy użyć polecenia: tft.pushImage(100,50,x90130,image) .
Grafika image musi być przedstawiona w formacie RGB565 8 bitów (nieco uproszczony format RGB) a można to zrobić korzystając z dostępnych w sieci konwerterów online (np. pliki .jpg, .png). Wystarczy takiemu konwerterowi wskazać plik w formacie .jpg i w rezultacie otrzymamy ciąg liczb heksadecymalnych ułożonych w tablicę pozwalającą sterownikowi wyświetlacza zapalenie pixeli w odpowiednim kolorze w odpowiednim miejscu.
Ja korzystam z tego konwertera
a w wyniku tego otrzymamy coś podobnego do tego:

static const uint16_t image[] PROGMEM  = {
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  .
  .
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
  };

Można to bezpośrednio wkleić do kodu programu ale wygodniej jest umieścić te dane w pliku. Ja pokazałem tu jedynie kilka linii kodu po konwersji a dla rzeczywistych plików graficznych może być ich setki lub tysiące. Dlatego w Walecie pliki grafiki wklejam do plików nazywanych właściwą nazwą - w tym przykładzie powinna to być nazwa image.h a następnie dołączam do programu poleceniem #include ścieżka_do_piku/image.h
Stąd w Arduino mam folder graph gdzie znajdują się wszystkie pliki graficzne używane w programie Waleta o czym będzie nieco dalej.

cdn. lj

Github
Cytuj


Wiadomości w tym wątku
RE: WALET – czyli jak buduję sobie transceiver SDR - przez SP6FRE - 3 godzin(y) temu

Skocz do:


Użytkownicy przeglądający ten wątek: AdamC, SP3SFY, 1 gości