Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:stm32f0-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

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2014:stm32f0-snake [2015/01/18 15:47]
Jiří Wiesner
2014:stm32f0-snake [2015/01/18 17:17] (aktuální)
Jiří Wiesner
Řádek 1: Řádek 1:
 ====Hra Snake pomocí gyroskopu a grafického displeje na kitu STM32F4==== ====Hra Snake pomocí gyroskopu a grafického displeje na kitu STM32F4====
 +
 +Původním záměrem bylo vytvořit hru Snake za pomoci LED matice, externího gyroskopu a kitu STM32F0. Kvůli nefunkčnímu hardwaru však bylo zadání změněno na vývojový kit STM32F4, který má integrovaný jak displej, tak gyroskop, změna směru hada tedy odpovídá změně směru nahnutí desky.
 +
 +V první části kódu bylo nutné zainkludovat základní knihovny a knihovny pro práci s gyroskopem a displejem, zdrojem byly stranky http://​stm32f4-discovery.com/​.
 +
 +**Program**:​
 +<code c>
 +#include "​tm_stm32f4_ili9341_ltdc.h"​
 +#include "​tm_stm32f4_l3gd20.h"​
 +#include "​tm_stm32f4_delay.h"​
 +#include "​stm32f4xx.h"​
 +#include "​defines.h"​
 +
 +#include <​stdint.h>​
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +
 +int main(void) {
 +
 +    uint16_t i,j;
 +    int      x_pos[5] = {125, 145, 165, 185, 205};
 +    int      ​x_pos_old;​
 +    int      ​y_pos[5] = {160, 160, 160, 160, 160};
 +    int      ​y_pos_old;​
 +    int      status; ​    //​udava smer
 +
 +    TM_L3GD20_t L3GD20_Data;​
 +
 + SystemInit();​
 + TM_DELAY_Init();​
 + TM_ILI9341_Init();​
 + delay_init();​
 + ili9341_init();​
 +
 + TM_ILI9341_Rotate(TM_ILI9341_Orientation_Portrait_2);​
 +        TM_ILI9341_Fill(ILI9341_COLOR_RED);​
 +
 +
 +       /* Init L3GD20 sensor */
 +       if (TM_L3GD20_Init(TM_L3GD20_Scale_2000) != TM_L3GD20_Result_Ok) {
 +       /* Sensor error */
 +           ​TM_ILI9341_Puts(10,​ 100, "​Sensor ERROR!",​ &​TM_Font_11x18,​ 0x0000, ILI9341_COLOR_RED);​
 +
 +           while (1);
 +       }
 +
 +       ​while(1){
 +       
 +       //​prekresleni hada
 +       ​x_pos_old = x_pos[4];
 +       ​y_pos_old = y_pos[4];
 +
 +       ​x_pos[4] =  x_pos[3];
 +       ​y_pos[4] =  y_pos[3];
 +
 +       ​x_pos[3] =  x_pos[2];
 +       ​y_pos[3] =  y_pos[2];
 +
 +       ​x_pos[2] =  x_pos[1];
 +       ​y_pos[2] =  y_pos[1];
 +
 +       ​x_pos[1] =  x_pos[0];
 +       ​y_pos[1] =  y_pos[0];
 +
 +       //​nacteni dat z gyroskopu
 +       ​  ​  ​TM_L3GD20_Read(&​L3GD20_Data);​
 +
 +
 +       ​  ​  //​absolutni zmena
 + if ((L3GD20_Data.Y * L3GD20_Data.Y) > (L3GD20_Data.X * L3GD20_Data.X)){
 +   if (L3GD20_Data.Y>​25)
 +   status = 1;
 +   if (L3GD20_Data.Y<​(-25))
 +   status = -1;
 + }
 + else {
 +   if (L3GD20_Data.X>​25)
 + status = 2;
 +   if (L3GD20_Data.X<​(-25))
 + status = -2;
 + }
 +
 +
 +          //posun v danych smerech
 +   if (status == 1)
 +          ​x_pos[0] += 20;
 +   if (status == -1)
 +          ​x_pos[0] -= 20;
 +
 +       ​  ​ if (status == 2)
 +       ​  ​ y_pos[0] += 20;
 +       ​  ​ if (status == -2)
 +       ​  ​ y_pos[0] -= 20;
 +
 +
 +        //podtekani a pretekani
 +         ​if(x_pos[0] > 239)
 +        x_pos[0] -= 240;
 +        if(y_pos[0] > 319)
 +        y_pos[0] -= 320;
 +
 +        if(x_pos[0] < 1)
 +        x_pos[0] += 240;
 +        if(y_pos[0] < 1)
 +        y_pos[0] += 320;
 +
 +
 +   TM_ILI9341_DrawFilledCircle(x_pos_old,​ y_pos_old, 10, ILI9341_COLOR_RED);//​smaze
 +   TM_ILI9341_DrawFilledCircle(x_pos[0],​ y_pos[0], 10, ILI9341_COLOR_BLACK);//​dokresli
 +
 +   delay_ms(400);​
 +
 +        }
 +}
 +</​code>​
 +
 +**Závěr:​**:​
 +Byla naprogramována jednoduchá hra Snake, která je řízena dle příslušných hodnot v osách X a Y obdržených z vestavěného gyroskopu. Demonstrační video lze shlednout na: https://​www.youtube.com/​watch?​v=flEpEQqiEGE&​feature=youtu.be
 +
  
  
2014/stm32f0-snake.1421592472.txt.gz · Poslední úprava: 2015/01/18 15:47 autor: Jiří Wiesner