LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[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:

  1. Wypełnienie tła wykresu zdefiniowanym kolorem.

  2. Wywołanie opcjonalnej funkcji zwrotnej (np. w celu narysowania siatki użytkownika).

  3. Narysowanie siatki (jeśli została uaktywniona).

  4. Narysowanie zbioru danych i obramowania.

  5. Narysowanie skali.

  6. 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.

Autor: Jan Szemiet