3 godzin(y) temu
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 GithubPrzy 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

