Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:ant-run

Toto je starší verze dokumentu!


Hra Ant Run na LED 8x8

Zadanie

  • Realizujte hru Ant Run na 8×8 RGB LED matici s použitím vývojové desky FRDM-KL25Z
  • Ovládání bude řešeno akcelerometrem

Rozbor

Porovnanie originálnej predlohy hry Ant Run a zjednodušenej verzie školského projektu Obr. 1. Obr. 1 - Originál hry Ant Run na PC

Hra Ant Run

  • Originálna verzia je určená na PC (Obr 2.)
  • Cieľom hry je udržať mravca v pohybe vytváraním bludiska
  • Bludisko je zostavené z blokov pre priamy smer, križovatku alebo zákrutu
  • Bloky sa otáčajú iba sa pokiaľ na nich nenachádza mravec
  • Po prechode mravca sú použité bloky označené a nefunkčné
  • Použité bloky sa obnovia po určitom čase prechodom „hranou“ bludiska

 Obr. 2 - Porovnanie PC hry a projektu

Zjednodušenie hry pre LED RG 8x8 panel

Zjednodušenie je potrebné pre konverziu hry na trojfarebný displej s obmedzeným počtom pixelov (8×8 LED panel).

  • 4×4 blokov bludiska
    • Každý blok predstavuje 2×2 pixelov
  • Použité políčka sa zreaktivujú po prechode cez okraj bludiska
  • 3 druhy blokov bludiska s možnosťou otáčania
    • 1 druh pre priamy smer
    • 2 druhy pre zákrutu
  • Zelená farba predstavuje cestičku labyrintu
  • Oranžová farba znázorňuje použitý blok
  • Červená farba znázorňuje mravca
  • Aktuálne vybratý blok bliká

Bloky labyrintu sú zobrazené na obrázku Obr. 3. Šípky v blokoch naznačujú chod mravca cez jednotlivé bloky a šípky mimo blokov zobrazujú otáčanie bloku počas hry.  Obr. 3 - Bloky labyrintu

Výslednú interpretáciu zjednodušenej hry približuje nasledujúci obrázok Obr. 4  Obr. 4 - Ukážka práce s blokmi

Počítanie skóre

Výška skóre závisí od počtu správne prejdených blokov labyrintu. Za každý blok labyrintu, ktorý mravec opustí je pripočítaný jeden bod. Body sa ku skóre pripočítajú až prechodom mravca „okrajom“ labyrintu. Skóre sa vynuluje vždy s novou hrou ale aj počas pauzy hry.

Hardware

Z dostupného hardware-ového vybavenia projektu (doska KL25Z a LED shield) boli využité nasledujúce časti (Obr. 5)

 Obr. 5 - Blokové zapojenie HW

  • Vývojová doska FRDM-KL25Z
    • MMA8451Q - 3-osý akcelerometer
    • 19x GPIO výstup pre shield
    • 2x GPIO vstup pre shield
    • PWM pre RGB LED
  • Zobrazovacie zariadenie LED 8×8
    • LED 8×8 RG panel
    • 2x tlačidlá

Software

Program bol písaný pomocou online vývojového prostredia www.mbed.org. Celý kód je zverejnený na stránkach mbed tu MPOA_ant_run V nasledujúcej kapitole sú popísané základné funkcie a princípy programu.


Zobrazovanie na 8x8 LED RG panel

Funkcia zobrazovania je volaná periodicky, s periódou 0,01 s. Zobrazuje sa matica uint8_t matrix[8][8]. Každý prvok tejto matice predstavuje jeden pixel - jednu RG LED. Prvky majú definované stavy

#define led_used    3 // color orange
#define led_lab     2 // color green
#define led_ant     1 // color red
#define led_free    0 // off

,ktoré sú pri vysvecovaní panelu rozkódované a priradené jednotlivým výstupným pinom. Samotné vysvecovanie sa riadi algoritmom popísaným nasledujúcim vývojovým diagramom (Obr. 6). Obr. 6 - Vývojový diagram funkcie show_matrix

Zobrazovacia funkcia riadi jas panelu (použitým oneskorením) aj blikanie kurzoru.


Funkcia napĺňania matice

Viaceré funkcie vyžadujú naplnenie matice zobrazovania naraz. Využívajú pri tom funkciu fill_matrix. Do nej vstupuje uint64_t temp a uint8_t color.

  • Temp predstavuje zakódovaný obrazec definovaný v úvode kódu. Panel LED má 8×8 pixelov ⇒ 64 bitov reprezentujúcich, či je príslušný pixel aktívny
  • Color definuje farbu aktívneho pixelu

Pre každý pixel panelu sa zisťuje, či má byť pixel aktivovaný a v prípade že áno, priradí sa mu farba pomocou nasledujúceho kódu.

for(uint8_t j = 0; j < 8;j++)
{
   for(uint8_t i = 0; i < 8;i++)
   {
      matrix[j][i] = color * ( 0 < (temp & (0x8000000000000000>>((8*j)+i))));  // print template to the matrix 
   }
}

Postupuje sa od MSB, preto sa temp maskuje 0x8000000000000000. Definované sú dve predlohy:

#define template_fill (~0) 
  • Aktívne sú všetky pixely
  • Používa sa na zhasnutie celého panelu (rovnovážny stav pre TEST alebo vyčistenie obrazovky pred zobrazením skóre) alebo na naplnenie panelu použitými blokmi (generácia nového bludiska)
#define template_arrow 0x12244848241200
  • Vykreslí šípku
  • Otočenie šípky zabezpečuje funkcia rotate_matrix, ktorá jednoducho pretočí maticu o 90º.

Stavový automat

Hra je postavená na princípe stavového automatu. Ten beží v nekonečnej slučke funkcie main. Na jednoduchú indikáciu stavov slúži indikačná RGB LED na doske KL25Z. Po zapnutí sa zariadenie dostáva do prvého stavu TEST. Prepojenie medzi jednotlivými stavmi odpovedá nasledujúcemu stavovému diagramu (Obr. 7).  Obr. 7 - Diagram stavového automatu

Stav - TEST

Indikačná dióda – ORANŽOVÁ
Funkcia ľavého tlačidla – Prechod do stavu SAVE
Funkcia pravého tlačidla – Prechod do stavu READY
Ovládanie akcelerometrom – Demonštrácia ovládania

Popis – V stave TEST zariadenie prezentuje ovládanie hry. Po nahnutí zariadenia na niektorú zo strán o 25º sa pohyb zaznamená, čo sa potvrdí vysvietením červenej šípky v smere pohybu. Pre potvrdenie pohybu je potrebné vrátiť sa do východiskovej polohy Idle (uhol natočenie pod 10º). Potvrdenie pohybu je indikované zmenou farby šípky na zelenú.

Stav - SAVE

Indikačná dióda – ZELENÁ (svieti krátko)
Funkcia ľavého tlačidla – Bez funkcie
Funkcia pravého tlačidla – Bez funkcie
Ovládanie akcelerometrom – Bez funkcie

Popis – Rovnovážna (Idle) poloha ovládanie akcelerometrom(popísané v stave TEST) je v určitom rozsahu definovateľná používateľom. Rozsah súvisí z tým, že ovládanie je prepočítavané z ôs rovnobežných na dosku KL25Z. Po uložení nového Idle stavu ovládania sa zariadenie vracia do stavu TEST.

Stav - READY

Indikačná dióda – ORANŽOVÁ (svieti krátko)
Funkcia ľavého tlačidla – Bez funkcie
Funkcia pravého tlačidla – Bez funkcie
Ovládanie akcelerometrom – Bez funkcie

Popis – Stav READY je určený na generovanie nového labyrintu. Generovanie je na panely sprevádzané úvodným obrázkom. Úvodný obrázok je poskladaný z oranžových blokov a bloku „štart“ z ktorého vychádza mravec. Úvodný obrázok je nahradený náhodne vygenerovanými políčkami labyrintu a zariadenie prechádza do stavu PAUSE.

Stav - PAUSE

Indikačná dióda – ČERVENÁ
Funkcia ľavého tlačidla – Prechod do stavu GAME
Funkcia pravého tlačidla – Prechod do stavu READY
Ovládanie akcelerometrom – Bez funkcie

Popis – Stav PAUSE je typická pauza hry. Hra v okamihu prechodu to tohto stavu „zamrzne“ (nebliká ani kurzor výberu bloku *popísaný v stave GAME) . Zo stavu PAUSE môže užívateľ buď pokračovať v hre alebo začať novú hru vygenerovaním nového bludiska.

Stav - GAME

Indikačná dióda – ZELENÁ
Funkcia ľavého tlačidla – Prechod do stavu PAUSE
Funkcia pravého tlačidla – Otoč vybratý blok o 90º
Ovládanie akcelerometrom – Ovládanie kurzoru (výber bloku bludiska, ktorý je potrebné otočiť)

Popis – Princípom hry je udržať mravca v pohybe. Mravec sa po bludisku pohybuje sám, úlohou hráča je tvorba priechodnej cesty bludiskom. Priechodná cesta bludiskom sa vytvára otáčaním jednotlivých blokov bludiska. Hráč môže otáčať iba čisté bloky labyrintu. To znamená bloky, ktoré ešte neboli použité, alebo v nich už mravec nie je. Prechodom mravca sa blok zaradí medzi použité, a mravec po nich už nemôže viac ísť. Jediným spôsobom, ako bloky zreaktivovať je prechod „cez okraj labyrintu“. Po takomto prechode je mravec prenesený na protiľahlú stranu labyrintu (pokiaľ je protiľahlý blok správne natočený) a všetky použité bloky labyrintu sú opäť náhodne vygenerované.

Hra začína vždy blokom „štart“ na rovnakom mieste (druhý blok zľava, druhý blok zhora) rovnakým smerom pohybu mravca (nadol). Kurzor je vždy na začiatku hry umiestnený pod blok „štart“, hráč môže teda hneď správne nasmerovať prvý blok. (toto rozloženie je zabezpečené pri generovaní labyrintu v stave READY). Hráč pohybuje doskou, čím ovláda pohyb kurzoru, ktorý predstavuje blikajúce políčko. Keď sa hráč premiestni kurzorom na políčko, ktoré potrebuje otočiť aby vytvoril správnu cestu labyrintom, použije pravé tlačidlo ovládania.

Hra končí narazením mravca na zle otočený alebo použitý blok. Po skončení hry sa zariadenie prechádza do stavu SCORE.

Stav hry - LEARN

*nejedná sa o stav stavového automatu ale o mód v ktorom zariadenie pracuje

Popis – Hra Ant Run nie je veľmi známa. Vlastne asi vôbec. Preto je zložité novému hráčovi vysvetliť celý princíp hry, hlavne z dôvodu tak trochu obrátenej logiky hrania (mravec sa pohybuje sám, treba mu postaviť nekonečnú cestu bludiskom). Preto bol do hry zavedený výučbový mód.

Pre vstup do tohto módu je potrebné počas štartu mikroprocesoru držať naraz obe tlačidlá. Užívateľ je o vstupe do výučbového módu informovaný indikačnou LED, ktorá svieti na modro.

Vo výučbovom móde funguje celé zariadenie rovnako ako v štandardnom stave, hru však nie je možné prehrať. Pokiaľ hráč zle zostaví labyrint, mravec príde na poslednú pozíciu ktorú mu cesta labyrintom umožní a čaká na správne natočenie ďalšieho bloku. V stave LEARN sa teda ani nepočíta skóre, ide o zoznámenie so základnými princípmi hry.

2014/ant-run.1421507023.txt.gz · Poslední úprava: 2015/01/17 16:03 autor: Tomáš Jankech