Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze | |||
2014:teeter-game [2015/01/19 02:03] Roman Deneš |
2014:teeter-game [2015/01/19 02:17] (aktuální) Roman Deneš |
||
---|---|---|---|
Řádek 8: | Řádek 8: | ||
| | ||
==== Použitá zařízení ==== | ==== Použitá zařízení ==== | ||
- | Projekt je realizován na vývojovém kitu [[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF259090|32F429IDISCOVERY]], který obsahuje 2.4" displej QVGA TFT s rozlišením 240x320. Dále byl použit akcelerometr [[http://www.dipmicro.com/store/GY521-MOD|GY-521]]. | + | Projekt je realizován na vývojovém kitu [[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF259090|32F429IDISCOVERY]], který obsahuje 2.4 palcový displej QVGA TFT s rozlišením 240x320. Dále byl použit akcelerometr [[http://www.dipmicro.com/store/GY521-MOD|GY-521]]. |
{{ :2014:teeter-game:imag_teeter.jpg?300 |Použitá zařízení}} | {{ :2014:teeter-game:imag_teeter.jpg?300 |Použitá zařízení}} | ||
Řádek 48: | Řádek 48: | ||
</code> | </code> | ||
- | Na jednotlivé pozice se pomocí funkce DrawLayout "vykreslil" požadovaný layout v závislosti na aktuální úrovni. Pod číslem 11 jsou uloženy stěny. Pod číslem 12 pak rozšířený prostor do kterého kulička nemůže vstoupit. Tento prostor odpovídá poloměru kuličky. Pod čísly 5 a 6 jsou jednotlivé díry. K nim odpovídají středu jsou uloženy pod čísly 4 a 7. Pro vykreslování děr (kruhů) je použita modifikovaná funkce z knihovny [[http://stm32f4-discovery.com/2014/06/library-18-ili9341-ltdc-stm32f429-discovery/|tm_stm32f4_ili9341_ltdc]]. Místo vykreslování jednotlivých pixelů funkce provádí zápis do paměti. | + | Na jednotlivé pozice se pomocí funkce DrawLayout "vykreslil" požadovaný layout v závislosti na aktuální úrovni. Pod číslem 11 jsou uloženy stěny. Pod číslem 12 pak rozšířený prostor do kterého kulička nemůže vstoupit. Tento prostor odpovídá poloměru kuličky. Pod čísly 5 a 6 jsou jednotlivé díry. K nim odpovídají středy jsou uloženy pod čísly 4 a 7. Pro vykreslování děr (kruhů) je použita modifikovaná funkce z knihovny [[http://stm32f4-discovery.com/2014/06/library-18-ili9341-ltdc-stm32f429-discovery/|tm_stm32f4_ili9341_ltdc]]. Místo vykreslování jednotlivých pixelů funkce provádí zápis do paměti. |
Na konci funkce je pak dvojitá smyčka, která na základě číselných údajů z matice vykresluje na displej jednotlivé barevné pixely. | Na konci funkce je pak dvojitá smyčka, která na základě číselných údajů z matice vykresluje na displej jednotlivé barevné pixely. | ||
Řádek 65: | Řádek 65: | ||
</code> | </code> | ||
- | V následující supersmyčce jsou opakovaně čteny data z připojeného akcelerometru, které jsou dále zpracována. Nejprve jsou váhována (60 % předchozí hodnoty + 40% z nově načtené hodnoty). Od těchto hodnot je vždy odečtena referenční hodnota, která se načte při zapnutí přistroje. Toto opatření je zejména kvůli nedokonalému připevnění sensoru, který nemusí být v naprosto stejné poloze jako deska. | + | V následující supersmyčce jsou opakovaně čteny data z připojeného akcelerometru, která jsou dále zpracována. Nejprve jsou váhována (60 % předchozí hodnoty + 40% z nově načtené hodnoty) a dále je od těchto hodnot vždy odečtena referenční hodnota, která se načte při zapnutí přistroje. Toto opatření je zejména kvůli nedokonalému připevnění sensoru, který nemusí být v naprosto stejné poloze jako deska. |
<code cpp> | <code cpp> | ||
Řádek 74: | Řádek 74: | ||
if(start == 1){ | if(start == 1){ | ||
X_axis_ref = MPU6050_Data0.Accelerometer_X; | X_axis_ref = MPU6050_Data0.Accelerometer_X; | ||
- | Y_axis_ref = MPU6050_Data0.Accelerometer_Y; | + | Y_axis_ref = MPU6050_Data0.Accelerometer_Y; |
- | start = 0; | + | start = 0; |
} | } | ||
Řádek 82: | Řádek 82: | ||
Y_axis = (Q*Y_axis + (10-Q)*(MPU6050_Data0.Accelerometer_Y - Y_axis_ref))/10; | Y_axis = (Q*Y_axis + (10-Q)*(MPU6050_Data0.Accelerometer_Y - Y_axis_ref))/10; | ||
- | </code> | + | </code> |
Dále se uloží současná poloha a provede se změna na základě údajů z akcelerometru. Zde ukázka pouze pro jeden směr. Poslední podmínka ošetřuje okraj displeje. | Dále se uloží současná poloha a provede se změna na základě údajů z akcelerometru. Zde ukázka pouze pro jeden směr. Poslední podmínka ošetřuje okraj displeje. | ||
- | <code> | + | <code> |
- | if(X_axis < -th1){ | + | if(X_axis < -th1){ |
- | Xpos++; | + | Xpos++; |
- | if(X_axis < -th2) | + | if(X_axis < -th2) |
- | Xpos++; | + | Xpos++; |
- | if(X_axis < -th3) | + | if(X_axis < -th3) |
- | Xpos++; | + | Xpos++; |
- | if(Xpos > 228) | + | if(Xpos > 228) |
- | Xpos = 228; | + | Xpos = 228; |
- | } | + | } |
- | + | | |
- | // dalsi tri smery ... | + | // dalsi tri smery ... |
| | ||
- | </code> | + | </code> |
Za předpokladu, že nově získaná poloha není dostupná (zeď), provede se načtení staré polohy. Tato akce probíhá pro oba směry (x, y) jednotlivě. | Za předpokladu, že nově získaná poloha není dostupná (zeď), provede se načtení staré polohy. Tato akce probíhá pro oba směry (x, y) jednotlivě. | ||
Řádek 120: | Řádek 120: | ||
</code> | </code> | ||
- | Před každým vykreslením kuličky je ještě volána funkce ReDrawLayout, která překresluje (obnovuje) layout v okolí kuličky. Jde především o vykreslení děr, které mohou být smazány procházecí kuličkou v těsném okolí. | + | Před každým vykreslením kuličky je ještě volána funkce ReDrawLayout, která překresluje (obnovuje) layout v okolí kuličky. Jde především o vykreslení děr, které mohou být částečně smazány procházející kuličkou. |
<code> | <code> | ||
Řádek 229: | Řádek 229: | ||
==== Závěr ==== | ==== Závěr ==== | ||
- | V projektu byl místo interního gyroskopu využit externí akcelerometr, jelikož se na danou aplikace hodí lépe. Zadání bylo splněno, hra je plně funkční. | + | V projektu byl místo interního gyroskopu využit externí akcelerometr, jelikož se na danou aplikace hodí lépe. Zadání bylo splněno, hra je plně funkční. Při popisu byly vynechány některé zřejmé části kódu, které jsou jasné už z jejich popisu. Dále pak některé definice proměnných a další méně podstatné funkce. |
+ | |||
+ | Hra obsahuje dvě úrovně a je nastíněn systém pro přechod mezi jednotlivými úrovněmi. Případné rozšíření o další úrovně je tedy poměrně snadná záležitost. | ||
Video je k dispozici na adrese https://www.youtube.com/watch?v=NFYOeizr5jU&feature=youtu.be. Výsledný soubor je uložen v souborovém systému. | Video je k dispozici na adrese https://www.youtube.com/watch?v=NFYOeizr5jU&feature=youtu.be. Výsledný soubor je uložen v souborovém systému. | ||