【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之七十二:GC9A01园屏之围绕中心旋转的动态缩放彩虹球
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之七十二: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 "SPI.h" // **包含 SPI 库,用于 TFT 屏幕通信**
// SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的通信总线,
// 这里包含该库是为了实现与 TFT 屏幕进行数据传输等通信操作。
#include "Adafruit_GFX.h" // **包含 Adafruit GFX 图形库,用于绘制图形**
// Adafruit_GFX 库提供了一系列基础的图形绘制函数,如绘制点、线、圆、三角形等,
// 方便在屏幕上进行图形显示的操作。
#include "Adafruit_GC9A01A.h" // **包含 GC9A01A 屏幕驱动库**
// 该库是专门针对 GC9A01A 型号的 TFT 屏幕的驱动库,
// 包含了初始化屏幕、设置屏幕参数以及控制屏幕显示等相关函数。
#define TFT_CS 4 // **定义 TFT 屏幕片选引脚**
// 片选引脚(Chip Select,CS)用于在多个设备连接到同一总线上时,
// 选择要进行通信的特定设备,这里设置为引脚 4。
#define TFT_DC 2 // **定义 TFT 屏幕数据/命令选择引脚**
// 数据/命令选择引脚(Data/Command,DC)用于区分传输的数据是命令还是实际显示的数据,
// 这里设置为引脚 2。
#define TFT_RST -1 // **屏幕复位引脚(-1 表示未使用)**
// 复位引脚(Reset,RST)用于对屏幕进行复位操作,使其恢复到初始状态,
// 这里设置为 -1 表示不使用该引脚进行复位。
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST); // **创建 TFT 屏幕对象**
// 使用前面定义的引脚参数创建一个 Adafruit_GC9A01A 类型的对象 tft,
// 通过这个对象可以调用相关函数来操作 GC9A01A 屏幕。
#define SCREEN_WIDTH 240
// 定义屏幕的宽度为 240 像素。
#define SCREEN_HEIGHT 240
// 定义屏幕的高度为 240 像素。
#define CENTER_X SCREEN_WIDTH / 2
// 计算屏幕的水平中心位置,即宽度的一半。
#define CENTER_Y SCREEN_HEIGHT / 2
// 计算屏幕的垂直中心位置,即高度的一半。
#define BASE_RADIUS 40 // **基础半径**
// 定义图形绘制中使用的基础半径值,后续会根据缩放因子进行调整。
#define ROTATION_SPEED 10.05// **旋转速度**
// 定义图形旋转的速度,每次循环中旋转角度的增加量。
#define SCALE_SPEED 10.02// **缩放速度**
// 定义图形缩放的速度,每次循环中缩放因子的变化量。
float rotationAngle = 0;
// 初始化旋转角度为 0,用于控制图形的旋转。
float scaleFactor = 1.0;
// 初始化缩放因子为 1.0,表示图形初始大小为原始大小。
bool growing = true;// **控制放大或缩小状态**
// 定义一个布尔变量 growing,用于控制图形是处于放大还是缩小的状态,
// 初始状态为 true,表示处于放大状态。
uint16_t rainbowColors[] = {
tft.color565(255, 0, 0), // 红色
tft.color565(255, 165, 0), // 橙色
tft.color565(255, 255, 0), // 黄色
tft.color565(0, 255, 0), // 绿色
tft.color565(0, 0, 255), // 蓝色
tft.color565(75, 0, 130),// 靛蓝
tft.color565(148, 0, 211)// 紫色
};
// 定义一个数组 rainbowColors,存储了彩虹颜色的 16 位 RGB 格式值,
// 使用 tft.color565 函数将 24 位 RGB 颜色值转换为 16 位 RGB 格式,用于图形填充颜色。
void setup() {
Serial.begin(115200);
// 初始化串口通信,波特率设置为 115200,用于调试时输出信息。
tft.begin();
// 初始化 GC9A01A 屏幕,设置屏幕的基本参数和状态。
tft.setRotation(1);
// 设置屏幕的旋转角度,这里设置为 1,表示顺时针旋转 90 度。
}
void loop() {
tft.fillScreen(tft.color565(0, 0, 0));
// 用黑色(RGB 值为 0, 0, 0)填充整个屏幕,清除之前的显示内容。
float currentRadius = BASE_RADIUS * scaleFactor;// **根据缩放系数调整半径**
// 根据当前的缩放因子计算出当前图形绘制的半径。
for (int i = 0; i < 7; i++) {
// 循环 7 次,用于绘制 7 个不同颜色的三角形,形成类似彩虹的效果。
float angleStart = (i * 51.43 + rotationAngle) * M_PI / 180;
// 计算每个三角形起始边的角度,通过当前循环索引 i、旋转角度 rotationAngle 以及弧度转换公式计算得到。
float angleEnd = ((i + 1) * 51.43 + rotationAngle) * M_PI / 180;
// 计算每个三角形结束边的角度。
tft.fillTriangle(CENTER_X, CENTER_Y,
CENTER_X + currentRadius * cos(angleStart), CENTER_Y + currentRadius * sin(angleStart),
CENTER_X + currentRadius * cos(angleEnd), CENTER_Y + currentRadius * sin(angleEnd),
rainbowColors);
// 在屏幕中心绘制一个填充三角形,根据当前计算的半径、角度以及对应的颜色值,
// 使用 fillTriangle 函数绘制三角形。
}
rotationAngle += ROTATION_SPEED;// **旋转更新**
// 增加旋转角度,使下一次绘制的三角形位置发生旋转变化。
if (growing) {// **动态缩放**
scaleFactor += SCALE_SPEED;
// 如果处于放大状态,增加缩放因子,使图形变大。
if (scaleFactor >= 1.3) growing = false;// **达到最大值后开始缩小**
// 当缩放因子达到或超过 1.3 时,将 growing 设置为 false,进入缩小状态。
} else {
scaleFactor -= SCALE_SPEED;
// 如果处于缩小状态,减小缩放因子,使图形变小。
if (scaleFactor <= 0.7) growing = true;// **达到最小值后开始放大**
// 当缩放因子达到或低于 0.7 时,将 growing 设置为 true,进入放大状态。
}
delay(500);
// 延迟 500 毫秒,控制图形变化的速度,使效果更明显。
}
【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
这段代码是用于驱动 GC9A01A TFT 屏幕,呈现动态的彩色图形效果,下面是简要解读:1、库与引脚定义
• 引入SPI、Adafruit_GFX和Adafruit_GC9A01A库,为屏幕通信和图形绘制提供支持。
• 定义了 TFT 屏幕的片选、数据 / 命令选择和复位引脚,创建了屏幕对象。
2、常量与变量设置
• 设定屏幕的宽高、中心位置、基础半径、旋转和缩放速度等常量。
• 定义旋转角度、缩放因子和控制缩放状态的布尔变量。
• 存储了彩虹的 7 种颜色值。
3、初始化部分(setup函数)
• 初始化串口通信,用于调试信息输出。
• 初始化屏幕并设置旋转角度。
4、循环部分(loop函数)
• 每次循环先将屏幕填充为黑色,清除之前的显示。
• 依据缩放因子调整图形半径。
• 循环绘制 7 个彩色三角形,形成类似彩虹的图案。
• 不断更新旋转角度,实现图形旋转。
• 动态调整缩放因子,使图形在放大和缩小状态间切换。
• 每次循环结束后延迟 500 毫秒,控制图形变化的速度。
【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01旋转缩放彩虹球
实验场景图动态图
页:
[1]