Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:led-snake

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
2014:led-snake [2015/01/14 23:41]
Miroslav Cupal vytvořeno - zakladni popis HW, SW, ukazky kodu
2014:led-snake [2015/01/18 13:27] (aktuální)
Jan Novotný [KOD]
Řádek 18: Řádek 18:
  
 {{ :​2014:​led-snake:​matice.gif?​200 |}} {{ :​2014:​led-snake:​matice.gif?​200 |}}
-{{ :​2014:​led-snake:​matice.png?​200 |}}+{{ :​2014:​led-snake:​matice.png?​200 |Prehled dvou mapovani disp.}}
  
 ===== Hardware ===== ===== Hardware =====
Řádek 31: Řádek 31:
   * Poslední využitou periferií je kapacitní slider, který slouží pro nastavení rychlosti hada. Tu lze proti základní rychlosti zpomalit, ale i zrychlit.   * Poslední využitou periferií je kapacitní slider, který slouží pro nastavení rychlosti hada. Tu lze proti základní rychlosti zpomalit, ale i zrychlit.
  
-{{ :​2014:​led-snake:​diagram1.png?​300 |}}+{{ :​2014:​led-snake:​diagram1.png?​300 ​|Blokové schéma}} 
 + 
 +Vývojová deska je s displejem propojena pomocí redukčního přípravku,​ který má možnost připojení dvou tlačítek a rozhraní UART. Jelikož je had ovládán pomocí 4 tlačítek byla tlačítka vyvedena mimo na nepájivé kontaktní pole. Uspořádání tlačítek bylo zvoleno jako uspořádání kurzorových šipek na PC klávesnici.\\ 
 +{{ :​2014:​led-snake:​schema_redukce.png?​300 |Redukce KL25Z na disp.}}{{ :​2014:​led-snake:​schema_tlacitka.png?​200 |Schéma zapojení tlačítek}} 
 +{{ :​2014:​led-snake:​deska_redukce.png?​200 ​|}}
  
-Vývojová deska je s displejem propojena pomocí redukčního přípravku,​ který má možnost připojení dvou tlačítek a vývodu pro I2C. Jelikož je had ovládán pomocí 4 tlačítek byla tlačítka vyvedena mimo na nepájivé kontaktní pole. Uspořádání tlačítek bylo zvoleno jako uspořádání kurzorových šipek na PC klávesnici. 
 Vzhledem k umístění kapacitního slideru na desce a jeho překrytí redukční deskou byly piny na tuto desku napájené v maximální délce. Ovládání rychlosti je tedy možné, ale špatně dosažitelné. Vzhledem k umístění kapacitního slideru na desce a jeho překrytí redukční deskou byly piny na tuto desku napájené v maximální délce. Ovládání rychlosti je tedy možné, ale špatně dosažitelné.
 +
 +{{:​2014:​led-snake:​sam_0996.jpg?​200|}} ​ {{:​2014:​led-snake:​sam_0998.jpg?​200|}} ​ {{:​2014:​led-snake:​sam_10092.jpg?​200|}}
 +
  
 ===== Software ===== ===== Software =====
Řádek 53: Řádek 59:
  
 ==== KOD ==== ==== KOD ====
-Program je tvořen několika funkcemi jejich zaměření lze rozdělit na funkce starající se o zobrazení, generování dat a řízení hada. Do programu byly importovány knihovny TSI (kapacitní slider) a knihovna mbed.+Program je tvořen několika funkcemi jejich zaměření lze rozdělit na funkce starající se o zobrazení, generování dat a řízení hada. Do programu byly importovány knihovny TSI (kapacitní slider) a knihovna mbed. Kompletní program, binárka a soubory pro kompilaci jsou v archivu {{:​2014:​led-snake:​snake.zip|}}.
  
 Řízení hada probíhá pomocí pole o rozměru 64 bodů. Pole s názvem h[64] o definovaném rozměru je naplněno číslem 65. Toto číslo nemůže nikdy nastat a složí jako informace o nepřítomnosti hada. Jednotlivé segmenty pole představují pořadové číslo článku hada a jejich hodnota udává pozici tohoto článku. Platí tedy že hlava bude vždy v h[0] a bude se lišit číselná hodnota. Řízení hada probíhá pomocí pole o rozměru 64 bodů. Pole s názvem h[64] o definovaném rozměru je naplněno číslem 65. Toto číslo nemůže nikdy nastat a složí jako informace o nepřítomnosti hada. Jednotlivé segmenty pole představují pořadové číslo článku hada a jejich hodnota udává pozici tohoto článku. Platí tedy že hlava bude vždy v h[0] a bude se lišit číselná hodnota.
 Pohyb hada je řešeny vytvořením nové hlavy na příslušné pozici podle zvoleného směru pohybu a vymazáním posledního článku ocasu hada. Pohyb hada je řešeny vytvořením nové hlavy na příslušné pozici podle zvoleného směru pohybu a vymazáním posledního článku ocasu hada.
 <code c> <code c>
-int pohyb() ​    //​pohyb hada v pracovnich souradnicich h[]+void pohyb() ​    //​pohyb hada v pracovnich souradnicich h[]
 { {
-  char i;+  ​unsigned ​char i;
   switch (posun){ ​      //na zaklade velikosti posunu rozhodne o smeru, funkce v case jsou temer totozne   switch (posun){ ​      //na zaklade velikosti posunu rozhodne o smeru, funkce v case jsou temer totozne
     case 0:     case 0:
Řádek 148: Řádek 154:
     }     }
   nuldisp(); ​       //volani vynulovani displeje   nuldisp(); ​       //volani vynulovani displeje
-  return 0; 
 } }
 </​code>​ </​code>​
Řádek 154: Řádek 159:
 Další zajímavou částí programu je generování pozice jablka. To probíhá pomocí srand a rand. Pro zajištění maximální náhodné hodnoty je vstupem funkce srand 1000 násobek hodnoty na pinu PTB3, který je nastaven jako analogový vstup a součet času od spuštění desky. Další zajímavou částí programu je generování pozice jablka. To probíhá pomocí srand a rand. Pro zajištění maximální náhodné hodnoty je vstupem funkce srand 1000 násobek hodnoty na pinu PTB3, který je nastaven jako analogový vstup a součet času od spuštění desky.
 <code c> <code c>
-int genj() ​     // funkce generujici pozici jablka+void genj() ​     // funkce generujici pozici jablka
 { {
   char i;       // pomocna   char i;       // pomocna
Řádek 166: Řádek 171:
   }   }
   s++;      // pricteni jablka do skore - o jedno spozdeno   s++;      // pricteni jablka do skore - o jedno spozdeno
-  return 0;  ​ 
 } }
 </​code>​ </​code>​
Řádek 174: Řádek 178:
 void dejmat() ​      // prepocet pracovnich souradnic na souradnice na dipleji void dejmat() ​      // prepocet pracovnich souradnic na souradnice na dipleji
 { {
-  char i,t1,t2;+  ​unsigned ​char i,t1,t2;
   for(i = 0; i <= 65; i++){   for(i = 0; i <= 65; i++){
     if(h[i] != 65){     if(h[i] != 65){
Řádek 248: Řádek 252:
 </​code>​ </​code>​
  
 +Funkce main probíhá celá v nekonečné smyčce, pro zajištění opakování hry. Následuje plnění pracovních polí příznakem o nepřítomnosti hada, nulování displeje a definice hada do výchozí polohy. Následuje smyčka hry která trvá tak dlouho dokud funkce konec nevrátí 0. Následují funkce pro zablikání hada po zakousnutí,​ výpočet a zobrazení skóre. Poslední smyčka while probíhá dokud není stisknuté tlačítko UP.
 +
 +<code c>
 +int main()
 +{
 +  while(1){
 +    int i,​k=0,​kk=40,​t1,​t2;​
 +    ​
 +    srand (time(NULL)+ran*1000); ​       //pro skoronahodnou posloupnost
 +  ​
 +    for(i=0;​i<​65;​i++){ ​     //nulovani pracovnich poli
 +      h[i] = 65;
 +      hh[i] = 65;
 +    }
 +
 +    nuldisp(); ​     //na zacatku vynuluj displej
 +
 +    for (i = 0; i < size; i++){     //​pocatecni delka hada v zobrazovaci matici
 +      had[0][i] = 0;
 +    }
 +    ​
 +    h[0]=2;​h[1]=1;​h[2]=0; ​      // pocatecni had v pracovnim poli
 +    genj(); ​    //​generovani jablka
 +      while(konec()){ ​      //​smycka vlastni hry
 +        tlac(); ​        //​obsluha tlacitek
 +        dejmat(); ​      //​prevod z prac do matic
 +        ukaz(); ​        //​zobrazeni matice
 +       
 +        if(100*tsi.readPercentage() > 10){      // ovladani rychlosti hada, pokud se dotknu slideru ulozi se aktualni hodnota do promene
 +          kk = 110-100*tsi.readPercentage(); ​   // doleva pomalejsi doprava rychlejsi
 +        }
 +      ​
 +        if(k >= kk ){       // zajisteni pohybu hada danou rychlosti
 +          pohyb();
 +          chlamst();
 +          k = 0;
 +        }
 +        k++;
 +      }
 +  // zablikani hada pokud se zakousne
 +    nuldisp();
 +    cekej();
 +    dejmat();
 +    cekej();
 +    nuldisp();
 +    cekej();
 +    dejmat();
 +    cekej();
 +    nuldisp();
 +    cekej();
 +    nuldisp();
 +  ​
 +    score(s); ​  // prepocet skore
 +    for(i = 0; i <= 65; i++){       // prevedeni do maticove podoby
 +      if(h[i] == 66){
 +    t1 = i % 8;
 +    t2 = i / 8;
 +      had[t2][t1] = 0;
 +      }
 +    }
 +    while(1){ ​      //​smycka zobrazujici skore az do stisku reset nebo sipky nahoru
 +      ukaz();
 +      if(up ==0){
 +    size = 3;s=2;posun = 0;
 +    wait(0.5);
 +    break;
 +      }
 +    }
 +  }
 +}
 +</​code>​
 +
 +
 +
 +===== Videoukázka =====
 +Na videu jsou ukázané všechny funkce. Je ukázána krátká hra s hadem pohybujícím se všemi směry, sežrání jablka, zakousnutí hada a zobrazení skóre. Následuje restart hry a ukázka změny rychlosti.
 +{{ youtube>​XWr7cuOYZPU?​medium }}
  
 +===== Zhodnocení =====
 +V programu jsou implementovány všechny důležité funkce a hra je plně funkční. Program je připraven pro možnost implementování dalších funkcí jako výpočet skóre s ohledem na rychlost hada nebo náhodné generování překážek případně zrychlování hada po sežrání jablka. Tato vylepšení hry by vyžadovala implementaci jednoduchého menu které by umožnilo zapnout různé funkce.
2014/led-snake.1421275272.txt.gz · Poslední úprava: 2015/01/14 23:41 autor: Miroslav Cupal