【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之二十七:五彩动态圆环动画
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口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"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
// 定义屏幕引脚
#define TFT_CS 4 // 片选引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST -1 // 重置引脚(若未连接请设置为 -1)
// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
// 定义颜色数组
uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_MAGENTA, GC9A01A_CYAN, GC9A01A_WHITE};
int numColors = sizeof(colors) / sizeof(colors);
// 屏幕中心和圆环范围
#define SCREEN_CENTER_X 120
#define SCREEN_CENTER_Y 120
#define MAX_RADIUS 120 // 最大圆环半径
#define DELAY_MS 50 // 每帧延迟
void setup() {
Serial.begin(115200); // 初始化串口通信
Serial.println("Colorful Dynamic Animation");
tft.begin(); // 初始化屏幕
tft.setRotation(0); // 设置屏幕方向
tft.fillScreen(GC9A01A_BLACK); // 清屏设置为黑色
}
void loop() {
static int frame = 0;// 动画帧数
// 绘制多层动态圆环
for (int i = 0; i < 10; i++) { // 控制多层圆环
int radius = (frame + i * 12) % MAX_RADIUS; // 动态半径变化
uint16_t color = colors[(frame / 12 + i) % numColors]; // 循环获取颜色
tft.drawCircle(SCREEN_CENTER_X, SCREEN_CENTER_Y, radius, color);
}
// 帧延迟
delay(DELAY_MS);
// 清除上一帧
tft.fillScreen(GC9A01A_BLACK);
// 更新帧数
frame++;
}
【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例
代码说明1、五彩渐变效果:
使用颜色数组 colors[],包括红、绿、蓝、黄、品红、青色和白色,圆环按顺序变化颜色。
每一帧圆环会动态增长,同时交替不同的颜色。
2、动态扩展圆环:
半径 radius 随动画帧数动态变化,实现不断扩展的环形动画。
圆环从中心点依次展开,超出屏幕范围时重置,形成循环效果。
3、高效刷新机制:
使用 fillScreen() 快速清除上一帧内容,保证动画的流畅显示。
控制帧速率的延迟时间 DELAY_MS 提供平滑视觉效果。
4、环形层叠设计:
每一帧绘制多层圆环,内外交错,增强立体层次感和动感。
5、效果描述
屏幕中央绘制五彩的动态扩展圆环,每一层圆环具有不同的颜色。
圆环逐渐从小到大扩展,超出屏幕范围后重新从中心开始。
整个动画五彩斑斓,变化流畅,适合展示动态效果和吸引注意力。
【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例
【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之二十八:多彩随机图形叠加
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口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"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
// 定义屏幕引脚
#define TFT_CS 4 // 片选引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST -1 // 重置引脚(若未连接请设置为 -1)
// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
// 定义颜色数组
uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_MAGENTA, GC9A01A_CYAN, GC9A01A_WHITE};
int numColors = sizeof(colors) / sizeof(colors);
void setup() {
Serial.begin(115200); // 初始化串口
Serial.println("Dynamic Colorful Shapes Animation");
tft.begin(); // 初始化屏幕
tft.setRotation(0); // 设置屏幕方向
tft.fillScreen(GC9A01A_BLACK); // 清屏设置为黑色
}
void loop() {
// 随机选择形状类型
int shapeType = random(0, 3); // 0: 三角形, 1: 圆形, 2: 正方形
// 随机生成尺寸、位置和颜色
int x = random(0, 240);
int y = random(0, 240);
int size = random(20, 60); // 随机大小
uint16_t color = colors;
if (shapeType == 0) {
// 绘制随机三角形
int x2 = x + size;
int y2 = y;
int x3 = x + size / 2;
int y3 = y + size;
tft.fillTriangle(x, y, x2, y2, x3, y3, color);
} else if (shapeType == 1) {
// 绘制随机圆形
tft.fillCircle(x, y, size / 2, color);
} else if (shapeType == 2) {
// 绘制随机正方形
tft.fillRect(x, y, size, size, color);
}
delay(100); // 每帧延迟,用于控制刷新速度
}
【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例
代码说明1、随机形状类型:
random(0, 3) 决定生成三角形、圆形或正方形,形状多样化,增强视觉层次感。
2、随机颜色和大小:
colors[] 提供丰富的颜色选择,每个图形随机应用不同的颜色。
图形尺寸通过 random(20, 60) 生成,保证大小的随机变化。
3、动态叠加效果:
每次生成新图形时直接叠加到屏幕上,不清除之前的内容,形成炫目的图形堆叠动画。
4、适配圆形屏幕:
屏幕分辨率为 240x240,所有图形的生成位置和大小随机且适配屏幕区域。
5、效果描述
屏幕上会不断生成多彩的随机图形,包括三角形、圆形和正方形。
图形大小、颜色和位置随机变化,形成丰富多彩的动态叠加效果。
动画流畅且色彩鲜艳,视觉效果非常吸引人。
【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例
实验串口返回情况【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例
【花雕学编程】Arduino动手做(249)--GC9A01屏29个特色案例
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之二十九:彩色随机圆环动画
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口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"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
// 定义屏幕引脚
#define TFT_CS 4 // 片选引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST -1 // 重置引脚(未使用时设置为 -1)
// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
// 定义颜色数组
uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_MAGENTA, GC9A01A_CYAN, GC9A01A_WHITE};
int numColors = sizeof(colors) / sizeof(colors);
void setup() {
Serial.begin(115200); // 初始化串口通信
Serial.println("Dynamic Colorful Circles Animation");
tft.begin(); // 初始化屏幕
tft.setRotation(0); // 设置屏幕方向
tft.fillScreen(GC9A01A_BLACK); // 清屏设置为黑色背景
}
void loop() {
// 随机生成圆环的参数
int x = random(20, 220); // 圆心X坐标(适配屏幕大小,避免超出边界)
int y = random(20, 220); // 圆心Y坐标
int outerRadius = random(10, 100); // 随机外圆半径
int innerRadius = random(outerRadius / 2, outerRadius - 1); // 随机内圆半径
uint16_t color = colors; // 随机颜色
// 绘制外圆(填充颜色)
tft.fillCircle(x, y, outerRadius, color);
// 绘制内圆(清除为背景色,形成圆环效果)
tft.fillCircle(x, y, innerRadius, GC9A01A_BLACK);
delay(200); // 延迟一段时间,控制动画节奏
}
【花雕学编程】Arduino动手做(249)--GC9A01屏29个特色案例
代码说明1、随机圆环效果:
每次迭代生成随机位置、大小和颜色的圆环。
外圆和内圆结合形成动态圆环效果。
2、丰富的颜色选择:
使用 colors[] 数组提供多种颜色,随机分配给每个圆环。
3、适配屏幕范围:
通过 random() 函数限定圆环中心点和半径,确保图形始终在屏幕范围内。
4、流畅动画:
使用 delay(200) 控制动画节奏,每秒约生成 5 个圆环。
5、效果描述
屏幕上不断生成随机颜色的圆环,每个圆环具有不同的半径和位置。
圆环以动态方式叠加在屏幕上,形成绚丽的视觉效果。
黑色背景进一步突出了五彩斑斓的动画。
【花雕学编程】Arduino动手做(249)--GC9A01屏29个特色案例
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例
【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之三十:炫彩旋转光束特效动画
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口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"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
// 定义屏幕引脚
#define TFT_CS 4 // 片选引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST -1 // 重置引脚(若未连接请设置为 -1)
// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
// 定义颜色数组
uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_MAGENTA, GC9A01A_CYAN, GC9A01A_WHITE};
int numColors = sizeof(colors) / sizeof(colors);
// 动画参数
#define SCREEN_CENTER_X 120
#define SCREEN_CENTER_Y 120
#define RADIUS 100 // 光束的最大长度
#define BEAM_WIDTH 20 // 光束宽度
#define NUM_BEAMS 12 // 光束数量
#define ROTATION_SPEED 10 // 旋转角度步进
#define DELAY_MS 30 // 每帧延迟(毫秒)
void drawBeam(float angle, uint16_t color) {
// 计算光束的起点和终点
float radian = angle * 3.14159 / 180;
int x1 = SCREEN_CENTER_X + RADIUS * cos(radian);
int y1 = SCREEN_CENTER_Y + RADIUS * sin(radian);
int x2 = SCREEN_CENTER_X + (RADIUS - BEAM_WIDTH) * cos(radian + 3.14159 / 36);
int y2 = SCREEN_CENTER_Y + (RADIUS - BEAM_WIDTH) * sin(radian + 3.14159 / 36);
int x3 = SCREEN_CENTER_X + (RADIUS - BEAM_WIDTH) * cos(radian - 3.14159 / 36);
int y3 = SCREEN_CENTER_Y + (RADIUS - BEAM_WIDTH) * sin(radian - 3.14159 / 36);
// 绘制光束(三角形表示)
tft.fillTriangle(x1, y1, x2, y2, x3, y3, color);
}
void setup() {
Serial.begin(115200); // 初始化串口
Serial.println("Blinding Rotating Beam Animation");
tft.begin(); // 初始化屏幕
tft.setRotation(0); // 设置屏幕方向
tft.fillScreen(GC9A01A_BLACK);// 清屏设置为黑色
}
void loop() {
static int angle = 0; // 旋转角度初始化
// 绘制每一帧的光束特效
tft.fillScreen(GC9A01A_BLACK);// 清屏,准备绘制新帧
for (int i = 0; i < NUM_BEAMS; i++) {
// 每束光束不同颜色,不同角度
uint16_t color = colors[(angle / 10 + i) % numColors];
drawBeam(angle + i * 360 / NUM_BEAMS, color);
}
// 更新角度,形成旋转效果
angle += ROTATION_SPEED;
if (angle >= 360) {
angle = 0; // 重置角度
}
delay(DELAY_MS); // 帧间延迟
}
【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例
代码说明1、多束彩色旋转光束:
使用 drawBeam() 绘制多个光束,每束光束由三角形模拟,颜色和角度动态变化。
光束颜色从 colors[] 中循环选择,形成多彩效果。
2、旋转动画:
每帧更新光束的角度,模拟光束围绕屏幕中心快速旋转的效果。
3、光束特效:
光束宽度和长度可调,通过 BEAM_WIDTH 和 RADIUS 参数自定义光束的形状和范围。
4、平滑刷新:
通过清屏和动态绘制每帧,确保动画运行流畅无卡顿。
5、效果描述
屏幕中央以五彩斑斓的光束旋转,光束在运动中交替闪烁和变化颜色。
动画流畅自然,光束色彩鲜艳明亮,极具视觉冲击力。
无论是旋转的动态感还是丰富的色彩,都堪称“亮瞎眼”级别。
【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01屏31个特色案例
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之三十一:动态多彩波纹
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口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"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"
// 定义屏幕引脚
#define TFT_CS 4 // 片选引脚
#define TFT_DC 2 // 数据/命令引脚
#define TFT_RST -1 // 重置引脚(未使用时设置为 -1)
// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
// 定义颜色数组
uint16_t colors[] = {GC9A01A_RED, GC9A01A_ORANGE, GC9A01A_YELLOW, GC9A01A_GREEN, GC9A01A_CYAN, GC9A01A_BLUE, GC9A01A_MAGENTA};
int numColors = sizeof(colors) / sizeof(colors);
void setup() {
Serial.begin(115200); // 初始化串口通信
Serial.println("Dynamic Ripple Animation");
tft.begin(); // 初始化屏幕
tft.setRotation(0); // 设置屏幕方向
tft.fillScreen(GC9A01A_BLACK); // 清屏设置为黑色背景
}
void loop() {
static int radius = 0; // 当前波纹半径
static int colorIndex = 0; // 当前颜色索引
// 清屏并绘制新的波纹
tft.fillScreen(GC9A01A_BLACK);// 清屏
for (int i = 0; i < 5; i++) { // 绘制多层波纹
int currentRadius = radius - i * 20; // 每层波纹间隔
if (currentRadius > 0) {
uint16_t color = colors[(colorIndex + i) % numColors]; // 循环颜色选择
tft.drawCircle(120, 120, currentRadius, color); // 绘制波纹圆环
}
}
// 更新半径和颜色索引
radius += 5; // 波纹扩展速度
if (radius > 120) { // 重置波纹
radius = 0;
colorIndex++;
if (colorIndex >= numColors) {
colorIndex = 0; // 颜色循环
}
}
delay(50); // 控制动画帧速率
}
【花雕学编程】Arduino动手做(249)--GC9A01屏31个特色案例
代码说明1、多彩波纹扩展:
每帧生成多层波纹,以屏幕中心为起点向外扩展。
波纹的颜色从 colors[] 数组中循环选择,形成渐变效果。
2、层次感增强:
波纹之间具有固定的半径间隔,通过 currentRadius = radius - i * 20 实现。
波纹扩展超出屏幕范围后重置为新的波纹动画。
3、动态刷新:
使用 fillScreen() 清除上一帧内容,确保动画流畅。
控制帧速率的延迟通过 delay(50),实现平滑的扩展效果。
4、颜色循环:
波纹颜色通过颜色索引动态更新,确保视觉效果不单一。
5、效果描述
屏幕中心生成动态扩展的多彩波纹,波纹从小到大扩展至屏幕边缘。
波纹具有层次感,每层波纹的颜色渐变变化,增强视觉冲击力。
动画流畅自然,色彩鲜艳,适合演示动态特效。