驴友花雕 发表于 2025-4-16 06:55:11

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图




驴友花雕 发表于 2025-4-16 06:56:32

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图




驴友花雕 发表于 2025-4-16 06:57:49

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图




驴友花雕 发表于 2025-4-16 06:58:52

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图

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

驴友花雕 发表于 2025-4-16 07:10:11

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图

这段代码的核心功能是 动态心率动画,它通过 正弦波函数 模拟心跳,并在屏幕上 不断跳动,形成流畅的视觉化效果。
代码结构

1️⃣ 初始化屏幕
• 使用 Adafruit_GC9A01A 控制 TFT 显示屏,设定黑色背景。
2️⃣ 绘制心率波形
• sin() 计算 波形曲线,模拟脉搏跳动。
• drawPixel() 在屏幕上绘制 红色心率曲线,形成动态变化。
3️⃣ 更新波形动画
• phase 控制 波形滚动,每次循环增加一定相位,使波形移动。
• if (phase >= 360) { phase = 0; } 保持循环,使心率动画不断流畅更新。
4️⃣ 持续循环
• delay(50); 控制动画节奏,使心率跳动平滑、自然。

最终效果

屏幕显示动态心率波形,模拟脉搏跳动
动画流畅,视觉冲击力强
黑色背景 + 红色心率曲线,让界面清晰直观

驴友花雕 发表于 2025-4-16 07:12:51

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图

实验场景图动态图




驴友花雕 发表于 2025-4-16 07:15:10

【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图




页: [1]
查看完整版本: 【花雕学编程】Arduino动手做(249)--GC9A01模拟动态心电图