588浏览
楼主: 驴友花雕

[项目] 【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之八:随机颜色和随机大小的多彩填充圆

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之八:随机颜色和随机大小的多彩填充圆
  5. */
  6. //       GC9A010 -------- 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库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. void setup() {
  21.     Serial.begin(9600);            // 初始化串口通信
  22.     Serial.println("Random Sized Filled Circle Animation!");
  23.     tft.begin();                   // 初始化显示屏
  24.     tft.setRotation(3);            // 设置显示屏方向
  25.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  26.     randomSeed(analogRead(0));     // 初始化随机数种子
  27. }
  28. void loop() {
  29.     int centerX = tft.width() / 2;  // 屏幕中心X坐标
  30.     int centerY = tft.height() / 2; // 屏幕中心Y坐标
  31.     // 定义颜色数组用于动态颜色切换
  32.     uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_CYAN, GC9A01A_MAGENTA, GC9A01A_WHITE};
  33.     int colorCount = sizeof(colors) / sizeof(colors[0]);
  34.     // 随机生成半径,范围为10到120
  35.     int randomRadius = random(10, 121);
  36.     // 随机选择颜色
  37.     uint16_t randomColor = colors[random(0, colorCount)];
  38.     // 清屏
  39.     tft.fillScreen(GC9A01A_BLACK);
  40.     // 绘制填充圆
  41.     tft.fillCircle(centerX, centerY, randomRadius, randomColor);
  42.     // 延时0.3秒
  43.     delay(300);
  44. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

代码说明

1、随机生成圆的大小:

使用random(10, 121)生成一个10到120之间的随机半径值。

每次循环绘制的圆形大小都会变化,带来动态视觉效果。

2、随机选择圆的颜色:

使用颜色数组colors定义多种颜色,并通过random(0, colorCount)随机选择颜色。

每个圆形的颜色都是随机的,使动画更加多彩。

3、填充圆形绘制:

使用tft.fillCircle绘制填充圆形,使画面更加鲜艳。

4、屏幕清屏:

每次循环用tft.fillScreen(GC9A01A_BLACK)清屏,确保只显示当前的圆形。

5、动画节奏控制:

延时delay(300)设置循环间隔为0.3秒,使随机圆形绘制的节奏舒适且流畅。

6、效果描述

圆形的半径和颜色每次循环都会随机变化。

屏幕上始终显示一个随机大小、随机颜色的填充圆。

动画动态且绚丽,给人一种充满活力的视觉体验。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

实验场景图  动态图

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之九:多行滚动显示字母“Hello world!”,每行字体颜色随机

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之九:多行滚动显示字母“Hello world!”,每行字体颜色随机
  5. */
  6. //       GC9A010 -------- 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库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. void setup() {
  21.     Serial.begin(9600);            // 初始化串口通信
  22.     Serial.println("Scrolling 'Hello world!' with Random Colors");
  23.     tft.begin();                   // 初始化显示屏
  24.     tft.setRotation(2);            // 设置显示屏方向
  25.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  26.     randomSeed(analogRead(0));     // 初始化随机数种子
  27. }
  28. void loop() {
  29.     int screenWidth = tft.width(); // 屏幕宽度
  30.     int screenHeight = tft.height(); // 屏幕高度
  31.     int textHeight = 20;           // 每行文字的高度(像素)
  32.     int totalLines = screenHeight / textHeight; // 计算屏幕可容纳的行数
  33.     int scrollY = screenHeight;    // 初始化文字起始滚动位置
  34.     // 定义颜色数组(可自定义更多颜色)
  35.     uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_CYAN, GC9A01A_MAGENTA, GC9A01A_WHITE};
  36.     int colorCount = sizeof(colors) / sizeof(colors[0]);
  37.     while (true) {
  38.         // 清屏
  39.         tft.fillScreen(GC9A01A_BLACK);
  40.         // 绘制多行滚动文字
  41.         for (int i = 0; i < totalLines; i++) {
  42.             int lineY = scrollY + (i * textHeight); // 计算每行的Y坐标
  43.             if (lineY >= 0 && lineY < screenHeight) {
  44.                 // 随机颜色选择
  45.                 uint16_t color = colors[random(0, colorCount)];
  46.                 // 设置文字属性
  47.                 tft.setTextColor(color);
  48.                 tft.setTextSize(3); // 字体大小1(可以根据需求调整)
  49.                 tft.setCursor(10, lineY); // 每行固定X位置
  50.                 tft.print("Hello world!");
  51.             }
  52.         }
  53.         // 更新滚动位置
  54.         scrollY -= textHeight / 4; // 滚动速度:每次减少1/4行高度
  55.         if (scrollY <= -textHeight) {
  56.             scrollY = 0; // 滚动结束时重置
  57.         }
  58.         delay(700); // 延时控制滚动速度
  59.     }
  60. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

代码说明

1、多行动态滚动:

滚动逻辑通过scrollY变量实现,动态调整每一行的Y坐标。

滚动位置重置后,形成循环效果。

2、随机字体颜色:

使用颜色数组colors定义多种颜色,每次绘制随机选择一种颜色。

每行显示的“Hello world!”都有独特的随机颜色。

3、动态文本排布:

通过计算totalLines动态确定屏幕能够容纳的最大行数。

每行文字的垂直间距由textHeight设置,确保文字不重叠。

4、动画节奏控制:

延时delay(100)控制滚动速度,调整行的滚动频率。

5、效果描述

屏幕上将从底部逐行滚动显示“Hello world!”。

每一行的文字颜色都随机变化,显示效果丰富多彩。

滚动循环往复,不断更新内容,带来持续的视觉吸引力。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

实验场景图  动态图

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目实验之十:随机位置显示5号红色字母“OK”刷屏0.3秒


实验开源代码


  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十:随机位置显示5号红色字母“OK”刷屏0.3秒
  5. */
  6. //       GC9A010 -------- 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库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. void setup() {
  21.     Serial.begin(9600);            // 初始化串口通信
  22.     Serial.println("Random 'OK' Display!");
  23.     tft.begin();                   // 初始化显示屏
  24.     tft.setRotation(2);            // 设置显示屏方向
  25.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  26.     randomSeed(analogRead(0));     // 初始化随机数种子
  27. }
  28. void loop() {
  29.     int screenWidth = tft.width();  // 屏幕宽度
  30.     int screenHeight = tft.height(); // 屏幕高度
  31.     // 随机生成位置
  32.     int randomX = random(0, screenWidth - 30);  // X坐标范围(避免“OK”超出边界)
  33.     int randomY = random(0, screenHeight - 60); // Y坐标范围(避免“OK”超出边界)
  34.     // 清屏
  35.     tft.fillScreen(GC9A01A_BLACK);
  36.     // 显示红色“OK”
  37.     tft.setTextColor(GC9A01A_RED);
  38.     tft.setTextSize(5);            // 设置字体大小为5
  39.     tft.setCursor(randomX, randomY);
  40.     tft.print("OK");
  41.     // 延时0.3秒
  42.     delay(300);
  43. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

代码说明

1、随机位置显示:

使用random()函数生成“OK”的随机X和Y坐标。

坐标范围限制为屏幕宽度和高度减去“OK”字符的像素尺寸,避免字符超出屏幕边界。

2、红色字体:

通过tft.setTextColor(GC9A01A_RED)设置字体颜色为红色。

3、字号设置:

使用tft.setTextSize(5)将字体大小设置为5号,确保“OK”字符足够醒目。

4、屏幕刷新:

每次显示之前调用tft.fillScreen(GC9A01A_BLACK)清屏,避免上次的字符残留。

延时delay(300)设置屏幕刷新间隔为0.3秒。

5、效果描述

屏幕会随机位置刷新显示红色大号的“OK”字符。

“OK”字符每0.3秒出现在不同的位置,动态且富有趣味。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

实验场景图  动态图

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之十一:《黑客帝国》风格:绿色字母“i”随机向下流动的幕布效果

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十一:《黑客帝国》风格:绿色字母“i”随机向下流动的幕布效果
  5. */
  6. //       GC9A010 -------- 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库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. #define CHAR_WIDTH 6               // 字符宽度(基于字体大小1号)
  21. #define CHAR_HEIGHT 8              // 字符高度(基于字体大小1号)
  22. #define DELAY_TIME 0.1             // 滚动延迟(毫秒) - 更快的滚动速度
  23. const int SCREEN_COLUMNS = 240 / CHAR_WIDTH;  // 屏幕可容纳的字符列数
  24. const int SCREEN_ROWS = 240 / CHAR_HEIGHT;    // 屏幕可容纳的字符行数
  25. int positions[SCREEN_COLUMNS];               // 每列字符的滚动位置
  26. void setup() {
  27.   Serial.begin(9600);            // 初始化串口通信
  28.   Serial.println("Faster Matrix-Style Flow!");
  29.   tft.begin();                   // 初始化显示屏
  30.   tft.setRotation(2);            // 设置显示屏方向
  31.   tft.fillScreen(GC9A01A_BLACK); // 清屏
  32.   randomSeed(analogRead(0));     // 初始化随机数种子
  33.   // 随机初始化每列的滚动位置
  34.   for (int i = 0; i < SCREEN_COLUMNS; i++) {
  35.     positions[i] = random(0, SCREEN_ROWS) * CHAR_HEIGHT;
  36.   }
  37. }
  38. void loop() {
  39.   // 清屏(可注释掉以保留残影效果)
  40.   tft.fillScreen(GC9A01A_BLACK);
  41.   // 绘制每列流动的绿色字母
  42.   for (int col = 0; col < SCREEN_COLUMNS; col++) {
  43.     // 绘制字符,按列循环滚动
  44.     int currentY = positions[col];
  45.     tft.setTextColor(GC9A01A_GREEN);      // 设置字体颜色为绿色
  46.     tft.setTextSize(2);                   // 字体大小为1号
  47.     tft.setCursor(col * CHAR_WIDTH, currentY);
  48.     tft.print("i");
  49.     // 更新滚动位置
  50.     positions[col] += CHAR_HEIGHT;
  51.     if (positions[col] >= 240) {          // 超出屏幕底部后返回顶部
  52.       positions[col] = 0;
  53.     }
  54.   }
  55.   delay(DELAY_TIME); // 延迟滚动速度
  56. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

代码说明

1、满屏多列字符滚动:

根据屏幕宽度和字符宽度计算最大列数(SCREEN_COLUMNS)。

每列的字符从随机位置向下滚动,形成满屏流动效果。

2、绿色字母“i”显示:

每列字符颜色设置为绿色,通过tft.setTextColor(GC9A01A_GREEN)实现。

使用tft.print("i")逐列打印字母。

3、滚动位置控制:

每列的字符位置通过数组positions动态更新。

字符从屏幕底部滚动到顶部,形成循环流动效果。

4、滚动速度调整:

使用DELAY_TIME变量设置滚动延迟为500毫秒,使流动效果更加缓慢。

5、视觉效果保留:

可注释掉tft.fillScreen(GC9A01A_BLACK)以形成字符残影,增加动态感。

6、效果描述

屏幕将显示多列绿色字母“i”,从顶部向下滚动,形成动态幕布。

每列的字符起始位置随机化,滚动速度较慢,符合《黑客帝国》的风格。

滚动效果持续循环,营造浓厚的科技氛围。
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

实验场景图  动态图

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

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

【花雕学编程】Arduino动手做(249)--GC9A01屏39个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之十二:ESP32 GC9A01之绿色字母漫天残影流星雨

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十二:ESP32 GC9A01之绿色字母漫天残影流星雨
  5. */
  6. //       GC9A010 -------- 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库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. #define CHAR_WIDTH 6               // 字符宽度(基于字体大小1号)
  21. #define CHAR_HEIGHT 8              // 字符高度(基于字体大小1号)
  22. #define DELAY_TIME 0.1             // 滚动延迟(毫秒)
  23. const int SCREEN_COLUMNS = 240 / CHAR_WIDTH;  // 屏幕可容纳的字符列数
  24. const int SCREEN_ROWS = 240 / CHAR_HEIGHT;    // 屏幕可容纳的字符行数
  25. int positions[SCREEN_COLUMNS];               // 每列字符的滚动位置
  26. uint16_t shadowColors[] = {0x07E0, 0x06E0, 0x05E0, 0x04E0, 0x03E0, 0x02E0, 0x01E0, 0x00E0, 0x0080, 0x0040}; // 更长的渐变绿色残影
  27. void setup() {
  28.     Serial.begin(9600);            // 初始化串口通信
  29.     Serial.println("Matrix-Style Flow with Extended Shadows!");
  30.     tft.begin();                   // 初始化显示屏
  31.     tft.setRotation(2);            // 设置显示屏方向
  32.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  33.     randomSeed(analogRead(0));     // 初始化随机数种子
  34.     // 随机初始化每列的滚动位置
  35.     for (int i = 0; i < SCREEN_COLUMNS; i++) {
  36.         positions[i] = random(0, SCREEN_ROWS) * CHAR_HEIGHT;
  37.     }
  38. }
  39. void loop() {
  40.     // 减弱之前的屏幕内容(延长的残影效果)
  41.     for (int i = 0; i < SCREEN_COLUMNS; i++) {
  42.         for (int j = 0; j < 10; j++) { // 残影层数增至10
  43.             int shadowY = positions[i] - (j * CHAR_HEIGHT);
  44.             if (shadowY >= 0 && shadowY < 240) { // 检查残影是否在屏幕范围内
  45.                 tft.setTextColor(shadowColors[j]); // 设置颜色逐渐变暗
  46.                 tft.setCursor(i * CHAR_WIDTH, shadowY);
  47.                 tft.print("i");
  48.             }
  49.         }
  50.     }
  51.     // 绘制新一行字符
  52.     for (int col = 0; col < SCREEN_COLUMNS; col++) {
  53.         int currentY = positions[col];
  54.         tft.setTextColor(GC9A01A_GREEN);          // 设置当前字符为亮绿色
  55.         tft.setTextSize(2);                       // 字体大小为1号
  56.         tft.setCursor(col * CHAR_WIDTH, currentY);
  57.         tft.print("i");
  58.         // 更新滚动位置
  59.         positions[col] += CHAR_HEIGHT;
  60.         if (positions[col] >= 240) {              // 超出屏幕底部后返回顶部
  61.             positions[col] = 0;
  62.         }
  63.     }
  64.     delay(DELAY_TIME); // 延迟滚动速度
  65. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 天前

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

代码说明

1、残影效果:

每次更新时,对之前的字符位置进行绘制,颜色逐渐减弱形成残影。

使用颜色数组shadowColors定义不同亮度的绿色,用来模拟字符渐隐的效果。

2、字符滚动:

字符从顶部滚动到底部,滚动位置通过数组positions动态更新。

每列字符独立滚动,形成流畅的全屏动态效果。

3、滚动速度控制:

延迟时间DELAY_TIME设置为100毫秒,确保滚动速度适中,流动感增强。

4、动态渐隐:

残影效果通过字符颜色由亮到暗的变化实现,配合滚动效果,提升视觉层次。

5、效果描述

屏幕上显示多列绿色字母“i”,从顶部向下滚动,带有动态残影效果。

每个字母在滚动时保留一段渐隐的轨迹,模拟漫天残影流星雨的经典效果。

整体动画流畅且富有科技感,非常适合展示动态特效。

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail