W artykule przedstawiamy aplikację, której funkcjonalność odpowiada bardzo prostym programom graficznym – pozwala ona użytkownikowi metodą dotykową (za pośrednictwem touch-panela) rysować na ekranie wyświetlacza LCD. Aplikację wykonano bazując na bibliotece STM32 Embedded GUI, która na potrzeby aplikacji została nieco zmodyfikowana.

 

 

Fot. 1. Elementy składowe układu testowego

 

Fot. 1. Elementy składowe układu testowego

 

 Fot. 2. Przykładowe skutki działania prezentowanej aplikacji

Fot. 2. Przykładowe skutki działania prezentowanej aplikacji

 

Projekt prezentowany w artykule wykonano na następujących elementach:

– zestawie startowym STM32F4Discovery

– wyświetlaczu LCD-TFT z touch-panelem Embest DM-LCD35RT Module

– płycie bazowej Embest DM-STF4BB Base Board

Elementy połączono ze sobą w konfiguracji domyślnej, dokładnie ją zilustrowano na filmie.

 

Definicja komponentu

Aplikację zrealizowano z wykorzystaniem trzech rodzajów komponentów. Pierwszy komponent to przycisk z etykietą (już zdefiniowany w bibliotece Embedded GUI), a drugi to przycisk z kolorem (poniższe struktury są zdefiniowane w pliku graphicObjectTypes.h):

Trzeci komponent to pole, w którym odbywa się rysowanie:

Oprócz zdefiniowania nowych komponentów wymaganym jest jeszcze poszerzenie definicji typu wyliczeniowego GL_ObjType:

Tworzenie i wyświetlanie komponentów

Tworzenie komponentu ButtonColor wygląda podobnie jak tworzenie komponentu Button z jedną tylko różnicą: zamiast przypisania tekstu jest przypisywany kolor. Za jego wyświetlanie odpowiada funkcja (plik graphicObject.c):

W oddzielnym pliku Drawbox.c zdefiniowano następujące funkcje:

  • ClearDrawbox() – czyszczenie obszaru w którym odbywa się rysowanie,
  • NewDrawbox() – tworzenie komponentu o zadanych wymiarach,
  • SetCurrentColor() – ustawienie bieżącego koloru,
  • SetDrawboxVisible() – wyświetlanie komponentu.

Oprócz powyższych zdefiniowano również funkcję rysującą „punkty” tworzące linię rysowania:

Integracja komponentu

Aby skorzystać z nowych komponentów należy uzupełnić warstwę Library o kilka elementów. Pierwsza modyfikacja to poszerzenie funkcji AddPageControlObj() o dwa dodatkowe warunki:

oraz funkcji GetObjSize():

Dodanie nowej opcji w bloku switch funkcji CallPreEvents():

oraz w bloku switch funkcji CallEvent():

Budowa interfejsu

W pliku GxFreeGUI_Paint.c zdefiniowano przykładowy układ aplikacji rysującej:

Ostatnia funkcja jest wywoływana z poniższej funkcji (plik uiframework.c):

Główna pętla programu

Na koniec pozostaje jeszcze przedstawić strukturę funkcji main():

Jan Szemiet