【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
实验开源代码
- /*
- 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
- 实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
- 项目之一百一十七:ESP32+GC9A01之模拟一款小球避障游戏
- */
-
- // GC9A01---------- ESP32
- // RST ------------ NC(复位引脚,此处未连接)
- // CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
- // DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
- // SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
- // SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
- // GND ------------ GND(接地引脚,连接到ESP32的接地端)
- // VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
-
- #include <TFT_eSPI.h>
-
- #define SCREEN_WIDTH 240
- #define SCREEN_HEIGHT 240
- #define BALL_SIZE 10 // 小球大小
- #define OBSTACLE_WIDTH 40 // 障碍物宽度
- #define OBSTACLE_HEIGHT 20 // 障碍物高度
- #define BALL_SPEED 30 // 小球下落速度
-
- TFT_eSPI tft = TFT_eSPI();
-
- int ballX = random(20, SCREEN_WIDTH - 20); // **小球随机生成**
- int ballY = 0; // **小球从顶部开始下降**
- int obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物随机出现**
- int obstacleY = SCREEN_HEIGHT - 50; // **障碍物靠近底部**
- int score = 0; // **记录分数**
-
- void setup() {
- Serial.begin(115200);
- tft.init();
- tft.setRotation(2);
- tft.fillScreen(TFT_BLACK);
- }
-
- void drawGame() {
- tft.fillScreen(TFT_BLACK);
-
- // **绘制黄色小球**
- tft.fillCircle(ballX, ballY, BALL_SIZE, TFT_YELLOW);
-
- // **绘制红色障碍物**
- tft.fillRect(obstacleX, obstacleY, OBSTACLE_WIDTH, OBSTACLE_HEIGHT, TFT_RED);
-
- // **显示分数**
- tft.setCursor(70, 30);
- tft.setTextColor(TFT_WHITE);
- tft.setTextSize(2);
- tft.print("Score: " + String(score));
- }
-
- void updateGame() {
- ballY += BALL_SPEED; // **小球不断向下移动**
-
- // **检测碰撞**
- if (abs(ballX - obstacleX) < BALL_SIZE && abs(ballY - obstacleY) < OBSTACLE_HEIGHT) {
- score = 0; // **碰撞后重置分数**
- ballY = 0; // **小球回到顶部**
- ballX = random(20, SCREEN_WIDTH - 20); // **重新随机生成小球**
- obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
- }
-
- // **小球成功通过底部,增加分数**
- if (ballY > SCREEN_HEIGHT) {
- score += 1;
- ballY = 0; // **小球回到顶部**
- ballX = random(20, SCREEN_WIDTH - 20); // **随机生成新小球**
- obstacleX = random(20, SCREEN_WIDTH - OBSTACLE_WIDTH); // **障碍物重新随机出现**
- }
- }
-
- void loop() {
- updateGame();
- drawGame();
- delay(10);
- }
复制代码
|