【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母

2025-04-251524
AI 快速预览详细 收起
本文介绍了如何使用Arduino控制GC9A01显示屏显示位置随机的字母。通过详细的代码示例,读者可以轻松实现这一效果。无论你是Arduino初学者还是有一定基础的爱好者,都能从中受益。
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母图2

【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(7)
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者


驴友花雕
驴友花雕
作者
实验场景图 动态图


驴友花雕
驴友花雕
作者
这段 Arduino 代码的主要功能是在 1.28 英寸圆形彩色 TFT 显示屏(GC9A01 驱动)上随机显示 10 个红、绿或蓝色的字母,并且这些字母的位置也是随机的。屏幕会大约每 0.6 秒刷新一次,显示新的随机字母和位置。
更详细地解读:
1、注释说明:
代码开头注释了这是一个基于 "189种传感器模块系列实验" 的项目,具体是针对 1.28 寸圆形 TFT 屏幕 (GC9A01 驱动)。
还给出了 GC9A01 模块与 ESP32 开发板的引脚连接说明,例如 RST 未连接,CS 接 D4,DC 接 D2,SDA 接 D23 (绿色线),SCL 接 D18 (黄色线),GND 接 GND,VCC 接 3.3V。
2、库包含:
#include : 包含了用于控制 ESP32 TFT 屏幕的强大库。
3、对象创建:
TFT_eSPI tft = TFT_eSPI();: 创建了一个 TFT_eSPI 类的对象 tft,用于直接操作屏幕。
TFT_eSprite spr = TFT_eSprite(&tft);: 创建了一个 TFT_eSprite 类的对象 spr,这是一个“精灵”,可以先在内存中绘制图像,然后一次性推送到屏幕上,通常用于提高动画性能,尤其是在频繁更新屏幕内容时。
4、宏定义:
#define SCREEN_WIDTH 240: 定义屏幕宽度为 240 像素。
#define SCREEN_HEIGHT 240: 定义屏幕高度为 240 像素。
#define REFRESH_INTERVAL 600: 定义屏幕刷新的时间间隔为 600 毫秒 (0.6 秒)。
5、显示文本数组:
const char* texts[] = {"A", "B", "C", "D", "E", "F", "G"};: 创建一个包含 7 个大写字母的字符串数组,用于随机选择显示。
6、刷新时间记录:
unsigned long lastUpdate = 0;: 用于记录上次屏幕更新的时间,以便控制刷新频率。
7、setup() 函数 (初始化):
tft.init();: 初始化 TFT 屏幕。
tft.setRotation(2);: 设置屏幕的显示方向(可能是横向显示,具体取决于硬件连接和屏幕方向)。
tft.fillScreen(TFT_BLACK);: 将屏幕填充为黑色,作为初始背景。
randomSeed(analogRead(0));: 使用连接到模拟引脚 A0 的随机噪声来初始化随机数生成器,确保每次启动后随机数序列不同。
spr.createSprite(SCREEN_WIDTH, SCREEN_HEIGHT);: 在内存中创建一个与屏幕尺寸相同的精灵缓冲区。
spr.setTextDatum(MC_DATUM);: 设置文本的对齐方式为中间居中 (Middle Center Datum),这样在指定坐标绘制文本时,文本会以该坐标为中心。
8、loop() 函数 (主循环):
if (millis() - lastUpdate > REFRESH_INTERVAL): 检查自上次屏幕更新以来是否已经过了 REFRESH_INTERVAL 毫秒。
lastUpdate = millis();: 如果时间间隔已到,则更新 lastUpdate 为当前时间。
showRandomTexts();: 调用 showRandomTexts() 函数来生成并显示新的随机字母。
9、showRandomTexts() 函数 (显示随机文本):
spr.fillSprite(TFT_BLACK);: 清空精灵缓冲区,用黑色填充。
for (int i = 0; i < 10; i++): 循环 10 次,绘制 10 个随机字母。
int x = random(0, SCREEN_WIDTH - 20);: 生成一个 0 到屏幕宽度减去 20 的随机 X 坐标,留出一些边距以防止字母超出屏幕。
int y = random(0, SCREEN_HEIGHT - 20);: 生成一个 0 到屏幕高度减去 20 的随机 Y 坐标,同样留出边距。
spr.setTextColor(getRandomColor(), TFT_BLACK);: 设置文本颜色为一个随机的红、绿或蓝色,背景色为黑色(虽然背景已经填充为黑色,但这是 drawString() 函数的参数要求)。
spr.setTextSize(10);: 设置文本的字体大小为 10(这是一个相对较大的字体)。
spr.drawString(texts[random(0, 7)], x, y);: 从 texts 数组中随机选择一个字母,并在随机生成的 (x, y) 坐标处绘制到精灵缓冲区上。
spr.pushSprite(0, 0);: 将精灵缓冲区的内容一次性推送到屏幕的 (0, 0) 坐标处,完成屏幕的更新。
10、getRandomColor() 函数 (生成随机颜色):
switch (random(0, 3)): 生成一个 0 到 2 的随机整数。
根据随机数的值,返回 TFT_RED、TFT_GREEN 或 TFT_BLUE 中的一个颜色常量。
如果随机数不在 0-2 范围内(理论上不会发生,但作为保险),则返回 TFT_WHITE。
总而言之,这段代码演示了如何使用 ESP32 和 TFT_eSPI 库来控制一个圆形彩色 TFT 屏幕,使其能够周期性地显示 10 个随机颜色和随机位置的大写字母。使用了精灵 (Sprite) 技术来提高可能的刷新性能。
驴友花雕
驴友花雕
作者
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百二十七:ESP32+GC9A01之位置随机的红蓝绿颜色十个字母
实验开源代码
[code]/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百二十七:ESP32+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
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite spr = TFT_eSprite(&tft); // 创建精灵
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 240
#define REFRESH_INTERVAL 600 // 每 0.6 秒刷新一次
const char* texts[] = {"A", "B", "C", "D", "E", "F", "G"}; // 显示的字符
unsigned long lastUpdate = 0;
void setup() {
tft.init();
tft.setRotation(2); // 设定屏幕方向
tft.fillScreen(TFT_BLACK); // 清空屏幕
randomSeed(analogRead(0)); // 初始化随机数种子
spr.createSprite(SCREEN_WIDTH, SCREEN_HEIGHT); // 创建精灵
spr.setTextDatum(MC_DATUM); // 设置文本居中对齐
}
void loop() {
if (millis() - lastUpdate > REFRESH_INTERVAL) {
lastUpdate = millis();
showRandomTexts();
}
}
/**
* 随机显示 10 个字符,颜色随机,位置随机
*/
void showRandomTexts() {
spr.fillSprite(TFT_BLACK); // 清空精灵背景
for (int i = 0; i < 10; i++) {
int x = random(0, SCREEN_WIDTH - 20); // 随机 X 坐标
int y = random(0, SCREEN_HEIGHT - 20); // 随机 Y 坐标
spr.setTextColor(getRandomColor(), TFT_BLACK); // 设定随机颜色
spr.setTextSize(10); // 设置超大字体
spr.drawString(texts[random(0, 7)], x, y); // 随机位置绘制字符
}
spr.pushSprite(0, 0); // 将精灵绘制到屏幕
}
/**
* 生成随机颜色(红、绿、蓝)
*/
uint16_t getRandomColor() {
switch (random(0, 3)) {
case 0: return TFT_RED;
case 1: return TFT_GREEN;
case 2: return TFT_BLUE;
}
return TFT_WHITE;
}[/code]
驴友花雕
驴友花雕
作者


驴友花雕
驴友花雕
作者


- 没有更多了 -