A simple pong game with a NUCLEO board and ILI9163C TFT display.

Dependencies:   mbed TFT_ILI9163C Adafruit_GFX_MBED

Files at this revision

API Documentation at this revision

Comitter:
hudakz
Date:
Thu Jan 20 16:21:57 2022 +0000
Commit message:
A simple pong game with a NUCLEO board and ILI9163C TFT display.

Changed in this revision

Adafruit_GFX.lib Show annotated file Show diff for this revision Revisions of this file
TFT_ILI9163C.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_GFX.lib	Thu Jan 20 16:21:57 2022 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/infotech1/code/Adafruit_GFX_MBED/#2c772b09cce5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TFT_ILI9163C.lib	Thu Jan 20 16:21:57 2022 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/billycorgan123/code/TFT_ILI9163C/#f0799be044ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jan 20 16:21:57 2022 +0000
@@ -0,0 +1,152 @@
+#include "mbed.h"
+#include "math.h"
+#include "Adafruit_GFX.h"
+#include "TFT_ILI9163C.h"
+
+#define M_PI 3.14159265358979323846
+
+
+// Define TFT to NUCLEO_F446RE pin connection
+#define TFT_MOSI    PA_7
+#define TFT_SCLK    PA_5
+#define TFT_CS      PB_6
+#define TFT_DC      PC_7
+#define TFT_RST     PA_9
+
+// SPI speed
+#define SPI_BITRATE 50000000L
+
+// Color definitions
+#define BLACK       0x0000
+#define BLUE        0x001F
+#define RED         0xF800
+#define GREEN       0x07E0
+#define CYAN        0x07FF
+#define MAGENTA     0xF81F
+#define YELLOW      0xFFE0
+#define WHITE       0xFFFF
+
+// Create display object
+TFT_ILI9163C    display(TFT_MOSI, NC, TFT_SCLK, TFT_CS, TFT_DC, TFT_RST);
+AnalogIn        a1(PA_0);
+AnalogIn        a2(PA_1);
+DigitalIn       startButton(PC_13);
+
+int             bx = 64;
+int             by = 64;
+int             P1x1 = 0, P1x2 = 3, P1y1, P1y2;
+int             P2x1 = 124, P2x2 = 127, P2y1, P2y2;
+float           angle;
+int             speed;
+int             P1S = 0, P2S = 0;
+int             hold, h1, h2;
+char            score[32];
+
+/**
+ * @brief
+ * @note
+ * @param
+ * @retval
+ */
+int main()
+{
+    //    display.text_width(1);
+    //    display.text_height(1);
+    //    display.baudrate(300000);
+    // Initialize random angle between 0 and 360
+    srand(time(NULL));
+    do
+    {
+        angle = rand() % 361;
+    } while
+    (
+        (angle < 20) ||
+        (angle > 70 && angle < 110) ||
+        (angle > 160 && angle < 200) ||
+        (angle > 250 && angle < 290) ||
+        (angle > 340)
+    );
+
+    /////////////////////////////////////////////////////
+    while (1) {
+        if (startButton == 0) {
+            hold = 0;
+            h1 = 0;
+            h2 = 0;
+        }
+
+        if (hold == 1)
+            speed = 0;
+        else
+            speed = 5;
+
+        // Set position of the paddles
+        P1y1 = (a1 * 103) + 8;
+        P1y2 = P1y1 + 16;
+        P2y1 = (a2 * 103 + 8);
+        P2y2 = P2y1 + 16;
+
+        // Control motion of ball
+        display.fillCircle(bx, by, 2, WHITE);
+
+        if ((bx > 122 && (by > P2y1 && by < P2y2)) || (bx < 5 && (by > P1y1 && by < P1y2)))
+            angle = 180 - angle;
+        else
+        if (by > 125 || by < 10)    // I think this is where our problem is
+            angle = -angle;
+
+        //P1 Scores
+        else
+        if (bx > 122) {
+            P1S++;
+            bx = 5;
+            by = P1y1 + 8;
+            hold = 1;
+            h1 = 1;
+            angle = rand() % 120 + 120 + 180;
+
+            //P2 Scores
+        }
+        else
+        if (bx < 5) {
+            P2S++;
+            bx = 122;
+            by = P2y1 + 8;
+            hold = 1;
+            h2 = 1;
+            angle = rand() % 120 + 120;
+        }
+
+        if (hold == 1 && h1 == 1) {
+            bx = 6;
+            by = P1y1 + 8;
+        }
+        else
+        if (hold == 1 && h2 == 1) {
+            bx = 121;
+            by = P2y1 + 8;
+        }
+        else {
+            bx = bx + speed * cos(angle * 2 * M_PI / 360);
+            by = by - speed * sin(angle * 2 * M_PI / 360);
+        }
+
+        // Print paddles and ball
+        display.fillCircle(bx, by, 2, WHITE);
+        display.fillRect(0, P1y1, 3, P1y2, WHITE);
+        display.fillRect(124, P2y1, 127, P2y2, WHITE);
+        display.fillRect(0, 9, 3, P1y1 - 1, 0);
+        display.fillRect(0, P1y2 + 1, 3, 127, 0);
+        display.fillRect(124, 9, 127, P2y1 - 1, 0);
+        display.fillRect(124, P2y2 + 1, 127, 127, 0);
+        display.fillRect(5, 8, 122, 8, WHITE);
+
+        // Print scores
+        display.setCursor(2, 0);
+
+        //display.printf("P1: %d    P2: %d", P1S, P2S);
+        sprintf(score, "P1: %d    P2: %d", P1S, P2S);
+        display.print(score);
+        wait(.005);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Jan 20 16:21:57 2022 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/2e9cc70d1897
\ No newline at end of file