【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之七十一:GC9A01园屏之360度旋转的彩虹球
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之七十一:GC9A01园屏之360度旋转的彩虹球
*/
#include "SPI.h" // 包含 SPI 库,用于 TFT 屏幕通信
#include "Adafruit_GFX.h" // 包含 Adafruit GFX 图形库,用于绘制图形
#include "Adafruit_GC9A01A.h" // 包含 GC9A01A 屏幕驱动库
#define TFT_CS 4 // 定义 TFT 屏幕片选引脚
#define TFT_DC 2 // 定义 TFT 屏幕数据/命令选择引脚
#define TFT_RST -1 // 屏幕复位引脚(-1 表示未使用)
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST); // 创建 TFT 屏幕对象
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 240
#define CENTER_X SCREEN_WIDTH / 2
#define CENTER_Y SCREEN_HEIGHT / 2
#define RADIUS 120 // 彩虹背景半径
#define ROTATION_SPEED 100.05 // 旋转速度
#define RAINBOW_SEGMENT_ANGLE 51.43 // 彩虹每段的角度
float rotationAngle = 0;
// 定义彩虹颜色
uint16_t rainbowColors[] = {
tft.color565(255, 0, 0), // 红色
tft.color565(255, 165, 0), // 橙色
tft.color565(255, 255, 0), // 黄色
tft.color565(0, 255, 0), // 绿色
tft.color565(0, 0, 255), // 蓝色
tft.color565(75, 0, 130),// 靛蓝
tft.color565(148, 0, 211)// 紫色
};
// 绘制彩虹的函数
void drawRainbow() {
for (int i = 0; i < 7; i++) {
// 计算每段彩虹的起始和结束角度(转换为弧度)
float angleStart = (i * RAINBOW_SEGMENT_ANGLE + rotationAngle) * M_PI / 180;
float angleEnd = ((i + 1) * RAINBOW_SEGMENT_ANGLE + rotationAngle) * M_PI / 180;
// 绘制三角形来组成彩虹
tft.fillTriangle(CENTER_X, CENTER_Y,
CENTER_X + RADIUS * cos(angleStart), CENTER_Y + RADIUS * sin(angleStart),
CENTER_X + RADIUS * cos(angleEnd), CENTER_Y + RADIUS * sin(angleEnd),
rainbowColors);
}
}
void setup() {
// 初始化串口通信,波特率为 115200,用于调试信息输出
Serial.begin(115200);
// 初始化 TFT 屏幕
tft.begin();
// 设置屏幕旋转方向
tft.setRotation(1);
// 用黑色填充屏幕
tft.fillScreen(tft.color565(0, 0, 0));
}
void loop() {
// 每次循环开始时,用黑色填充屏幕,清除上一帧的内容
tft.fillScreen(tft.color565(0, 0, 0));
// 调用绘制彩虹的函数
drawRainbow();
// 更新旋转角度
rotationAngle += ROTATION_SPEED;
// 确保旋转角度在 0 - 360 度范围内
if (rotationAngle >= 360) {
rotationAngle -= 360;
}
// 延迟 500 毫秒,控制旋转速度
delay(500);
}
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
代码解读1. 头文件包含
• #include "SPI.h":引入 SPI 库,该库用于实现与 TFT 屏幕的串行通信。
• #include "Adafruit_GFX.h":引入 Adafruit GFX 图形库,提供了一系列基本的图形绘制函数,如绘制点、线、矩形、圆形等。
• #include "Adafruit_GC9A01A.h":引入 GC9A01A 屏幕驱动库,用于控制特定型号的 TFT 屏幕。
2. 引脚定义和屏幕对象创建
• #define TFT_CS 4、#define TFT_DC 2、#define TFT_RST -1:定义了 TFT 屏幕的片选引脚、数据 / 命令选择引脚和复位引脚。
• Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);:创建了一个 Adafruit_GC9A01A 类的对象 tft,用于操作 TFT 屏幕。
3. 常量和变量定义
• SCREEN_WIDTH 和 SCREEN_HEIGHT:定义了屏幕的宽度和高度。
• CENTER_X 和 CENTER_Y:计算出屏幕的中心点坐标。
• RADIUS:定义了彩虹背景的半径。
• ROTATION_SPEED:定义了彩虹的旋转速度。
• RAINBOW_SEGMENT_ANGLE:定义了彩虹每段的角度。
• rotationAngle:记录当前彩虹的旋转角度。
• rainbowColors:定义了一个包含七种颜色的数组,用于表示彩虹的七种颜色。
4. drawRainbow 函数
该函数用于绘制彩虹,通过循环绘制七个三角形来组成彩虹。每个三角形的顶点分别为屏幕中心点、半径为 RADIUS 且角度为 angleStart 的点和角度为 angleEnd 的点。
5. setup 函数
在程序开始时执行一次,主要完成串口通信初始化、TFT 屏幕初始化、设置屏幕旋转方向和用黑色填充屏幕的操作。
6. loop 函数
程序会不断循环执行该函数,实现彩虹的旋转效果。具体步骤如下:
• 用黑色填充屏幕,清除上一帧的内容。
• 调用 drawRainbow 函数绘制彩虹。
• 更新旋转角度,并确保旋转角度在 0 - 360 度范围内。
• 延迟 500 毫秒,控制旋转速度。
通过这种方式,代码实现了一个在 TFT 屏幕上旋转的彩虹效果。
【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
实验场景图动态图【花雕学编程】Arduino动手做(249)---GC9A01旋转的彩虹球
页:
[1]