18| 7
|
[项目] 【花雕学编程】Arduino动手做(249)--GC9A01位置随机的字母 |
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动 项目之一百二十七:ESP32+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[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) 技术来提高可能的刷新性能。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed