[STemWIN] Cyfrowy magnetometr na STM32 z graficzną prezentacją wyników
Użytkownik może wybrać jeden z dwóch rodzajów wykresów (rysunek 5) i przy pomocy dostępnych procedur (zestawiono je w tabeli 2) skonfigurować jego wygląd. Wykres XY można zastosować do prezentacji zbioru punktów typu GUI_Point, natomiast wykres YT nadaje się do wyświetlania ciągu wartości typu I16.
Rys. 5. Rodzaje wykresów widżetu GRAPH
Sekwencja czynności wykonywanych podczas rysowania wykresów jest następująca:
-
Wypełnienie tła wykresu zdefiniowanym kolorem.
-
Wywołanie opcjonalnej funkcji zwrotnej (np. w celu narysowania siatki użytkownika).
-
Narysowanie siatki (jeśli została uaktywniona).
-
Narysowanie zbioru danych i obramowania.
-
Narysowanie skali.
-
Wywołanie opcjonalnej funkcji zwrotnej (np. do narysowania skali użytkownika lub dowolnego tekstu/grafiki).
Przykład kodu tworzącego widżet GRAPH wraz ze zbiorem danych może wyglądać jak poniżej:
// Deklaracja uchwytów GRAPH_Handle hGraph; GRAPH_DATA_Handle hData; GRAPH_SCALE_Handle hScale; // Utworzenie widżetu GRAPH o wymiarach 216x106, na pozycji (10,10) w lewym górnym rogu okna hFrame hGraph = GRAPH_CreateEx(10, 10, 216, 106, hFrame, WM_CF_SHOW, 0, GUI_ID_GRAPH0); // Utworzenie zbioru danych o pojemności 'NumDataItems' i skopiowanie 'MaxNumDataItems' elementów // z tablicy 'aData0'. Zbiór danych można również utworzyć bez kopiowania wartości z innego źródła // przekazując jako trzeci argument wartość NULL i jako czwarty wartość 0. hData = GRAPH_DATA_YT_Create(GUI_DARKGREEN, NumDataItems, aData0, MaxNumDataItems); // Dołączenie zbioru danych do widżetu GRAPH GRAPH_AttachData(hGraph, hData); // Utworzenie pionowej skali ze skokiem podziałki w 20 px i tekstem wyrównanym do prawej w pozycji // 28 px od lewego boku widżetu hScale = GRAPH_SCALE_Create(28, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20); // Dołączenie skali do widżetu GRAPH GRAPH_AttachScale(hGraph, hScale); [..] // Dodanie nowej próbki do wykresu GRAPH_DATA_YT_AddValue(hGraph, value); [..] // Usunięcie widżetu i dołączonych do niego zbiorów danych WM_DeleteWindow(hGraph);
Tab. 2. Procedury powiązane z widżetem GRAPH
Procedura |
Opis |
Przykład |
Procedury ogólne |
||
GRAPH_AttachData() |
Dołącza zbiór danych do widżetu GRAPH. |
|
GRAPH_AttachScale() |
Dołącza skalę do widżetu GRAPH. |
|
GRAPH_CreateEx() |
Tworzy widżet GRAPH. |
|
GRAPH_CreateIndirect() |
Tworzy widżet GRAPH z poziomu tablicy zasobów. |
|
GRAPH_CreateUser() |
Tworzy widżet GRAPH z dodatkową rezerwacją miejsca w pamięci dla danych użytkownika. |
|
GRAPH_DetachData() |
Odłącza zbiór danych od widżetu GRAPH. |
|
GRAPH_DetachScale() |
Odłącza skalę od widżetu GRAPH. |
|
GRAPH_GetScrollValue() |
Zwraca bieżącą wartość (pozycję) wybranego paska przewijania. |
|
GRAPH_GetUserData() |
Odczytuje dane użytkownika z widżetu GRAPH. |
|
GRAPH_SetAutoScrollBar() |
Ustawia automatyczne użycie pasków przewijania. |
|
GRAPH_SetBorder() |
Ustawia szerokość obramowania (szerokość czterech krawędzi osobno). |
|
GRAPH_SetColor() |
Ustawia kolor wybranego elementu widżetu GRAPH. |
|
GRAPH_SetGridDistX() |
Ustawia odstęp między pionowymi liniami siatki. |
|
GRAPH_SetGridDistY() |
Ustawia odstęp między poziomymi liniami siatki. |
|
GRAPH_SetGridFixedX() |
Blokuje przemieszczanie się siatki w osi poziomej. |
|
GRAPH_SetGridOffY() |
Przesuwa siatkę w osi pionowej. |
|
GRAPH_SetGridVis() |
Ustawia widoczność siatki. |
|
GRAPH_SetLineStyleH() |
Ustawia styl poziomych linii siatki. |
|
GRAPH_SetLineStyleV() |
Ustawia styl pionowych linii siatki. |
|
GRAPH_SetScrollValue() |
Przewija wybrany pasek (przesuwa wykres). |
|
GRAPH_SetUserData() |
Zapisuje dane użytkownika w widżecie GRAPH. |
|
GRAPH_SetUserDraw() |
Pozwala na wskazanie funkcji zwrotnej. |
|
GRAPH_SetVSizeX() |
Ustawia (wirtualny) zakres wartości wykresu w osi poziomej. |
|
GRAPH_SetVSizeY() |
Ustawia (wirtualny) zakres wartości wykresu w osi pionowej. |
|
Procedury powiązane ze zbiorem danych GRAPH_DATA_YT |
||
GRAPH_DATA_YT_AddValue() |
Dodaje nową wartość do zbioru danych GRAPH_DATA_YT. |
|
GRAPH_DATA_YT_Clear() |
Usuwa wszystkie wartości ze zbioru danych GRAPH_DATA_YT. |
|
GRAPH_DATA_YT_Create() |
Tworzy nowy zbiór danych GRAPH_DATA_YT. |
|
GRAPH_DATA_YT_Delete() |
Usuwa wskazany zbiór danych GRAPH_DATA_YT. |
|
GRAPH_DATA_YT_MirrorX() |
Zmienia kierunek rysowania wykresu. |
|
GRAPH_DATA_YT_SetAlign() |
Ustawia wyrównanie wykresu do prawej lub lewej. |
|
GRAPH_DATA_YT_SetOffY() |
Przesuwa wartości zbioru danych w osi pionowej wykresu. |
|
Procedury powiązane ze zbiorem danych GRAPH_DATA_XY |
||
GRAPH_DATA_XY_AddPoint() |
Dodaje nowy punkt do zbioru GRAPH_DATA_XY. |
|
GRAPH_DATA_XY_Create() |
Tworzy nowy zbiór punktów GRAPH_DATA_XY. |
|
GRAPH_DATA_XY_Delete() |
Usuwa wskazany zbiór punktów GRAPH_DATA_XY. |
|
GRAPH_DATA_XY_SetLineStyle() |
Ustawia styl linii wykresu. |
|
GRAPH_DATA_XY_SetOffX() |
Przesuwa punkty zbioru w osi poziomej wykresu. |
|
GRAPH_DATA_XY_SetOffY() |
Przesuwa punkty zbioru w osi pionowej wykresu. |
|
GRAPH_DATA_XY_SetOwnerDraw() |
Pozwala na wskazanie funkcji zwrotnej. |
|
GRAPH_DATA_XY_SetPenSize() |
Ustawia grubość linii wykresu. |
|
Procedury powiązane ze skalą GRAPH_SCALE |
||
GRAPH_SCALE_Create() |
Tworzy nową skalę GRAPH_SCALE. |
|
GRAPH_SCALE_Delete() |
Usuwa wskazaną skalę GRAPH_SCALE. |
|
GRAPH_SCALE_SetFactor() |
Przemnaża wartości na skali przez podany współczynnik. |
|
GRAPH_SCALE_SetFont() |
Zmienia czcionkę tekstu skali. |
|
GRAPH_SCALE_SetNumDecs() |
Ustawia liczbę cyfr wyświetlanych po przecinku. |
|
GRAPH_SCALE_SetOff() |
Przesuwa skalę w osi pionowej wykresu. |
|
GRAPH_SCALE_SetPos() |
Przesuwa skalę w osi poziomej wykresu. |
|
GRAPH_SCALE_SetTextColor() |
Zmienia kolor tekstu skali. |
|
GRAPH_SCALE_SetTickDist() |
Zmienia odstęp między działkami skali w pikselach. |
Aplikacja
Aplikacja magnetometru została stworzona poprzez modyfikację i uzupełnienie projektu z przykładem użycia widżetu FRAMEWIN. Definicje funkcji przedstawionych poniżej umieszczono w pliku main.c.