Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


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

#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);
 
        }
}

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.txt · Poslední úprava: 2015/01/18 17:17 autor: Jiří Wiesner