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

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

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

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

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:34:37

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:36:45

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:40:10

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

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

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目之七十二:GC9A01园屏之围绕中心旋转的动态缩放彩虹球
  5. */
  6. //       GC9A01---------- ESP32
  7. //       RST ------------ NC(复位引脚,此处未连接)
  8. //       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
  9. //       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
  10. //       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
  11. //       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
  12. //       GND ------------ GND(接地引脚,连接到ESP32的接地端)
  13. //       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
  14. #include "SPI.h"                      // **包含 SPI 库,用于 TFT 屏幕通信**
  15. // SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的通信总线,
  16. // 这里包含该库是为了实现与 TFT 屏幕进行数据传输等通信操作。
  17. #include "Adafruit_GFX.h"             // **包含 Adafruit GFX 图形库,用于绘制图形**
  18. // Adafruit_GFX 库提供了一系列基础的图形绘制函数,如绘制点、线、圆、三角形等,
  19. // 方便在屏幕上进行图形显示的操作。
  20. #include "Adafruit_GC9A01A.h"         // **包含 GC9A01A 屏幕驱动库**
  21. // 该库是专门针对 GC9A01A 型号的 TFT 屏幕的驱动库,
  22. // 包含了初始化屏幕、设置屏幕参数以及控制屏幕显示等相关函数。
  23. #define TFT_CS 4                      // **定义 TFT 屏幕片选引脚**
  24. // 片选引脚(Chip Select,CS)用于在多个设备连接到同一总线上时,
  25. // 选择要进行通信的特定设备,这里设置为引脚 4。
  26. #define TFT_DC 2                      // **定义 TFT 屏幕数据/命令选择引脚**
  27. // 数据/命令选择引脚(Data/Command,DC)用于区分传输的数据是命令还是实际显示的数据,
  28. // 这里设置为引脚 2。
  29. #define TFT_RST -1                    // **屏幕复位引脚(-1 表示未使用)**
  30. // 复位引脚(Reset,RST)用于对屏幕进行复位操作,使其恢复到初始状态,
  31. // 这里设置为 -1 表示不使用该引脚进行复位。
  32. Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST); // **创建 TFT 屏幕对象**
  33. // 使用前面定义的引脚参数创建一个 Adafruit_GC9A01A 类型的对象 tft,
  34. // 通过这个对象可以调用相关函数来操作 GC9A01A 屏幕。
  35. #define SCREEN_WIDTH 240
  36. // 定义屏幕的宽度为 240 像素。
  37. #define SCREEN_HEIGHT 240
  38. // 定义屏幕的高度为 240 像素。
  39. #define CENTER_X SCREEN_WIDTH / 2
  40. // 计算屏幕的水平中心位置,即宽度的一半。
  41. #define CENTER_Y SCREEN_HEIGHT / 2
  42. // 计算屏幕的垂直中心位置,即高度的一半。
  43. #define BASE_RADIUS 40   // **基础半径**
  44. // 定义图形绘制中使用的基础半径值,后续会根据缩放因子进行调整。
  45. #define ROTATION_SPEED 10.05  // **旋转速度**
  46. // 定义图形旋转的速度,每次循环中旋转角度的增加量。
  47. #define SCALE_SPEED 10.02  // **缩放速度**
  48. // 定义图形缩放的速度,每次循环中缩放因子的变化量。
  49. float rotationAngle = 0;
  50. // 初始化旋转角度为 0,用于控制图形的旋转。
  51. float scaleFactor = 1.0;
  52. // 初始化缩放因子为 1.0,表示图形初始大小为原始大小。
  53. bool growing = true;  // **控制放大或缩小状态**
  54. // 定义一个布尔变量 growing,用于控制图形是处于放大还是缩小的状态,
  55. // 初始状态为 true,表示处于放大状态。
  56. uint16_t rainbowColors[] = {
  57.     tft.color565(255, 0, 0),   // 红色
  58.     tft.color565(255, 165, 0), // 橙色
  59.     tft.color565(255, 255, 0), // 黄色
  60.     tft.color565(0, 255, 0),   // 绿色
  61.     tft.color565(0, 0, 255),   // 蓝色
  62.     tft.color565(75, 0, 130),  // 靛蓝
  63.     tft.color565(148, 0, 211)  // 紫色
  64. };
  65. // 定义一个数组 rainbowColors,存储了彩虹颜色的 16 位 RGB 格式值,
  66. // 使用 tft.color565 函数将 24 位 RGB 颜色值转换为 16 位 RGB 格式,用于图形填充颜色。
  67. void setup() {
  68.     Serial.begin(115200);
  69.     // 初始化串口通信,波特率设置为 115200,用于调试时输出信息。
  70.     tft.begin();
  71.     // 初始化 GC9A01A 屏幕,设置屏幕的基本参数和状态。
  72.     tft.setRotation(1);
  73.     // 设置屏幕的旋转角度,这里设置为 1,表示顺时针旋转 90 度。
  74. }
  75. void loop() {
  76.     tft.fillScreen(tft.color565(0, 0, 0));
  77.     // 用黑色(RGB 值为 0, 0, 0)填充整个屏幕,清除之前的显示内容。
  78.     float currentRadius = BASE_RADIUS * scaleFactor;  // **根据缩放系数调整半径**
  79.     // 根据当前的缩放因子计算出当前图形绘制的半径。
  80.     for (int i = 0; i < 7; i++) {
  81.         // 循环 7 次,用于绘制 7 个不同颜色的三角形,形成类似彩虹的效果。
  82.         float angleStart = (i * 51.43 + rotationAngle) * M_PI / 180;
  83.         // 计算每个三角形起始边的角度,通过当前循环索引 i、旋转角度 rotationAngle 以及弧度转换公式计算得到。
  84.         float angleEnd = ((i + 1) * 51.43 + rotationAngle) * M_PI / 180;
  85.         // 计算每个三角形结束边的角度。
  86.         tft.fillTriangle(CENTER_X, CENTER_Y,
  87.                          CENTER_X + currentRadius * cos(angleStart), CENTER_Y + currentRadius * sin(angleStart),
  88.                          CENTER_X + currentRadius * cos(angleEnd), CENTER_Y + currentRadius * sin(angleEnd),
  89.                          rainbowColors[i]);
  90.         // 在屏幕中心绘制一个填充三角形,根据当前计算的半径、角度以及对应的颜色值,
  91.         // 使用 fillTriangle 函数绘制三角形。
  92.     }
  93.     rotationAngle += ROTATION_SPEED;  // **旋转更新**
  94.     // 增加旋转角度,使下一次绘制的三角形位置发生旋转变化。
  95.     if (growing) {  // **动态缩放**
  96.         scaleFactor += SCALE_SPEED;
  97.         // 如果处于放大状态,增加缩放因子,使图形变大。
  98.         if (scaleFactor >= 1.3) growing = false;  // **达到最大值后开始缩小**
  99.         // 当缩放因子达到或超过 1.3 时,将 growing 设置为 false,进入缩小状态。
  100.     } else {
  101.         scaleFactor -= SCALE_SPEED;
  102.         // 如果处于缩小状态,减小缩放因子,使图形变小。
  103.         if (scaleFactor <= 0.7) growing = true;  // **达到最小值后开始放大**
  104.         // 当缩放因子达到或低于 0.7 时,将 growing 设置为 true,进入放大状态。
  105.     }
  106.     delay(500);
  107.     // 延迟 500 毫秒,控制图形变化的速度,使效果更明显。
  108. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:41:36

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

这段代码是用于驱动 GC9A01A TFT 屏幕,呈现动态的彩色图形效果,下面是简要解读:
1、库与引脚定义
• 引入SPI、Adafruit_GFX和Adafruit_GC9A01A库,为屏幕通信和图形绘制提供支持。
• 定义了 TFT 屏幕的片选、数据 / 命令选择和复位引脚,创建了屏幕对象。
2、常量与变量设置
• 设定屏幕的宽高、中心位置、基础半径、旋转和缩放速度等常量。
• 定义旋转角度、缩放因子和控制缩放状态的布尔变量。
• 存储了彩虹的 7 种颜色值。
3、初始化部分(setup函数)
• 初始化串口通信,用于调试信息输出。
• 初始化屏幕并设置旋转角度。
4、循环部分(loop函数)
• 每次循环先将屏幕填充为黑色,清除之前的显示。
• 依据缩放因子调整图形半径。
• 循环绘制 7 个彩色三角形,形成类似彩虹的图案。
• 不断更新旋转角度,实现图形旋转。
• 动态调整缩放因子,使图形在放大和缩小状态间切换。
• 每次循环结束后延迟 500 毫秒,控制图形变化的速度。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:47:08

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

实验场景图  动态图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-12 08:49:31

【花雕学编程】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