LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[4] Bezpłatna biblioteka graficzna Microchip Graphics Library dla mikrokontrolerów PIC24 i PIC32: „mierniki” graficzne w interfejsach użytkownika

To już ostatnia część cyklu artykułów poświęconych prezentacji wybranych możliwości bibliotek MLA firmy Microchip. W poprzednich częściach przedstawiliśmy przykłady prostych aplikacji z prezentujących podstawowe możliwości tych bibliotek (patrz część 1, część 2 oraz część 3).

Ważną grupą są elementy wyświetlające wartości w postaci cyfrowej lub analogowej. Do wyświetlania wartości w postaci cyfrowej jest przeznaczony element Digital Meter. Po postawieniu na ekranie GDD-X nadał mu identyfikator DMT_7. W oknie właściwości Properties można ustawić styl obiektu (Scheme). Rozdzielczość wyświetlanej danej ustawia się przez modyfikację zmiennych Noofdigits (liczba wszystkich cyfr) i Dotpos (liczba cyfr po przecinku).

Modyfikacja wyświetlanej wartości odbywa się z wykorzystaniem funkcji i makr przypisanych do obiektu Digital Meter. Funkcja DmSetValue ustawia warto wyświetlanej zmiennej. Jej argumentami są : wskaźnik do modyfikowanego obiektu i nowa wartość. Uzupełnieniem tej funkcji są dwa makra wykonujące inkrementacje i dekrementację wyświetlanej wartości o określoną w argumencie wartość. Zdefiniujmy dodatkowe dwa przyciski i nazwijmy je UP i DOWN. Za pomocą GDD-X można „napisać program”, który będzie modyfikował i wyświetlał wartość w postaci cyfrowej. W oknie Events/Projects Explorer klikamy na identyfikator DMT_7 i wykonujemy Add Code. Powoduje to uaktywnienie obiektu.

Teraz dla przycisku opisanego jako „UP” definiujemy akcję inkrementacji wyświetlanej wartości o 1 przy każdym przyciśnięciu i puszczeniu przycisku. Klikamy prawym klawiszem na BTN_10->BTN_MSG_RELEASED , wybieramy Add Action. Potem wybieramy element Digital Meter DMT_7 z ekranu „ekran”, a następnie akcję Increment Value i na koniec wartość inkrementacji (tutaj o 1). Zostało to pokazane na rysunku 21.

 

 Rys. 21. Dodanie akcji inkrementacji wyświetlanej wartości o 1

Rys. 21. Dodanie akcji inkrementacji wyświetlanej wartości o 1

 

Podobne czynności wykonujemy dla przycisku BTN_9 z tym, że tam zdefiniujemy dekrementację wartości o 1. Po tych definicjach GDD-X wygeneruje kod obsługi pokazany na listingu 15.

 

List. 15. Obsługa modyfikacji I wyświetlania wartosci przez obiekt Digital Meter

// 
	if(objMsg == BTN_MSG_RELEASED && pObj->ID == (BTN_9) )
	{
		DmDecVal(((DIGITALMETER*)(GOLFindObject(DMT_7))), (SHORT)1);
		SetState(((DIGITALMETER*)(GOLFindObject(DMT_7))), DM_UPDATE);
	}
	// 

	// 
	if(objMsg == BTN_MSG_RELEASED && pObj->ID == (BTN_10) )
	{
		DmIncVal(((DIGITALMETER*)(GOLFindObject(DMT_7))), (SHORT)1);
		SetState(((DIGITALMETER*)(GOLFindObject(DMT_7))), DM_UPDATE);
	}
	// 

Inkrementacje i dekrementacje wykonują makra DmDrcVal i DmIncVal obiektu Digitalmeter. Nowa wartość jest wyświetlana po wykonaniu opisywanego już makra SetState. Wywołanie tego makra z argumentem DM_UPDATE informuje aplikację, że w obiekcie Digital Meter trzeba na nowo narysować tylko element text. Wszystkie stany obiektu Digital Meter są dokładnie opisane w pliku pomocy.

Na fotografii 22 pokazano ekran z opisywanym przykładem. Żeby wyświetlana wartość była dobrze widoczna wybrałem w definicji stylu pogrubioną czcionkę Arial o wielkości 24dla której zdefiniowane są wzorce znaków tylko dla cyfr 0…9.

 

 Fot. 22. Przykład zastosowania obiektu Digital Meter

Fot. 22. Przykład zastosowania obiektu Digital Meter

 

Teraz zmienimy obiekt Digital Meter na analogowo/cyfrowy miernik Meter (fotografia 23). Ten obiekt pokazuje wartość w postaci analogowej (wskazówka na skali) oraz w postaci cyfrowej u dołu skali. W zakładce Properties ->General ustawiamy wartości parametrów: Minval=1 i Maxval=50. Wyświetlane wartości będą się mogły zmieniać w zakresie 1…50 z krokiem 1.

 

Fot. 23. Przykład zastosowania obiektu Meter 

Fot. 23. Przykład zastosowania obiektu Meter

 

Na listingu 16 pokazano fragment programu obsługującego zmianę wyświetlanej wartości przyciskami UP i DOWN.

 

List. 16. Modyfikacja wskazań obiektu Meter

if(objMsg == BTN_MSG_RELEASED && pObj->ID == (BTN_9) )
	{
		MtrDecVal(((METER*)(GOLFindObject(MTR_6))), (SHORT)1);
		SetState(((METER*)(GOLFindObject(MTR_6))), MTR_DRAW_UPDATE);
	}
	// 

	// 
	if(objMsg == BTN_MSG_RELEASED && pObj->ID == (BTN_10) )
	{
		MtrIncVal(((METER*)(GOLFindObject(MTR_6))), (SHORT)1);
		SetState(((METER*)(GOLFindObject(MTR_6))), MTR_DRAW_UPDATE);
	}

 

Podsumowanie

Trudno byłoby opisać szczegóły wszystkich możliwości biblioteki i programu Graphics Display Designer X, jest to bowiem materiał na sporą książkę. Ale nawet tych kilka prostych przykładów pokazuje olbrzymie możliwości samej biblioteki, ale tez jak dla mnie rewelacyjnego wsparcia w postaci wtyczki GDD-X. To wsparcie powoduje znakomite skrócenie czasu przygotowania interfejsu ale tez daje możliwość szybkiego i elastycznego modyfikowania swoich projektów. Jeżeli do tego dodamy dobrze przygotowany plik pomocy, to dostajemy idealne narzędzie dla tworzenia atrakcyjnych interfejsów użytkownika.

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.