[PROJEKT] Elektroniczny kompas z sensorem HMC5883L

W czasie kalibracji wyznaczane są maksymalne i minimalne wartości pola magnetycznego dla osi „X” oraz „Y” czujnika. Gdy kalibracja skończy się, wyskalowane i przesunięte zostają wartości odczytane z czujnika na środek wirtualnego układu współrzędnych:

Następnie pobierane są wartości natężeń pola magnetycznego:

Po tych obliczeniach wyświetlony zostaje wynik w postaci przewijającej się linijki z zaznaczonym kierunkiem geograficznym. Zastosowany efekt przypomina widok sztucznego horyzontu stosowanego w starszych samolotach:

Funkcja wygląda następująco:

Funkcja przyjmuje wskaźnik do tablicy z rysunkiem wspomnianej linijki. Gdyby ją wyświetlić na szerszym ekranie wyglądało by to mniej więcej tak:
|-i-N-i-|-i-E-i-|-i-S-i-|-i-W-i-
z czego małe „i” to krótka pionowa kreseczka
Jako, że ekran jest za krótki do wyświetlenia całego paska, funkcja wycina część z tego obrazka oraz – jeśli jest to konieczne – przerysowuje początek tablicy na końcu ekranu w celu wypełnienia brakującego obrazu.
W dalszej części programu main() znajduje się opóźnienie oraz na końcu na obraz zostaje nałożona maska, która wyświetla pierwsze i ostatnie dwie kolumny pikseli oraz kolumnę pośrodku, aby wiadomo było jaki kierunek geograficzny wskazuje układ kompasu. Logo Freescale oraz symbol buzzera pozostają włączone.

Całość od momentu odczytu pola magnetycznego aż do wyświetlenia kierunku geograficznego powtarza się w pętli.

Uwaga!
W pliku C:\Freescale\Freescale MQX 3.8\mqx\source\io\lcd\slcd_kwikstik-k40x256 jest błąd polegający na tym, że w funkcji void _SLCDModule_SetSegment(U08 X, U08 Y) przed wyświetleniem pojedynczego piksela cała kolumna zostaje skasowana. Aby to zmienić należy wykomentować linię:
Wygląd fragmentu po zmianach:
Następnie nadpisujemy ten plik i otwieramy projekt C:\Freescale\Freescale MQX 3.8\config\kwikstikk40x256\uv4\build_libs kompilujemy całość (Project>Batch Build>Build). Dopiero teraz poprawnie możemy skompilować kod dla niniejszego przykładu. Oczywiście do kompilacji potrzebny jest wcześniej zainstalowany MQX 3.8.

 

Do pobrania

O autorze