【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
项目之九十五:GC9A01园屏之通过 正弦波函数模拟动态心电图
实验开源代码
- /*
- 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
- 实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
- 项目之九十五: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 "SPI.h" // 用于与屏幕通信的 SPI 通讯协议库
- #include "Adafruit_GFX.h" // Adafruit 提供的图形库,支持基本图形绘制
- #include "Adafruit_GC9A01A.h" // 适用于 GC9A01 屏幕驱动的库(专为圆形 TFT 屏设计)
-
- // 定义显示屏连接的引脚(对应 ESP32)
- #define TFT_CS 4 // CS(片选)引脚连接 ESP32 的 D4
- #define TFT_DC 2 // DC(数据/命令选择)引脚连接 ESP32 的 D2
- #define TFT_RST -1 // RST(复位)未使用,设为 -1 表示不连接
-
- // 创建屏幕对象,传入控制引脚
- Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
-
- // 定义屏幕相关参数
- #define SCREEN_WIDTH 240 // 屏幕宽度(像素)
- #define SCREEN_HEIGHT 240 // 屏幕高度(像素)
- #define CENTER_Y SCREEN_HEIGHT / 2 // Y轴中点,用于确定波形的垂直中心线
- #define WAVE_WIDTH SCREEN_WIDTH // 波形宽度,与屏幕宽度一致
- #define WAVE_HEIGHT 70 // 波形幅度,即最大上下偏移像素
- #define SPEED 20 // 控制波形横向移动速度
-
- float phase = 0; // 控制波形起始相位(决定波的起点),用于产生移动效果
-
- // Arduino 初始化函数,仅运行一次
- void setup() {
- Serial.begin(115200); // 初始化串口,用于调试信息输出
- tft.begin(); // 初始化 TFT 屏幕
- tft.setRotation(2); // 设置屏幕方向(可调整 0~3)
- }
-
- // Arduino 主循环函数,重复执行
- void loop() {
- tft.fillScreen(tft.color565(0, 0, 0)); // 清空屏幕,用黑色背景
-
- // 遍历屏幕宽度的每一个 X 像素位置,绘制波形
- for (int x = 0; x < WAVE_WIDTH; x++) {
- float radian = (x + phase) * M_PI / 180; // 将 X 坐标加上相位后转为弧度值
- int y = CENTER_Y + WAVE_HEIGHT * sin(radian); // 使用正弦函数生成波形 Y 值
-
- tft.drawPixel(x, y, tft.color565(255, 0, 0)); // 在计算出的 (x, y) 坐标绘制红色点
- }
-
- // 增加相位,产生波形移动的动画效果
- phase += SPEED;
- if (phase >= 360) {
- phase = 0; // 相位归零,避免数值过大导致浮点溢出
- }
-
- delay(50); // 控制刷新频率,影响动画流畅度(数值越小越快)
- }
复制代码
|