ESP32 MAX30102 写出计算心率与心率变异率的VSCode代码
时间: 2023-07-15 15:10:35 浏览: 241
以下是基于 ESP32 和 MAX30102 模块计算心率与心率变异率的 VSCode 代码示例:
```
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; // 心率数组大小
byte rates[RATE_SIZE]; // 心率数组
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;
void setup() {
Serial.begin(115200);
Wire.begin();
particleSensor.begin(Wire, I2C_SPEED_FAST);
particleSensor.setup();
particleSensor.enableDIETEMPRDY();
}
void loop() {
long irValue = particleSensor.getIR(); // 获取红外(IR)传感器值
if (checkForBeat(irValue) == true) { // 检测到心跳
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20) { // 心率范围20-255 BPM
rates[rateSpot++] = (byte)beatsPerMinute; // 存储心率
rateSpot %= RATE_SIZE;
// 计算平均心率
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++) {
beatAvg += rates[x];
}
beatAvg /= RATE_SIZE;
}
Serial.print("Heart Rate: ");
Serial.print(beatsPerMinute);
Serial.print(" BPM, Average: ");
Serial.println(beatAvg);
}
delay(20); // 心跳检测间隔
}
```
该代码使用了 MAX30102 模块的 `getIR()` 函数获取红外传感器的值,并使用 `checkForBeat()` 函数检测是否检测到心跳。如果检测到心跳,就计算出心率并存储到一个数组中,然后计算出该数组的平均值作为平均心率。最后输出心率和平均心率。
要计算心率变异率,可以使用心率的标准差来衡量。可以在计算平均心率时同时计算标准差。以下是修改后的代码:
```
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; // 心率数组大小
byte rates[RATE_SIZE]; // 心率数组
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;
float stdDev;
void setup() {
Serial.begin(115200);
Wire.begin();
particleSensor.begin(Wire, I2C_SPEED_FAST);
particleSensor.setup();
particleSensor.enableDIETEMPRDY();
}
void loop() {
long irValue = particleSensor.getIR(); // 获取红外(IR)传感器值
if (checkForBeat(irValue) == true) { // 检测到心跳
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20) { // 心率范围20-255 BPM
rates[rateSpot++] = (byte)beatsPerMinute; // 存储心率
rateSpot %= RATE_SIZE;
// 计算平均心率和标准差
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++) {
beatAvg += rates[x];
}
beatAvg /= RATE_SIZE;
stdDev = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++) {
stdDev += pow(rates[x] - beatAvg, 2);
}
stdDev /= RATE_SIZE;
stdDev = sqrt(stdDev);
}
Serial.print("Heart Rate: ");
Serial.print(beatsPerMinute);
Serial.print(" BPM, Average: ");
Serial.print(beatAvg);
Serial.print(" BPM, Standard Deviation: ");
Serial.println(stdDev);
}
delay(20); // 心跳检测间隔
}
```
该代码在计算平均心率时,同时计算出了标准差,通过 `pow()` 和 `sqrt()` 函数来计算。最后输出心率、平均心率和标准差。
阅读全文