#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; // Incrementa esto para un mayor promedio. 4 es bueno.
byte rates[RATE_SIZE]; // Array de frecuencias cardíacas
byte rateSpot = 0; // Índice actual en el array de tasas
long lastBeat = 0; // Tiempo en que ocurrió el último latido
float beatsPerMinute; // Frecuencia cardíaca actual
int beatAvg; // Promedio de la frecuencia cardíaca
void setup() {
Serial.begin(115200);
Serial.println("Iniciando...");
// Inicializa el sensor
if (!particleSensor.begin(Wire)) { // Utiliza el puerto I2C por defecto
Serial.println("MAX30105 no fue encontrado. Verifique las conexiones.");
while (1); // Detiene el programa si el sensor no se encuentra
}
Serial.println("Coloca tu dedo índice en el sensor con presión constante.");
// Configura el sensor
particleSensor.setup(); // Configura el sensor con configuraciones predeterminadas
particleSensor.setPulseAmplitudeRed(0x0A); // Enciende el LED rojo a un nivel bajo para indicar que el sensor está funcionando
particleSensor.setPulseAmplitudeGreen(0); // Apaga el LED verde
}
void loop() {
long irValue = particleSensor.getIR(); // Obtiene el valor IR
// Verifica si hay un latido
if (checkForBeat(irValue)) {
// Se detectó un latido
long delta = millis() - lastBeat; // Calcula el tiempo desde el último latido
lastBeat = millis(); // Actualiza el tiempo del último latido
beatsPerMinute = 60 / (delta / 1000.0); // Calcula la frecuencia cardíaca
// Asegúrate de que la frecuencia esté dentro de un rango aceptable
if (beatsPerMinute < 255 && beatsPerMinute > 20) {
rates[rateSpot++] = (byte)beatsPerMinute; // Almacena esta lectura en el array
rateSpot %= RATE_SIZE; // Envolvemos la variable
// Toma el promedio de las lecturas
beatAvg = 0; // Resetea el promedio
for (byte x = 0; x < RATE_SIZE; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE; // Calcula el promedio
}
}
// Imprime valores en el monitor serie
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
// Verifica si no hay un dedo presente
if (irValue < 50000 && irValue > 0) // Asegúrate de que irValue no sea cero
Serial.print(" No hay dedo?");
Serial.println();
delay(100); // Añade un pequeño retraso para la estabilidad de las lecturas
}
Loading
esp32-devkit-v1
esp32-devkit-v1