Implementacja dotykowej wersji „Snake” na STM32F4DISCOVERY

Złącze do kart SD zamontowane jest już na płytce bazowej (rysunek 3). Komunikację w trybie magistrali jednobitowej zapewnia gotowa biblioteka. Zarówno płytka zestawu, jak i biblioteka, umożliwiają także komunikację w trybie magistrali czterobitowej, ale obsługa tego trybu nie jest wymagana przez standard SD, więc nie wszystkie karty muszą ją obsługiwać. Przy konfiguracji zegara transmisji na 48 MHz komunikacja z kartą nie będzie wąskim gardłem. Projekt obsługuje karty z systemem plików FAT korzystając z modułu FatFs (w wersji R0.08a).

W projekcie do obsługi sprzętu wykorzystuje gotowe biblioteki dostarczone przez STMicroelectronics. Takie rozwiązanie ma zalety, ale czasami zdarzają się problemy spowodowane błędami w bibliotece. Jednym z błędów – wykrytych podczas prac nad implementacją gry w bibliotece – obsługi wyświetlacza (stm32f4_discovery_lcd.c) jest niepoprawne użycie funkcji do ustawiania kolorów tekstu i tła. Funkcje te (LCD_SetTextColor() i LCD_SetBackColor()) modyfikują zmienne globalne odpowiednio: TextColor i BackColor.

Dlatego użycie:

lub

nie ma większego sensu, ponieważ jest to w rzeczywistości wykonanie polecenia odpowiednio:

lub

Użycie funkcji modyfikacji koloru tekstu, w celu wyświetlenia elementu w kolorze tła, w sposób następujący:

spowoduje ustawienie TextColor i BackColor na tą samą wartość i zamierzony efekt zostanie osiągnięty. Jednak ponowne użycie tej funkcji z parametrem TextColor, w celu przywrócenia koloru tekstu:

nie powiedzie się, ponieważ zmienna TextColor nie zawiera już pierwotnej wartości barwy tekstu.

Oprócz wspomnianej biblioteki wyświetlacza, wykorzystane zostały jeszcze biblioteka do obsługi panelu dotykowego: stmpe811qtr.c oraz obsługa systemu plików FatFs. Do biblioteki wyświetlacza LCD dodana została funkcja umożliwiająca wyświetlanie obrazków prosto z karty SD (listing 1).

 

List. 1.

Plik obrazka podany w parametrze funkcji jest otwierany na karcie i dane prosto z karty czytane są do bufora, z którego następnie wysyłane są do pamięci wyświetlacza. Obrazki muszą mieć 16-bitową paletę barw w formacie RGB565 (rysunek 4), który odpowiada zapisowi wartości kolorów czerwonego, zielonego i niebieskiego na 16 bitach dla każdego piksela: 5 bitów – czerwony, 6 bitów – zielony i 5 bitów – niebieski

 

Rys. 4. Sposób bajtowego zapisu kolorów w formacie RGB565

Rys. 4. Sposób bajtowego zapisu kolorów w formacie RGB565

 

W artykule przedstawiamy sposób zapisu grafik w plikach BMP oraz udostępniamy oprogramowanie umożliwiające ich używanie w aplikacjach mikrokontrolerowych.

Obsługa panelu dotykowego jest bardzo prosta, ponieważ funkcja IOE_TS_GetState() zwraca nam parametry dotkniętego punktu (listing 2).

 

List. 2.

Standardowa biblioteka wymaga kalibracji panelu przed pierwszym użyciem. Jest to cena za uniwersalność biblioteki i możliwość używania jej na różnych panelach dotykowych. W celu uproszczenia działania gry i pominięcia etapu kalibracji przy każdym włączeniu, dane kalibracyjne dla użytego panelu zostały wpisane na stałe do funkcji obliczającej współrzędne punktu dotknięcia.

 

Fot. 5. Ekran informujący o sposobie sterowania w grze z zaznaczonymi obszarami zmiany kierunków ruchu węża

Fot. 5. Ekran informujący o sposobie sterowania w grze z zaznaczonymi obszarami zmiany kierunków ruchu węża

 

W przypadku prezentowanego projektu precyzja dotknięcia nie jest krytyczna, więc nawet jeśli są jakieś rozbieżności pomiędzy panelami, nie powinno to mieć wpływu na działanie gry, ponieważ sterowanie wężem polega na dotykaniu odpowiednich fragmentów ekranu, które są dość duże (fotografia 5). Sposób wyznaczania nowego kierunku ruchu węża nie jest skomplikowany, pokazano go na listingu 3.

 

List. 3.

Do pobrania

O autorze