125浏览
查看: 125|回复: 6

[项目] 【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

[复制链接]
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图2

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图1

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:15:09

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图1

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:17:38

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图2

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:20:07

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目之七十一:GC9A01园屏之360度旋转的彩虹球

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目之七十一:GC9A01园屏之360度旋转的彩虹球
  5. */
  6. #include "SPI.h"                      // 包含 SPI 库,用于 TFT 屏幕通信
  7. #include "Adafruit_GFX.h"             // 包含 Adafruit GFX 图形库,用于绘制图形
  8. #include "Adafruit_GC9A01A.h"         // 包含 GC9A01A 屏幕驱动库
  9. #define TFT_CS 4                      // 定义 TFT 屏幕片选引脚
  10. #define TFT_DC 2                      // 定义 TFT 屏幕数据/命令选择引脚
  11. #define TFT_RST -1                    // 屏幕复位引脚(-1 表示未使用)
  12. Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST); // 创建 TFT 屏幕对象
  13. #define SCREEN_WIDTH 240
  14. #define SCREEN_HEIGHT 240
  15. #define CENTER_X SCREEN_WIDTH / 2
  16. #define CENTER_Y SCREEN_HEIGHT / 2
  17. #define RADIUS 120                    // 彩虹背景半径
  18. #define ROTATION_SPEED 100.05          // 旋转速度
  19. #define RAINBOW_SEGMENT_ANGLE 51.43   // 彩虹每段的角度
  20. float rotationAngle = 0;
  21. // 定义彩虹颜色
  22. uint16_t rainbowColors[] = {
  23.     tft.color565(255, 0, 0),   // 红色
  24.     tft.color565(255, 165, 0), // 橙色
  25.     tft.color565(255, 255, 0), // 黄色
  26.     tft.color565(0, 255, 0),   // 绿色
  27.     tft.color565(0, 0, 255),   // 蓝色
  28.     tft.color565(75, 0, 130),  // 靛蓝
  29.     tft.color565(148, 0, 211)  // 紫色
  30. };
  31. // 绘制彩虹的函数
  32. void drawRainbow() {
  33.     for (int i = 0; i < 7; i++) {
  34.         // 计算每段彩虹的起始和结束角度(转换为弧度)
  35.         float angleStart = (i * RAINBOW_SEGMENT_ANGLE + rotationAngle) * M_PI / 180;
  36.         float angleEnd = ((i + 1) * RAINBOW_SEGMENT_ANGLE + rotationAngle) * M_PI / 180;
  37.         // 绘制三角形来组成彩虹
  38.         tft.fillTriangle(CENTER_X, CENTER_Y,
  39.                          CENTER_X + RADIUS * cos(angleStart), CENTER_Y + RADIUS * sin(angleStart),
  40.                          CENTER_X + RADIUS * cos(angleEnd), CENTER_Y + RADIUS * sin(angleEnd),
  41.                          rainbowColors[i]);
  42.     }
  43. }
  44. void setup() {
  45.     // 初始化串口通信,波特率为 115200,用于调试信息输出
  46.     Serial.begin(115200);
  47.     // 初始化 TFT 屏幕
  48.     tft.begin();
  49.     // 设置屏幕旋转方向
  50.     tft.setRotation(1);
  51.     // 用黑色填充屏幕
  52.     tft.fillScreen(tft.color565(0, 0, 0));
  53. }
  54. void loop() {
  55.     // 每次循环开始时,用黑色填充屏幕,清除上一帧的内容
  56.     tft.fillScreen(tft.color565(0, 0, 0));
  57.     // 调用绘制彩虹的函数
  58.     drawRainbow();
  59.     // 更新旋转角度
  60.     rotationAngle += ROTATION_SPEED;
  61.     // 确保旋转角度在 0 - 360 度范围内
  62.     if (rotationAngle >= 360) {
  63.         rotationAngle -= 360;
  64.     }
  65.     // 延迟 500 毫秒,控制旋转速度
  66.     delay(500);
  67. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:25:46

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

代码解读
1. 头文件包含
• #include "SPI.h":引入 SPI 库,该库用于实现与 TFT 屏幕的串行通信。
• #include "Adafruit_GFX.h":引入 Adafruit GFX 图形库,提供了一系列基本的图形绘制函数,如绘制点、线、矩形、圆形等。
• #include "Adafruit_GC9A01A.h":引入 GC9A01A 屏幕驱动库,用于控制特定型号的 TFT 屏幕。
2. 引脚定义和屏幕对象创建
• #define TFT_CS 4、#define TFT_DC 2、#define TFT_RST -1:定义了 TFT 屏幕的片选引脚、数据 / 命令选择引脚和复位引脚。
• Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);:创建了一个 Adafruit_GC9A01A 类的对象 tft,用于操作 TFT 屏幕。
3. 常量和变量定义
• SCREEN_WIDTH 和 SCREEN_HEIGHT:定义了屏幕的宽度和高度。
• CENTER_X 和 CENTER_Y:计算出屏幕的中心点坐标。
• RADIUS:定义了彩虹背景的半径。
• ROTATION_SPEED:定义了彩虹的旋转速度。
• RAINBOW_SEGMENT_ANGLE:定义了彩虹每段的角度。
• rotationAngle:记录当前彩虹的旋转角度。
• rainbowColors:定义了一个包含七种颜色的数组,用于表示彩虹的七种颜色。
4. drawRainbow 函数
该函数用于绘制彩虹,通过循环绘制七个三角形来组成彩虹。每个三角形的顶点分别为屏幕中心点、半径为 RADIUS 且角度为 angleStart 的点和角度为 angleEnd 的点。
5. setup 函数
在程序开始时执行一次,主要完成串口通信初始化、TFT 屏幕初始化、设置屏幕旋转方向和用黑色填充屏幕的操作。
6. loop 函数
程序会不断循环执行该函数,实现彩虹的旋转效果。具体步骤如下:
• 用黑色填充屏幕,清除上一帧的内容。
• 调用 drawRainbow 函数绘制彩虹。
• 更新旋转角度,并确保旋转角度在 0 - 360 度范围内。
• 延迟 500 毫秒,控制旋转速度。
通过这种方式,代码实现了一个在 TFT 屏幕上旋转的彩虹效果。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:27:07

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

实验场景图  动态图

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图2

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 07:29:33

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球

【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail