驴友花雕 发表于 7 天前

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


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例

代码说明

1、五彩渐变效果:

使用颜色数组 colors[],包括红、绿、蓝、黄、品红、青色和白色,圆环按顺序变化颜色。

每一帧圆环会动态增长,同时交替不同的颜色。

2、动态扩展圆环:

半径 radius 随动画帧数动态变化,实现不断扩展的环形动画。

圆环从中心点依次展开,超出屏幕范围时重置,形成循环效果。

3、高效刷新机制:

使用 fillScreen() 快速清除上一帧内容,保证动画的流畅显示。

控制帧速率的延迟时间 DELAY_MS 提供平滑视觉效果。

4、环形层叠设计:

每一帧绘制多层圆环,内外交错,增强立体层次感和动感。

5、效果描述

屏幕中央绘制五彩的动态扩展圆环,每一层圆环具有不同的颜色。

圆环逐渐从小到大扩展,超出屏幕范围后重新从中心开始。

整个动画五彩斑斓,变化流畅,适合展示动态效果和吸引注意力。


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例

实验场景图动态图




驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏27个特色案例


驴友花雕 发表于 7 天前

【花雕学编程】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); // 每帧延迟,用于控制刷新速度
}

驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例

代码说明

1、随机形状类型:

random(0, 3) 决定生成三角形、圆形或正方形,形状多样化,增强视觉层次感。

2、随机颜色和大小:

colors[] 提供丰富的颜色选择,每个图形随机应用不同的颜色。

图形尺寸通过 random(20, 60) 生成,保证大小的随机变化。

3、动态叠加效果:

每次生成新图形时直接叠加到屏幕上,不清除之前的内容,形成炫目的图形堆叠动画。

4、适配圆形屏幕:

屏幕分辨率为 240x240,所有图形的生成位置和大小随机且适配屏幕区域。

5、效果描述

屏幕上会不断生成多彩的随机图形,包括三角形、圆形和正方形。

图形大小、颜色和位置随机变化,形成丰富多彩的动态叠加效果。

动画流畅且色彩鲜艳,视觉效果非常吸引人。



驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例

实验串口返回情况


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例

实验场景图动态图





驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏28个特色案例


驴友花雕 发表于 7 天前

【花雕学编程】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); // 延迟一段时间,控制动画节奏
}

驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏29个特色案例

代码说明

1、随机圆环效果:

每次迭代生成随机位置、大小和颜色的圆环。

外圆和内圆结合形成动态圆环效果。

2、丰富的颜色选择:

使用 colors[] 数组提供多种颜色,随机分配给每个圆环。

3、适配屏幕范围:

通过 random() 函数限定圆环中心点和半径,确保图形始终在屏幕范围内。

4、流畅动画:

使用 delay(200) 控制动画节奏,每秒约生成 5 个圆环。

5、效果描述

屏幕上不断生成随机颜色的圆环,每个圆环具有不同的半径和位置。

圆环以动态方式叠加在屏幕上,形成绚丽的视觉效果。

黑色背景进一步突出了五彩斑斓的动画。

驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏29个特色案例

实验场景图动态图




驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例




驴友花雕 发表于 7 天前

【花雕学编程】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);                // 帧间延迟
}


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例

代码说明

1、多束彩色旋转光束:

使用 drawBeam() 绘制多个光束,每束光束由三角形模拟,颜色和角度动态变化。

光束颜色从 colors[] 中循环选择,形成多彩效果。

2、旋转动画:

每帧更新光束的角度,模拟光束围绕屏幕中心快速旋转的效果。

3、光束特效:

光束宽度和长度可调,通过 BEAM_WIDTH 和 RADIUS 参数自定义光束的形状和范围。

4、平滑刷新:

通过清屏和动态绘制每帧,确保动画运行流畅无卡顿。

5、效果描述

屏幕中央以五彩斑斓的光束旋转,光束在运动中交替闪烁和变化颜色。

动画流畅自然,光束色彩鲜艳明亮,极具视觉冲击力。

无论是旋转的动态感还是丰富的色彩,都堪称“亮瞎眼”级别。


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例

实验场景图动态图




驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏30个特色案例

实验场景图动态图


驴友花雕 发表于 7 天前

【花雕学编程】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);                     // 控制动画帧速率
}


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏31个特色案例

代码说明

1、多彩波纹扩展:

每帧生成多层波纹,以屏幕中心为起点向外扩展。

波纹的颜色从 colors[] 数组中循环选择,形成渐变效果。

2、层次感增强:

波纹之间具有固定的半径间隔,通过 currentRadius = radius - i * 20 实现。

波纹扩展超出屏幕范围后重置为新的波纹动画。

3、动态刷新:

使用 fillScreen() 清除上一帧内容,确保动画流畅。

控制帧速率的延迟通过 delay(50),实现平滑的扩展效果。

4、颜色循环:

波纹颜色通过颜色索引动态更新,确保视觉效果不单一。

5、效果描述

屏幕中心生成动态扩展的多彩波纹,波纹从小到大扩展至屏幕边缘。

波纹具有层次感,每层波纹的颜色渐变变化,增强视觉冲击力。

动画流畅自然,色彩鲜艳,适合演示动态特效。


驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏31个特色案例

实验场景图动态图




驴友花雕 发表于 7 天前

【花雕学编程】Arduino动手做(249)--GC9A01屏31个特色案例

实验场景图动态图


页: 1 2 3 4 5 6 [7] 8 9
查看完整版本: 【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例