【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之一百二十七:ESP32+GC9A01之位置随机的红蓝绿颜色十个字母
实验开源代码
/*
【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.h>
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, 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;
}
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
这段 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 <TFT_eSPI.h>: 包含了用于控制 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, 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动手做(249)--GC9A01位置随机的字母
实验场景图动态图【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母
页:
[1]