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 [2014/11/28 21:51]
Jiří Wiesner
2014:stm32f0-snake [2015/01/18 17:17] (aktuální)
Jiří Wiesner
Řádek 1: Řádek 1:
-====Hra Snake====+====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.1417207888.txt.gz · Poslední úprava: 2014/11/28 21:51 autor: Jiří Wiesner