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 TFT | SPI interface | STM32F407VET6 |
---|---|---|
VCC | +5V | |
GND | GND | |
CS | PB_7 | |
RESET | PB_8 | |
D/C | PB_6 | |
SDI(MOSI) | PB_5 | |
SCK | PB_3 | |
LED | over a 56 ohm resistor | +5V |
SDO(MISO) | PB_4 |
main.cpp@1:971e721f6ef2, 2019-04-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |