[3] Bezpłatna biblioteka graficzna Microchip Graphics Library dla mikrokontrolerów PIC24 i PIC32: skalowane fonty, pliki graficzne i interaktywne interfejsy użytkownika

Jeżeli chcemy zmienić wartości domyślne stylu, to program poprosi nas o podanie nowej nazwy stylu (okno Create New Scheme) i zmienione wartości zostaną zapisane pod tą nazwą. Olbrzymim ułatwieniem jest możliwość wybory czcionek zdefiniowanych w systemie Windows z rozmiarami od 8 do 72. Każdy kto używał wyświetlaczy graficznych wie jak dużo pracy pochłania ręczne generowanie tablicy wzorca znaków. Dlatego powstało sporo dobrych programów robiących to automatycznie, ale w większości są to płatne lub bardzo okrojone bezpłatne wersje. Tu mamy wszystko za darmo. Trzeba jednak pamiętać, że każdy nowo zdefiniowany zestaw fontów znacząco zapełnia pamięć programu mikrokontrolera – szczególnie dla dużych znaków. Żeby to ograniczyć można wybrać części znaków poprzez wybranie zakresu (starting, ending character) lub przez wybór filtra – rysunek 17. Filtrem jest plik .txt z wybranymi znakami – na przykład z samymi cyframi.

 

Rys. 17. Okno wyboru czcionki z opcjami

Rys. 17. Okno wyboru czcionki z opcjami

 

Wyświetlanie bitmap również łączy się koniecznością konwertowania na tablicę zapisana w języku C, lub w asemblerze. Do tego celu są niezbędne programy konwertujące. GDD-X rozwiązuje problem bitmap prosto jak to tylko możliwe. Z listy elementów wybieramy element Picture i stawiamy go na ekranie. W oknie Properties klikamy na belkę w okienku Bitmap i otwiera się okno eksploratora wyszukiwania plików. W obecnej wersji DGG mogą to być wyłącznie pliki z rozszerzeniem .bmp. Ja przygotowałem sobie bitmapę z przykładowym logo o długości nie przekraczającej 320 pikseli. Skalowanie bitmap można wykonać w wielu programach graficznych. Wystarczający do tego do tego celu jest na przykład Microsoft Office Picture Manager. Na fotografii 18 pokazano bitmapę wyświetloną łącznie z wcześniej zdefiniowanym elementem Static Text.

 

Fot. 18. Widok bitmapy wyświetlonej wraz z obiektem Static Text

 

Interakcja z użytkownikiem

Rysowanie tekstu i bitmap to niewielki początek możliwości GDD-X. Zajmiemy się teraz przykładowymi elementami, które są przeznaczone do interakcji z użytkownikiem. Oprócz ekranu wyświetlacza podstawowym elementem interfejsu użytkownika są elementy manipulacyjne: klawiatura, enkodery obrotowe (impulsatory), myszka itp. Wprowadzenie ekranów dotykowych znacznie uprościło implementację manipulatorów jednocześnie podnosząc atrakcyjność interfejsu.

Podstawowym elementem manipulacyjnym jest wspominany już przycisk Button. Jak wiemy interfejs Message Interface korzysta ze struktury GOL_MSG, której jednym ze składników jest uiEvent. Jest w nim zapisane zdarzenie generowane przez element graficzny (takiego, który może generować zdarzenie).

Działanie Message Interface najlepiej jest pokazać na przykładzie przycisku. Element Button umieszczony na ekranie wyświetlacza z interfejsem dotykowym może być w stanie: naciśnięty (PRESSED), ciągle naciśnięty (STILLPRESSED), zwolniony (RELEASED) i skasowany (CANCELPRESSED).

Na naszym przykładowym ekranie o nazwie ekran stawiamy element Button i w oknie Properties zmieniamy w polu Text napis z Button na Ekran1. Następnie klikamy na zakładkę „+” w panelu Drawing Panel i dodajemy nowy ekran o nazwie ekran1. Message Interface elementów graficznych jest obsługiwane w okienku Events/Project Explorer. Są tam umieszczone nazwy ekranów i identyfikatory obiektów umieszczanych na poszczególnych ekranach łączenie z możliwymi zdarzeniami – rysunek 19.

 

Rys. 19. Okno konfiguracji interakcji Events/Project Explorer

Rys. 19. Okno konfiguracji interakcji Events/Project Explorer

 

Jak widać są tu umieszczone identyfikatory 2 ekranów (ekran i ekran1) oraz identyfikator BTN_4 przycisk Button. Dla przycisku są zdefiniowane 4 zdarzenia zgodnie z tym co powiedzieliśmy sobie przed chwilą. Jeżeli teraz klikniemy prawym klawiszem myszki na opis zdarzenia, to możemy wybrać 2 działania: dodaj akcję (Add Action)i dodaj kod (Add Code).

Pierwsze działanie polega na dodaniu akcji wykonywanej po zaistnieniu zdarzenia. Dostępne akcje są automatycznie określane przez GDD X na podstawie właściwości elementów umieszczonych w oknie z rysunku 19. Na rysunku 20 jest pokazana możliwość wyboru akcji przy kliknięciu na zdarzenie RELEASE. Można wybrać jakiś element z ekran lub ekran1, albo wykonać „skok” do ekranu ekran1. Ponieważ na ekranach nie ma elementów, którymi można byłoby manipulować po naciśnięciu i zwolnieniu przycisku, to wybierzemy akcje Go To Screen1 -> ekran1. Po takim zdefiniowaniu akcji BTN_4 RELEASED program po powinien przejść do ekranu ekran1 kiedy „naciśniemy” i „zwolnimy” przycisk opisany jako ekran1. Nie dość że GDD-X sam skonfiguruje wykonanie akcji po zdarzeniu to jeszcze automatycznie uaktualni plik źródłowy w projekcie MPLAB-X. Obsługa zdarzeń jest wykonywana w funkcji GDDDemoGOLMsgCallback umieszczonej w pliku GDD_X_Event_Handler.c. Ta funkcja jest z kolei wywoływana z funkcji GOLMsgCallback. Obie funkcje są automatycznie generowane przez GDD X.

Na listingu 14 pokazano fragment akcji przejścia do ekranu ekran1 po zwolnieniu przycisku BTN_4.

 

Rys. 20. Wybór akcji przypisanej do zdarzenia

Rys. 20. Wybór akcji przypisanej do zdarzenia

 

List. 14. Kod przejścia do ekranu ekran1 po zwolnieniu przycisku BTN_4

Oczywiście zamiast wywoływania funkcji GDDDemoGoToScreen(1) można tutaj wywołać własną funkcję użytkownika i wykonywać działania przypisane do naciśnięcia i zwolnienia przycisku. Wsparcie GDD X i możliwości własnej konfiguracji są tutaj bardzo pomocne. Podobnie działają pozostałe elementy manipulacyjne typu Round Dial, List Box czy Check Box.

O autorze