591浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

【花雕学编程】Arduino动手做(249)---ESP32 1.28寸 TFT GC9A01屏幕之模拟360度旋转三角叶大风车

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之十八:模拟360度旋转三角叶大风车

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十八:模拟360度旋转三角叶大风车
  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 SCREEN_CENTER_X 120        // 屏幕中心X坐标(240x240屏幕)
  21. #define SCREEN_CENTER_Y 120        // 屏幕中心Y坐标(240x240屏幕)
  22. #define BLADE_LENGTH 120            // 风车叶片长度
  23. #define BLADE_WIDTH 20             // 风车叶片宽度
  24. #define ROTATION_DELAY 20          // 每次旋转的延迟(毫秒)
  25. void drawBlade(float angle, uint16_t color) {
  26.     // 将角度转换为弧度
  27.     float radian = angle * 3.14159 / 180.0;
  28.     // 计算叶片的顶点
  29.     int x1 = SCREEN_CENTER_X + BLADE_WIDTH * cos(radian - 3.14159 / 2);
  30.     int y1 = SCREEN_CENTER_Y + BLADE_WIDTH * sin(radian - 3.14159 / 2);
  31.     int x2 = SCREEN_CENTER_X + BLADE_WIDTH * cos(radian + 3.14159 / 2);
  32.     int y2 = SCREEN_CENTER_Y + BLADE_WIDTH * sin(radian + 3.14159 / 2);
  33.     int x3 = SCREEN_CENTER_X + BLADE_LENGTH * cos(radian);
  34.     int y3 = SCREEN_CENTER_Y + BLADE_LENGTH * sin(radian);
  35.     // 绘制风车叶片的三角形
  36.     tft.fillTriangle(x1, y1, x2, y2, x3, y3, color);
  37. }
  38. void setup() {
  39.     Serial.begin(9600);
  40.     Serial.println("Rotating Windmill Animation!");
  41.     tft.begin();                   // 初始化显示屏
  42.     tft.setRotation(0);            // 设置屏幕方向
  43.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  44. }
  45. void loop() {
  46.     for (int angle = 0; angle < 360; angle += 5) {
  47.         // 清屏
  48.         tft.fillScreen(GC9A01A_BLACK);
  49.         // 绘制风车叶片
  50.         drawBlade(angle, GC9A01A_RED);        // 红色叶片
  51.         drawBlade(angle + 90, GC9A01A_GREEN);// 绿色叶片
  52.         drawBlade(angle + 180, GC9A01A_BLUE);// 蓝色叶片
  53.         drawBlade(angle + 270, GC9A01A_YELLOW);// 黄色叶片
  54.         // 延迟控制旋转速度
  55.         delay(ROTATION_DELAY);
  56.     }
  57. }
复制代码




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

实验场景图  动态图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

代码功能说明

1、风车叶片绘制:

使用drawBlade()函数绘制每个叶片。叶片形状为三角形,其底边和尖端坐标由旋转角度计算得出。

2、360度旋转:

for (int angle = 0; angle < 360; angle += 5)实现叶片围绕中心点旋转,每次增加5度以获得平滑的旋转效果。

3、多颜色叶片:

每个叶片设置不同的颜色(红色、绿色、蓝色、黄色),通过角度偏移区分每个叶片的位置。

4、动态动画:

使用delay(ROTATION_DELAY)设置每次旋转的延迟,使动画视觉效果流畅。

5、效果描述

大风车的四个叶片围绕屏幕正中心旋转,持续进行360度旋转。

叶片呈现红、绿、蓝、黄四种颜色,形状为三角形。

动画平滑、动态逼真,可用于演示视觉特效。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之十九:三色屏幕 + 中央文字 "TFT GC9A01"

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十九:三色屏幕 + 中央文字 "TFT 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"
  15. #include "Adafruit_GFX.h"
  16. #include "Adafruit_GC9A01A.h"
  17. // 定义屏幕引脚
  18. #define TFT_CS 4        // 片选引脚
  19. #define TFT_DC 2        // 数据/命令引脚
  20. #define TFT_RST -1      // 重置引脚(若未连接请设置为 -1)
  21. // 初始化屏幕对象
  22. Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
  23. void setup() {
  24.     Serial.begin(115200);       // 初始化串口通信
  25.     Serial.println("TFT GC9A01 - Three Colors with Centered Text");
  26.     tft.begin();                // 初始化屏幕
  27.     tft.setRotation(2);         // 设置屏幕方向(0 为默认)
  28.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  29. }
  30. void loop() {
  31.     // 显示红色背景 + 文字
  32.     tft.fillScreen(GC9A01A_RED);           // 填充红色背景
  33.     tft.setTextColor(GC9A01A_WHITE);       // 设置文字颜色为白色
  34.     tft.setTextSize(3);                    // 设置字体大小为 3 号
  35.     tft.setCursor(35, 90);                // 设置文字位置,使其居中
  36.     tft.print("TFT GC9A01");               // 屏幕中心显示文字
  37.     delay(1000);                           // 停留 1 秒
  38.     // 显示绿色背景 + 文字
  39.     tft.fillScreen(GC9A01A_GREEN);         // 填充绿色背景
  40.     tft.setTextColor(GC9A01A_WHITE);       // 文字颜色保持白色
  41.     tft.setTextSize(3);
  42.     tft.setCursor(35, 120);                // 屏幕中心位置
  43.     tft.print("TFT GC9A01");               // 显示文字
  44.     delay(1000);                           // 停留 1 秒
  45.     // 显示蓝色背景 + 文字
  46.     tft.fillScreen(GC9A01A_BLUE);          // 填充蓝色背景
  47.     tft.setTextColor(GC9A01A_WHITE);       // 文字颜色保持白色
  48.     tft.setTextSize(3);
  49.     tft.setCursor(35, 150);                // 屏幕中心位置
  50.     tft.print("TFT GC9A01");               // 显示文字
  51.     delay(1000);                           // 停留 1 秒
  52. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

代码功能说明

1、背景颜色切换:

使用 fillScreen() 方法循环切换红色、绿色和蓝色背景。

每种背景停留 1 秒,通过 delay(1000) 控制时间。

2、中央文字显示:

使用 setTextColor(GC9A01A_WHITE) 将文字颜色设置为白色。

使用 setTextSize(3) 设置字体大小为 3 号。

使用 setCursor(60, 100) 确定文字位置,使其位于屏幕中心(240x240 屏幕)。

3、静态文字内容:

文字内容始终为 "TFT GC9A01"。

4、循环显示:

背景颜色和文字显示功能会不断循环。

5、效果描述

屏幕会依次显示红色、绿色和蓝色背景。

每种背景下,屏幕中心显示白色的 3 号字体文字 "TFT GC9A01"。

动画流畅,适合基础屏幕测试和功能演示。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

实验场景图  动态图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之二十:基于Adafruit_GFX库测试ESP32与GC9A01显示屏的功能

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之二十:基于Adafruit_GFX库测试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"
  15. #include "Adafruit_GFX.h"
  16. #include "Adafruit_GC9A01A.h"
  17. #define TFT_DC 2
  18. #define TFT_CS 4
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
  20. void setup() {
  21.   Serial.begin (9600);
  22.   Serial.println (" ");
  23.   Serial.println ("GC9A01A Test!");
  24.   tft.begin();
  25.   Serial.println (F("Benchmark                Time (microseconds)"));
  26.   delay (10);
  27.   Serial.print(F ("Screen fill              "));
  28.   Serial.println (testFillScreen ());
  29.   delay (500);
  30.   Serial.print (F("Text                     "));
  31.   Serial.println (testText());
  32.   delay (3000);
  33.   Serial.print (F("Lines                    "));
  34.   Serial.println (testLines (GC9A01A_CYAN));
  35.   delay (500);
  36.   Serial.print (F("Horiz/Vert Lines         "));
  37.   Serial.println (testFastLines (GC9A01A_RED, GC9A01A_BLUE));
  38.   delay (500);
  39.   Serial.print (F("Rectangles (outline)     "));
  40.   Serial.println (testRects (GC9A01A_GREEN));
  41.   delay (500);
  42.   Serial.print (F("Rectangles (filled)      "));
  43.   Serial.println (testFilledRects (GC9A01A_YELLOW, GC9A01A_MAGENTA));
  44.   delay (500);
  45.   Serial.print (F("Circles (filled)         "));
  46.   Serial.println (testFilledCircles (10, GC9A01A_MAGENTA));
  47.   Serial.print (F("Circles (outline)        "));
  48.   delay (500);
  49.   Serial.print (F("Triangles (outline)      "));
  50.   Serial.println (testTriangles ());
  51.   delay (500);
  52.   Serial.print (F("Triangles (filled)       "));
  53.   Serial.println (testFilledTriangles ());
  54.   delay (500);
  55.   Serial.print (F("Rounded rects (outline)  "));
  56.   Serial.println (testRoundRects ());
  57.   delay (500);
  58.   Serial.print (F("Rounded rects (filled)   "));
  59.   Serial.println (testFilledRoundRects ());
  60.   delay (500);
  61.   Serial.println (F("Done!"));
  62. }
  63. void loop(void) {
  64.   for (uint8_t rotation = 0; rotation < 4; rotation++)
  65.   {
  66.     tft.setRotation (rotation);
  67.     testText ();
  68.     delay (1000);
  69.   }
  70. }
  71. unsigned long testFillScreen() {
  72.   unsigned long start = micros();
  73.   tft.fillScreen (GC9A01A_BLACK);
  74.   yield ();
  75.   tft.fillScreen (GC9A01A_RED);
  76.   yield ();
  77.   tft.fillScreen (GC9A01A_GREEN);
  78.   yield ();
  79.   tft.fillScreen (GC9A01A_BLUE);
  80.   yield ();
  81.   tft.fillScreen (GC9A01A_BLACK);
  82.   yield ();
  83.   return micros () - start;
  84. }
  85. unsigned long testText () {
  86.   tft.fillScreen (GC9A01A_BLACK);
  87.   unsigned long start = micros ();
  88.   tft.setCursor (10, 40);
  89.   tft.setTextColor (GC9A01A_WHITE);  tft.setTextSize(1);
  90.   tft.println ("     Hello World!");
  91.   tft.setTextColor (GC9A01A_YELLOW); tft.setTextSize(2);
  92.   tft.println ("   1234.56");
  93.   tft.setTextColor (GC9A01A_RED);    tft.setTextSize(3);
  94.   tft.println (0xDEADBEEF, HEX);
  95.   tft.println ();
  96.   tft.setTextColor (GC9A01A_GREEN);
  97.   tft.setTextSize (5);
  98.   tft.println ("Groop");
  99.   tft.setTextSize (2);
  100.   tft.println ("I implore thee,");
  101.   tft.setTextSize (1);
  102.   tft.println ("my foonting turlingdromes.");
  103.   tft.println ("And hooptiously drangle me");
  104.   tft.println ("with crinkly bindlewurdles,");
  105.   tft.println ("Or I will rend thee");
  106.   tft.println ("in the gobberwarts");
  107.   tft.println ("with my blurglecruncheon,");
  108.   tft.println ("see if I don't!");
  109.   return micros () - start;
  110.   delay (1000);
  111. }
  112. unsigned long testLines (uint16_t color) {
  113.   unsigned long start, t;
  114.   int           x1, y1, x2, y2,
  115.                 w = tft.width (),
  116.                 h = tft.height ();
  117.   tft.fillScreen (GC9A01A_BLACK);
  118.   yield ();
  119.   x1    = y1 = 0;
  120.   y2    = h - 1;
  121.   start = micros ();
  122.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  123.   x2    = w - 1;
  124.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  125.   t     = micros () - start;                                                  
  126.   // fillScreen doesn't count against timing
  127.   yield ();
  128.   tft.fillScreen (GC9A01A_BLACK);
  129.   yield ();
  130.   x1    = w - 1;
  131.   y1    = 0;
  132.   y2    = h - 1;
  133.   start = micros ();
  134.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  135.   x2    = 0;
  136.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  137.   t    += micros() - start;
  138.   yield ();
  139.   tft.fillScreen (GC9A01A_BLACK);
  140.   yield ();
  141.   x1    = 0;
  142.   y1    = h - 1;
  143.   y2    = 0;
  144.   start = micros ();
  145.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  146.   x2    = w - 1;
  147.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  148.   t    += micros () - start;
  149.   yield ();
  150.   tft.fillScreen (GC9A01A_BLACK);
  151.   yield ();
  152.   x1    = w - 1;
  153.   y1    = h - 1;
  154.   y2    = 0;
  155.   start = micros ();
  156.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  157.   x2    = 0;
  158.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  159.   yield();
  160.   return micros () - start;
  161. }
  162. unsigned long testFastLines(uint16_t color1, uint16_t color2) {
  163.   unsigned long start;
  164.   int           x, y, w = tft.width (), h = tft.height ();
  165.   tft.fillScreen (GC9A01A_BLACK);
  166.   start = micros ();
  167.   for (y = 0; y < h; y += 5) tft.drawFastHLine ( 0, y, w, color1);
  168.   for (x = 0; x < w; x += 5) tft.drawFastVLine (x, 0, h, color2);
  169.   return micros () - start;
  170. }
  171. unsigned long testRects (uint16_t color) {
  172.   unsigned long start;
  173.   int           n, i, i2,
  174.                 cx = tft.width ()  / 2,
  175.                 cy = tft.height () / 2;
  176.   tft.fillScreen (GC9A01A_BLACK);
  177.   n     = min (tft.width (), tft.height ());
  178.   start = micros ();
  179.   for (i = 2; i < n; i += 6)
  180.   {
  181.     i2 = i / 2;
  182.     tft.drawRect (cx - i2, cy - i2, i, i, color);
  183.   }
  184.   return micros () - start;
  185. }
  186. unsigned long testFilledRects (uint16_t color1, uint16_t color2) {
  187.   unsigned long start, t = 0;
  188.   int           n, i, i2,
  189.                 cx = tft.width ()  / 2 - 1,
  190.                 cy = tft.height () / 2 - 1;
  191.   tft.fillScreen (GC9A01A_BLACK);
  192.   n = min (tft.width (), tft.height ());
  193.   for (i = n; i > 0; i -= 6)
  194.   {
  195.     i2    = i / 2;
  196.     start = micros ();
  197.     tft.fillRect (cx - i2, cy - i2, i, i, color1);
  198.     t    += micros () - start;
  199.     // outlines are not included in timing results
  200.     tft.drawRect (cx - i2, cy - i2, i, i, color2);
  201.     yield ();
  202.   }
  203.   return t;
  204. }
  205. unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
  206.   unsigned long start;
  207.   int x, y, w = tft.width (), h = tft.height (), r2 = radius * 2;
  208.   tft.fillScreen (GC9A01A_BLACK);
  209.   start = micros ();
  210.   for (x = radius; x < w; x += r2)
  211.   {
  212.     for (y = radius; y < h; y += r2)
  213.     {
  214.       tft.fillCircle (x, y, radius, color);
  215.     }
  216.   }
  217.   return micros () - start;
  218. }
  219. unsigned long testCircles (uint8_t radius, uint16_t color) {
  220.   unsigned long start;
  221.   int           x, y, r2 = radius * 2,
  222.                       w = tft.width ()  + radius,   // screen is not cleared for this one -- this is
  223.                       h = tft.height () + radius;   // intentional and does not affect the reported time.
  224.   start = micros ();
  225.   for (x = 0; x < w; x += r2)
  226.   {
  227.     for (y = 0; y < h; y += r2)
  228.     {
  229.       tft.drawCircle (x, y, radius, color);
  230.     }
  231.   }
  232.   return micros () - start;
  233. }
  234. unsigned long testTriangles () {
  235.   unsigned long start;
  236.   int           n, i, cx = tft.width  () / 2 - 1,
  237.                       cy = tft.height () / 2 - 1;
  238.   tft.fillScreen (GC9A01A_BLACK);
  239.   n     = min (cx, cy);
  240.   start = micros ();
  241.   for (i = 0; i < n; i += 5)
  242.   {
  243.     tft.drawTriangle (
  244.       cx    , cy - i,                                                     // top of triangle
  245.       cx - i, cy + i,                                                     // bottom left
  246.       cx + i, cy + i,                                                     // bottom right
  247.       tft.color565( i, i, i));
  248.   }
  249.   return micros () - start;
  250. }
  251. unsigned long testFilledTriangles () {
  252.   unsigned long start, t = 0;
  253.   int           i, cx = tft.width ()  / 2 - 1,
  254.                    cy = tft.height () / 2 - 1;
  255.   tft.fillScreen (GC9A01A_BLACK);
  256.   start = micros ();
  257.   for (i = min (cx, cy); i > 10; i -= 5)
  258.   {
  259.     start = micros ();
  260.     tft.fillTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
  261.                       tft.color565 (0, i * 10, i * 10));
  262.     t += micros () - start;
  263.     tft.drawTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
  264.                       tft.color565 (i * 10, i * 10, 0));
  265.     yield ();
  266.   }
  267.   return t;
  268. }
  269. unsigned long testRoundRects () {
  270.   unsigned long start;
  271.   int           w, i, i2,
  272.                 cx = tft.width  () / 2 - 1,
  273.                 cy = tft.height () / 2 - 1;
  274.   tft.fillScreen (GC9A01A_BLACK);
  275.   w     = min (tft.width (), tft.height ());
  276.   start = micros ();
  277.   for (i = 0; i < w; i += 6)
  278.   {
  279.     i2 = i / 2;
  280.     tft.drawRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (i, 0, 0));
  281.   }
  282.   return micros () - start;
  283. }
  284. unsigned long testFilledRoundRects () {
  285.   unsigned long start;
  286.   int           i, i2,
  287.                 cx = tft.width  () / 2 - 1,
  288.                 cy = tft.height () / 2 - 1;
  289.   tft.fillScreen (GC9A01A_BLACK);
  290.   start = micros ();
  291.   for (i = min (tft.width (), tft.height ()); i > 20; i -= 6)
  292.   {
  293.     i2 = i / 2;
  294.     tft.fillRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (0, i, 0));
  295.     yield ();
  296.   }
  297.   return micros () - start;
  298. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

代码解读

1、引脚定义与初始化

  1. #define TFT_DC 2
  2. #define TFT_CS 4
  3. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
复制代码

定义了与 GC9A01A 屏幕连接的引脚:
TFT_DC:数据/命令控制引脚。
TFT_CS:片选引脚。
创建了一个 Adafruit_GC9A01A 对象 tft,用于控制屏幕。

2、setup() 函数

  1. void setup() {
  2.     Serial.begin(9600);
  3.     Serial.println("GC9A01A Test!");
  4.     tft.begin();
  5.     Serial.println(F("Benchmark                Time (microseconds)"));
  6.     delay(10);
  7.     Serial.print(F("Screen fill              "));
  8.     Serial.println(testFillScreen());
  9.     delay(500);
  10.     // 其他测试函数调用...
  11. }
复制代码

初始化串口通信,波特率设置为 9600。
初始化屏幕。
执行一系列测试函数(如 testFillScreen、testText 等),并输出每种测试的执行时间。

3、loop() 函数

  1. void loop(void) {
  2.     for (uint8_t rotation=0; rotation<4; rotation++) {
  3.         tft.setRotation(rotation);
  4.         testText();
  5.         delay(1000);
  6.     }
  7. }
复制代码

在主循环中,屏幕的方向(rotation)被设置为 0 到 3 的值,分别对应不同的旋转角度。
每次旋转后,调用 testText() 函数显示文本,持续 1 秒。

4、测试函数
testFillScreen():测试屏幕填充操作的性能。

  1. unsigned long testFillScreen() {
  2.     unsigned long start = micros();
  3.     tft.fillScreen(GC9A01A_BLACK);
  4.     yield();
  5.     tft.fillScreen(GC9A01A_RED);
  6.     yield();
  7.     tft.fillScreen(GC9A01A_GREEN);
  8.     yield();
  9.     tft.fillScreen(GC9A01A_BLUE);
  10.     yield();
  11.     tft.fillScreen(GC9A01A_BLACK);
  12.     yield();
  13.     return micros() - start;
  14. }
复制代码

使用 fillScreen() 方法填充屏幕为不同颜色。
使用 micros() 记录操作的开始和结束时间,计算总耗时。
testText():测试文本绘制操作的性能。

  1. unsigned long testText() {
  2.     tft.fillScreen(GC9A01A_BLACK);
  3.     unsigned long start = micros();
  4.     tft.setCursor(10, 40);
  5.     tft.setTextColor(GC9A01A_WHITE);
  6.     tft.setTextSize(1);
  7.     tft.println("Hello World!");
  8.     // 其他文本绘制操作...
  9.     return micros() - start;
  10. }
复制代码

使用 fillScreen() 清屏。
设置文本颜色、大小和位置,绘制多行文本。
记录并返回操作耗时。
testLines():测试绘制线条的性能。

  1. unsigned long testLines(uint16_t color) {
  2.     unsigned long start, t;
  3.     int x1, y1, x2, y2, w = tft.width(), h = tft.height();
  4.     tft.fillScreen(GC9A01A_BLACK);
  5.     yield();
  6.     x1 = y1 = 0;
  7.     y2 = h - 1;
  8.     start = micros();
  9.     for (x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
  10.     // 其他线条绘制操作...
  11.     return micros() - start;
  12. }
复制代码

使用 drawLine() 方法绘制多条线条。
记录并返回操作耗时。
其他测试函数:如 testFastLines()、testRects()、testFilledRects()、testFilledCircles() 等,分别测试绘制快速线条、矩形、填充矩形、填充圆形等操作的性能。

要点说明
1、屏幕初始化与配置
使用 Adafruit_GC9A01A 库初始化屏幕,并设置引脚连接。
通过 tft.begin() 初始化屏幕,确保屏幕处于可操作状态。

2、性能测试
通过一系列测试函数(如 testFillScreen、testText 等),评估屏幕绘制操作的性能。
使用 micros() 函数记录操作的开始和结束时间,计算并输出每种操作的耗时。

3、图形绘制操作
展示了如何使用 Adafruit_GC9A01A 库绘制各种图形,包括填充屏幕、绘制文本、线条、矩形、圆形等。
通过改变颜色、大小和位置参数,实现多样化的图形绘制。

4、屏幕旋转
在 loop() 函数中,通过 tft.setRotation() 方法改变屏幕的方向,展示不同方向下的图形绘制效果。

5、实时反馈
通过串口输出每种测试操作的耗时,便于开发者实时监控和评估屏幕的性能。

6、应用场景
图形界面开发:适用于开发需要图形界面的项目,如智能手表、手持设备等。
性能优化:通过性能测试,帮助开发者优化图形绘制代码,提高屏幕响应速度。
教育与实验:作为教学示例,帮助学习者理解图形库的使用和屏幕操作的基本原理。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

实验场景图  动态图

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

  【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"
  15. #include "Adafruit_GFX.h"
  16. #include "Adafruit_GC9A01A.h"
  17. // 定义屏幕引脚
  18. #define TFT_DC 2        // 数据/命令引脚
  19. #define TFT_CS 4        // 片选引脚
  20. #define TFT_RST -1      // 重置引脚(若未连接请设置为 -1)
  21. // 初始化屏幕对象
  22. Adafruit_GC9A01A tft(TFT_CS, TFT_DC, TFT_RST);
  23. void setup() {
  24.     Serial.begin(115200);          // 初始化串口通信
  25.     Serial.println("GC9A01 - Display Text Test");
  26.     tft.begin();                   // 初始化屏幕
  27.     tft.setRotation(2);            // 设置屏幕方向
  28.     tft.fillScreen(GC9A01A_BLACK); // 清屏并设置背景为黑色
  29.     // 显示第一行文字
  30.     tft.setTextSize(3);            // 设置字体大小为3号
  31.     tft.setTextColor(GC9A01A_RED); // 设置文字颜色为红色
  32.     tft.setCursor(70, 50);         // 设置文字起始位置
  33.     tft.print("GC9A01");           // 显示文字
  34.     // 显示第二行文字
  35.     tft.setTextSize(2);            // 设置字体大小为2号
  36.     tft.setTextColor(GC9A01A_WHITE); // 设置文字颜色为白色
  37.     tft.setCursor(40, 100);        // 设置文字位置
  38.     tft.print("Hello World !");    // 显示文字
  39.     // 显示第三行文字
  40.     tft.setTextColor(GC9A01A_YELLOW); // 设置文字颜色为黄色
  41.     tft.setCursor(30, 140);        // 设置文字位置
  42.     tft.print("JMaker Workshop");  // 显示文字
  43.     // 显示第四行文字
  44.     tft.setTextColor(GC9A01A_BLUE);  // 设置文字颜色为蓝色
  45.     tft.setCursor(30, 180);         // 设置文字位置
  46.     tft.print("www.hao123.com/"); // 显示文字
  47. }
  48. void loop() {
  49.     // 此代码仅静态显示文本,无需在 loop 中执行操作
  50. }
复制代码




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

代码说明

1、对象调用方式:

将所有 gfx-> 替换为 tft.,确保与 Adafruit_GC9A01A 库中的对象实例保持一致。

2、使用正确的颜色定义:

使用 GC9A01A_BLACK、GC9A01A_RED、GC9A01A_WHITE 等常量,这些是 Adafruit_GFX 和 GC9A01A 驱动中定义的标准颜色。

3、逐行显示文字:

使用 tft.setCursor(x, y) 调整文字的起始位置。

不同文字设置不同的字体大小和颜色,让显示效果更加丰富。

4、增加可靠性:

确保所有设置方法的参数符合库的要求。

5、效果描述

屏幕背景为黑色。

第一行显示红色 "GC9A01"。

第二行显示白色 "Hello World !"。

第三行显示黄色 "JMaker Workshop"。

第四行显示蓝色网址 "www.hao123.com/"。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

实验场景图  

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

  【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"
  15. #include "Adafruit_GFX.h"
  16. #include "Adafruit_GC9A01A.h"
  17. // 定义屏幕引脚
  18. #define TFT_DC 2        // 数据/命令引脚
  19. #define TFT_CS 4        // 片选引脚
  20. #define TFT_RST -1      // 重置引脚(若未连接请设置为 -1)
  21. // 初始化屏幕对象
  22. Adafruit_GC9A01A tft(TFT_CS, TFT_DC, TFT_RST);
  23. void setup() {
  24.   Serial.begin(115200);          // 初始化串口通信
  25.   Serial.println("逐行显示 + 清屏循环");
  26.   tft.begin();                   // 初始化屏幕
  27.   tft.setRotation(2);            // 设置屏幕方向
  28.   tft.fillScreen(GC9A01A_BLACK); // 清屏并设置背景为黑色
  29. }
  30. void loop() {
  31.   // 显示每一行文字
  32.   tft.fillScreen(GC9A01A_BLACK);  // 清屏并设置背景为黑色
  33.   // 第一行文字
  34.   tft.setTextSize(3);             // 设置字体大小为3号
  35.   tft.setTextColor(GC9A01A_RED);  // 设置文字颜色为红色
  36.   tft.setCursor(70, 50);          // 设置文字起始位置
  37.   tft.print("GC9A01");
  38.   delay(500);                     // 停留500毫秒
  39.   // 第二行文字
  40.   tft.setTextSize(2);             // 设置字体大小为2号
  41.   tft.setTextColor(GC9A01A_WHITE); // 设置文字颜色为白色
  42.   tft.setCursor(55, 100);         // 设置文字位置
  43.   tft.print("Hello World!");
  44.   delay(500);                     // 停留500毫秒
  45.   // 第三行文字
  46.   tft.setTextColor(GC9A01A_BLUE);  // 设置文字颜色为蓝色
  47.   tft.setCursor(30, 140);         // 设置文字位置
  48.   tft.print("JMaker Workshop");
  49.   delay(500);                     // 停留500毫秒
  50.   // 第四行文字
  51.   tft.setTextColor(GC9A01A_YELLOW); // 设置文字颜色为黄色
  52.   tft.setCursor(30, 180);         // 设置文字位置
  53.   tft.print("www.hao123.com/");
  54.   delay(500);                     // 停留500毫秒
  55.   // 完成后清屏
  56.   tft.fillScreen(GC9A01A_BLACK);  // 清屏
  57.   delay(500);                    // 清屏后停留500毫秒
  58. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

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

代码逻辑说明

1、逐行显示文字:

使用 setCursor(x, y) 设置每行文字的起始坐标。

每行文字停留 500 毫秒,通过 delay(500) 控制。

2、清屏控制:

每次完成文字显示后,使用 fillScreen(GC9A01A_BLACK) 清屏。

清屏后停留 500 毫秒,通过 delay(500) 实现。

3、循环执行:

loop() 会重复执行文字显示和清屏过程,实现持续循环效果。

4、文字属性:

每行文字可以设置不同的颜色和大小,增强视觉效果。

5、效果描述

屏幕从上到下逐行显示文字,每行文字停留 500 毫秒。

完成所有文字显示后,屏幕清除为黑色,并停留 500 毫秒。

循环显示上述效果,适合制作动态屏幕演示。

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail