【花雕学编程】Arduino动手做(249)---ESP32 1.28寸 TFT GC9A01屏之通过 正弦波函数模拟动态心电图

2025-04-1658
AI 快速预览详细 收起
该项目使用ESP32和1.28寸TFT GC9A01屏,通过正弦波函数模拟动态心电图。代码结构包括初始化屏幕、绘制心率波形、更新波形动画和持续循环。最终效果是屏幕显示动态心率波形,模拟脉搏跳动,动画流畅且视觉冲击力强。

00 (2).jpg
02.jpg
03.jpg
10 (1).jpg
12.jpg
15.jpg

  【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);  // 控制刷新频率,影响动画流畅度(数值越小越快)
}

这段代码的核心功能是 动态心率动画,它通过 正弦波函数 模拟心跳,并在屏幕上 不断跳动,形成流畅的视觉化效果。
代码结构
1️⃣ 初始化屏幕
• 使用 Adafruit_GC9A01A 控制 TFT 显示屏,设定黑色背景。
2️⃣ 绘制心率波形
• sin() 计算 波形曲线,模拟脉搏跳动。
• drawPixel() 在屏幕上绘制 红色心率曲线,形成动态变化。
3️⃣ 更新波形动画
• phase 控制 波形滚动,每次循环增加一定相位,使波形移动。
• if (phase >= 360) { phase = 0; } 保持循环,使心率动画不断流畅更新。
4️⃣ 持续循环
• delay(50); 控制动画节奏,使心率跳动平滑、自然。
最终效果
❤️ 屏幕显示动态心率波形,模拟脉搏跳动 ⚡ 动画流畅,视觉冲击力强 🎨 黑色背景 + 红色心率曲线,让界面清晰直观

实验场景图  动态图

 

89-9- (1).jpg
89-9- (2).jpg
89-9- (3).jpg
00110.gif

创作许可协议

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

评论(0)
- 没有更多了 -