A simple pong game with a NUCLEO board and ILI9163C TFT display.
Dependencies: mbed TFT_ILI9163C Adafruit_GFX_MBED
main.cpp@0:b07b507bad19, 2022-01-20 (annotated)
- Committer:
- hudakz
- Date:
- Thu Jan 20 16:21:57 2022 +0000
- Revision:
- 0:b07b507bad19
A simple pong game with a NUCLEO board and ILI9163C TFT display.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:b07b507bad19 | 1 | #include "mbed.h" |
hudakz | 0:b07b507bad19 | 2 | #include "math.h" |
hudakz | 0:b07b507bad19 | 3 | #include "Adafruit_GFX.h" |
hudakz | 0:b07b507bad19 | 4 | #include "TFT_ILI9163C.h" |
hudakz | 0:b07b507bad19 | 5 | |
hudakz | 0:b07b507bad19 | 6 | #define M_PI 3.14159265358979323846 |
hudakz | 0:b07b507bad19 | 7 | |
hudakz | 0:b07b507bad19 | 8 | |
hudakz | 0:b07b507bad19 | 9 | // Define TFT to NUCLEO_F446RE pin connection |
hudakz | 0:b07b507bad19 | 10 | #define TFT_MOSI PA_7 |
hudakz | 0:b07b507bad19 | 11 | #define TFT_SCLK PA_5 |
hudakz | 0:b07b507bad19 | 12 | #define TFT_CS PB_6 |
hudakz | 0:b07b507bad19 | 13 | #define TFT_DC PC_7 |
hudakz | 0:b07b507bad19 | 14 | #define TFT_RST PA_9 |
hudakz | 0:b07b507bad19 | 15 | |
hudakz | 0:b07b507bad19 | 16 | // SPI speed |
hudakz | 0:b07b507bad19 | 17 | #define SPI_BITRATE 50000000L |
hudakz | 0:b07b507bad19 | 18 | |
hudakz | 0:b07b507bad19 | 19 | // Color definitions |
hudakz | 0:b07b507bad19 | 20 | #define BLACK 0x0000 |
hudakz | 0:b07b507bad19 | 21 | #define BLUE 0x001F |
hudakz | 0:b07b507bad19 | 22 | #define RED 0xF800 |
hudakz | 0:b07b507bad19 | 23 | #define GREEN 0x07E0 |
hudakz | 0:b07b507bad19 | 24 | #define CYAN 0x07FF |
hudakz | 0:b07b507bad19 | 25 | #define MAGENTA 0xF81F |
hudakz | 0:b07b507bad19 | 26 | #define YELLOW 0xFFE0 |
hudakz | 0:b07b507bad19 | 27 | #define WHITE 0xFFFF |
hudakz | 0:b07b507bad19 | 28 | |
hudakz | 0:b07b507bad19 | 29 | // Create display object |
hudakz | 0:b07b507bad19 | 30 | TFT_ILI9163C display(TFT_MOSI, NC, TFT_SCLK, TFT_CS, TFT_DC, TFT_RST); |
hudakz | 0:b07b507bad19 | 31 | AnalogIn a1(PA_0); |
hudakz | 0:b07b507bad19 | 32 | AnalogIn a2(PA_1); |
hudakz | 0:b07b507bad19 | 33 | DigitalIn startButton(PC_13); |
hudakz | 0:b07b507bad19 | 34 | |
hudakz | 0:b07b507bad19 | 35 | int bx = 64; |
hudakz | 0:b07b507bad19 | 36 | int by = 64; |
hudakz | 0:b07b507bad19 | 37 | int P1x1 = 0, P1x2 = 3, P1y1, P1y2; |
hudakz | 0:b07b507bad19 | 38 | int P2x1 = 124, P2x2 = 127, P2y1, P2y2; |
hudakz | 0:b07b507bad19 | 39 | float angle; |
hudakz | 0:b07b507bad19 | 40 | int speed; |
hudakz | 0:b07b507bad19 | 41 | int P1S = 0, P2S = 0; |
hudakz | 0:b07b507bad19 | 42 | int hold, h1, h2; |
hudakz | 0:b07b507bad19 | 43 | char score[32]; |
hudakz | 0:b07b507bad19 | 44 | |
hudakz | 0:b07b507bad19 | 45 | /** |
hudakz | 0:b07b507bad19 | 46 | * @brief |
hudakz | 0:b07b507bad19 | 47 | * @note |
hudakz | 0:b07b507bad19 | 48 | * @param |
hudakz | 0:b07b507bad19 | 49 | * @retval |
hudakz | 0:b07b507bad19 | 50 | */ |
hudakz | 0:b07b507bad19 | 51 | int main() |
hudakz | 0:b07b507bad19 | 52 | { |
hudakz | 0:b07b507bad19 | 53 | // display.text_width(1); |
hudakz | 0:b07b507bad19 | 54 | // display.text_height(1); |
hudakz | 0:b07b507bad19 | 55 | // display.baudrate(300000); |
hudakz | 0:b07b507bad19 | 56 | // Initialize random angle between 0 and 360 |
hudakz | 0:b07b507bad19 | 57 | srand(time(NULL)); |
hudakz | 0:b07b507bad19 | 58 | do |
hudakz | 0:b07b507bad19 | 59 | { |
hudakz | 0:b07b507bad19 | 60 | angle = rand() % 361; |
hudakz | 0:b07b507bad19 | 61 | } while |
hudakz | 0:b07b507bad19 | 62 | ( |
hudakz | 0:b07b507bad19 | 63 | (angle < 20) || |
hudakz | 0:b07b507bad19 | 64 | (angle > 70 && angle < 110) || |
hudakz | 0:b07b507bad19 | 65 | (angle > 160 && angle < 200) || |
hudakz | 0:b07b507bad19 | 66 | (angle > 250 && angle < 290) || |
hudakz | 0:b07b507bad19 | 67 | (angle > 340) |
hudakz | 0:b07b507bad19 | 68 | ); |
hudakz | 0:b07b507bad19 | 69 | |
hudakz | 0:b07b507bad19 | 70 | ///////////////////////////////////////////////////// |
hudakz | 0:b07b507bad19 | 71 | while (1) { |
hudakz | 0:b07b507bad19 | 72 | if (startButton == 0) { |
hudakz | 0:b07b507bad19 | 73 | hold = 0; |
hudakz | 0:b07b507bad19 | 74 | h1 = 0; |
hudakz | 0:b07b507bad19 | 75 | h2 = 0; |
hudakz | 0:b07b507bad19 | 76 | } |
hudakz | 0:b07b507bad19 | 77 | |
hudakz | 0:b07b507bad19 | 78 | if (hold == 1) |
hudakz | 0:b07b507bad19 | 79 | speed = 0; |
hudakz | 0:b07b507bad19 | 80 | else |
hudakz | 0:b07b507bad19 | 81 | speed = 5; |
hudakz | 0:b07b507bad19 | 82 | |
hudakz | 0:b07b507bad19 | 83 | // Set position of the paddles |
hudakz | 0:b07b507bad19 | 84 | P1y1 = (a1 * 103) + 8; |
hudakz | 0:b07b507bad19 | 85 | P1y2 = P1y1 + 16; |
hudakz | 0:b07b507bad19 | 86 | P2y1 = (a2 * 103 + 8); |
hudakz | 0:b07b507bad19 | 87 | P2y2 = P2y1 + 16; |
hudakz | 0:b07b507bad19 | 88 | |
hudakz | 0:b07b507bad19 | 89 | // Control motion of ball |
hudakz | 0:b07b507bad19 | 90 | display.fillCircle(bx, by, 2, WHITE); |
hudakz | 0:b07b507bad19 | 91 | |
hudakz | 0:b07b507bad19 | 92 | if ((bx > 122 && (by > P2y1 && by < P2y2)) || (bx < 5 && (by > P1y1 && by < P1y2))) |
hudakz | 0:b07b507bad19 | 93 | angle = 180 - angle; |
hudakz | 0:b07b507bad19 | 94 | else |
hudakz | 0:b07b507bad19 | 95 | if (by > 125 || by < 10) // I think this is where our problem is |
hudakz | 0:b07b507bad19 | 96 | angle = -angle; |
hudakz | 0:b07b507bad19 | 97 | |
hudakz | 0:b07b507bad19 | 98 | //P1 Scores |
hudakz | 0:b07b507bad19 | 99 | else |
hudakz | 0:b07b507bad19 | 100 | if (bx > 122) { |
hudakz | 0:b07b507bad19 | 101 | P1S++; |
hudakz | 0:b07b507bad19 | 102 | bx = 5; |
hudakz | 0:b07b507bad19 | 103 | by = P1y1 + 8; |
hudakz | 0:b07b507bad19 | 104 | hold = 1; |
hudakz | 0:b07b507bad19 | 105 | h1 = 1; |
hudakz | 0:b07b507bad19 | 106 | angle = rand() % 120 + 120 + 180; |
hudakz | 0:b07b507bad19 | 107 | |
hudakz | 0:b07b507bad19 | 108 | //P2 Scores |
hudakz | 0:b07b507bad19 | 109 | } |
hudakz | 0:b07b507bad19 | 110 | else |
hudakz | 0:b07b507bad19 | 111 | if (bx < 5) { |
hudakz | 0:b07b507bad19 | 112 | P2S++; |
hudakz | 0:b07b507bad19 | 113 | bx = 122; |
hudakz | 0:b07b507bad19 | 114 | by = P2y1 + 8; |
hudakz | 0:b07b507bad19 | 115 | hold = 1; |
hudakz | 0:b07b507bad19 | 116 | h2 = 1; |
hudakz | 0:b07b507bad19 | 117 | angle = rand() % 120 + 120; |
hudakz | 0:b07b507bad19 | 118 | } |
hudakz | 0:b07b507bad19 | 119 | |
hudakz | 0:b07b507bad19 | 120 | if (hold == 1 && h1 == 1) { |
hudakz | 0:b07b507bad19 | 121 | bx = 6; |
hudakz | 0:b07b507bad19 | 122 | by = P1y1 + 8; |
hudakz | 0:b07b507bad19 | 123 | } |
hudakz | 0:b07b507bad19 | 124 | else |
hudakz | 0:b07b507bad19 | 125 | if (hold == 1 && h2 == 1) { |
hudakz | 0:b07b507bad19 | 126 | bx = 121; |
hudakz | 0:b07b507bad19 | 127 | by = P2y1 + 8; |
hudakz | 0:b07b507bad19 | 128 | } |
hudakz | 0:b07b507bad19 | 129 | else { |
hudakz | 0:b07b507bad19 | 130 | bx = bx + speed * cos(angle * 2 * M_PI / 360); |
hudakz | 0:b07b507bad19 | 131 | by = by - speed * sin(angle * 2 * M_PI / 360); |
hudakz | 0:b07b507bad19 | 132 | } |
hudakz | 0:b07b507bad19 | 133 | |
hudakz | 0:b07b507bad19 | 134 | // Print paddles and ball |
hudakz | 0:b07b507bad19 | 135 | display.fillCircle(bx, by, 2, WHITE); |
hudakz | 0:b07b507bad19 | 136 | display.fillRect(0, P1y1, 3, P1y2, WHITE); |
hudakz | 0:b07b507bad19 | 137 | display.fillRect(124, P2y1, 127, P2y2, WHITE); |
hudakz | 0:b07b507bad19 | 138 | display.fillRect(0, 9, 3, P1y1 - 1, 0); |
hudakz | 0:b07b507bad19 | 139 | display.fillRect(0, P1y2 + 1, 3, 127, 0); |
hudakz | 0:b07b507bad19 | 140 | display.fillRect(124, 9, 127, P2y1 - 1, 0); |
hudakz | 0:b07b507bad19 | 141 | display.fillRect(124, P2y2 + 1, 127, 127, 0); |
hudakz | 0:b07b507bad19 | 142 | display.fillRect(5, 8, 122, 8, WHITE); |
hudakz | 0:b07b507bad19 | 143 | |
hudakz | 0:b07b507bad19 | 144 | // Print scores |
hudakz | 0:b07b507bad19 | 145 | display.setCursor(2, 0); |
hudakz | 0:b07b507bad19 | 146 | |
hudakz | 0:b07b507bad19 | 147 | //display.printf("P1: %d P2: %d", P1S, P2S); |
hudakz | 0:b07b507bad19 | 148 | sprintf(score, "P1: %d P2: %d", P1S, P2S); |
hudakz | 0:b07b507bad19 | 149 | display.print(score); |
hudakz | 0:b07b507bad19 | 150 | wait(.005); |
hudakz | 0:b07b507bad19 | 151 | } |
hudakz | 0:b07b507bad19 | 152 | } |