A simple Pong game with STM32F407VET6 black board (Seeed Arch Max) and ILI9341 320x240 TFT display.

Dependencies:   mbed ILI9341_STM32F4

A simple Pong game with STM32F407VET6 black board (compatible with Seed Arch Max) and ILI9341 320x240 TFT display.

Connect the SPI interface of an ILI9341 320x240 TFT display to the STM32F407VET6 board (Seeed Arch Max) as follows:

ILI9341 TFTSPI interfaceSTM32F407VET6
VCC+5V
GNDGND
CSPB_7
RESETPB_8
D/CPB_6
SDI(MOSI)PB_5
SCKPB_3
LEDover a 56 ohm resistor+5V
SDO(MISO)PB_4
Committer:
hudakz
Date:
Mon Apr 15 06:02:55 2019 +0000
Revision:
1:971e721f6ef2
Parent:
0:887dd664eca0
Simple pong game updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 1:971e721f6ef2 1 // A simple Pong game with STM32F407VET6 black board (Seeed Arch Max) and ILI9341 320x240 TFT display.
hudakz 1:971e721f6ef2 2 // See more info on the STM32F407VET6 black board at https://os.mbed.com/users/hudakz/code/STM32F407VET6_Hello/
hudakz 0:887dd664eca0 3 //
hudakz 0:887dd664eca0 4 #include "mbed.h"
hudakz 0:887dd664eca0 5 #include "tft.h"
hudakz 0:887dd664eca0 6 #include "Racket.h"
hudakz 0:887dd664eca0 7 #include "Ball.h"
hudakz 0:887dd664eca0 8
hudakz 0:887dd664eca0 9 // Connect the SPI interface of an ILI9341 320x240 TFT display to the STM32F407VET6 board (Seeed Arch Max) as follows:
hudakz 1:971e721f6ef2 10
hudakz 1:971e721f6ef2 11 // ILI9341 STM32F407VET6
hudakz 0:887dd664eca0 12 // VCC +5V
hudakz 0:887dd664eca0 13 // GND GND
hudakz 0:887dd664eca0 14 // CS PB_7
hudakz 0:887dd664eca0 15 // RESET PB_8
hudakz 0:887dd664eca0 16 // D/C PB_6
hudakz 0:887dd664eca0 17 // SDI(MOSI) PB_5
hudakz 0:887dd664eca0 18 // SCK PB_3
hudakz 0:887dd664eca0 19 // LED over a 56 ohm resistor +5V
hudakz 0:887dd664eca0 20 // SDO(MISO) PB_4
hudakz 0:887dd664eca0 21 //
hudakz 1:971e721f6ef2 22 Ticker ticker;
hudakz 1:971e721f6ef2 23 DigitalIn racketUp(PE_4, PullUp); // K0 button
hudakz 1:971e721f6ef2 24 DigitalIn racketDown(PE_3, PullUp); // K1 button
hudakz 1:971e721f6ef2 25 Ball ball;
hudakz 1:971e721f6ef2 26 Racket racket;
hudakz 1:971e721f6ef2 27 volatile bool gameOn;
hudakz 1:971e721f6ef2 28 volatile bool missed;
hudakz 1:971e721f6ef2 29 Timeout timeout;
hudakz 1:971e721f6ef2 30
hudakz 1:971e721f6ef2 31 /**
hudakz 1:971e721f6ef2 32 * @brief
hudakz 1:971e721f6ef2 33 * @note
hudakz 1:971e721f6ef2 34 * @param
hudakz 1:971e721f6ef2 35 * @retval
hudakz 1:971e721f6ef2 36 */
hudakz 1:971e721f6ef2 37 void newGame()
hudakz 1:971e721f6ef2 38 {
hudakz 1:971e721f6ef2 39 tft_clear(TFT_BLACK);
hudakz 1:971e721f6ef2 40 racket.home();
hudakz 1:971e721f6ef2 41 ball.home();
hudakz 1:971e721f6ef2 42 gameOn = true;
hudakz 1:971e721f6ef2 43 }
hudakz 1:971e721f6ef2 44
hudakz 1:971e721f6ef2 45 /**
hudakz 1:971e721f6ef2 46 * @brief
hudakz 1:971e721f6ef2 47 * @note
hudakz 1:971e721f6ef2 48 * @param
hudakz 1:971e721f6ef2 49 * @retval
hudakz 1:971e721f6ef2 50 */
hudakz 1:971e721f6ef2 51 void gameOver()
hudakz 1:971e721f6ef2 52 {
hudakz 1:971e721f6ef2 53 gameOn = false;
hudakz 1:971e721f6ef2 54 tft_text(320 / 2 - 35, 240 / 2, "GAME OVER", TFT_WHITE, TFT_BLACK);
hudakz 1:971e721f6ef2 55 timeout.attach(callback(newGame), 2);
hudakz 1:971e721f6ef2 56 }
hudakz 0:887dd664eca0 57
hudakz 0:887dd664eca0 58 /**
hudakz 0:887dd664eca0 59 * @brief
hudakz 0:887dd664eca0 60 * @note
hudakz 0:887dd664eca0 61 * @param
hudakz 0:887dd664eca0 62 * @retval
hudakz 0:887dd664eca0 63 */
hudakz 0:887dd664eca0 64 void updateField()
hudakz 0:887dd664eca0 65 {
hudakz 1:971e721f6ef2 66 if (gameOn) {
hudakz 1:971e721f6ef2 67 racket.move(&racketUp, &racketDown); // move racket
hudakz 1:971e721f6ef2 68 racket.paint(); // paint racket
hudakz 1:971e721f6ef2 69 missed = ball.move(&racket); // move ball and check for collisions
hudakz 1:971e721f6ef2 70 if (missed)
hudakz 1:971e721f6ef2 71 gameOver();
hudakz 1:971e721f6ef2 72 else
hudakz 1:971e721f6ef2 73 ball.paint(); // paint ball
hudakz 1:971e721f6ef2 74 }
hudakz 0:887dd664eca0 75 }
hudakz 0:887dd664eca0 76
hudakz 0:887dd664eca0 77 /**
hudakz 0:887dd664eca0 78 * @brief
hudakz 0:887dd664eca0 79 * @note
hudakz 0:887dd664eca0 80 * @param
hudakz 0:887dd664eca0 81 * @retval
hudakz 0:887dd664eca0 82 */
hudakz 0:887dd664eca0 83 int main()
hudakz 0:887dd664eca0 84 {
hudakz 0:887dd664eca0 85 tft_init();
hudakz 1:971e721f6ef2 86 newGame();
hudakz 1:971e721f6ef2 87 ticker.attach_us(updateField, 20 * 1000); // update period = 20 ms
hudakz 0:887dd664eca0 88 while (true) { }
hudakz 0:887dd664eca0 89 }