#include <Wire.h>
#include <Adafruit_MLX90614.h>
// ^ https://www.arduino.cc/reference/en/libraries/adafruit-mlx90614-library/
/* ---------------- */
#include "MAX30105.h"
#include "heartRate.h"
// ^ https://www.arduino.cc/reference/en/libraries/sparkfun-max3010x-pulse-and-proximity-sensor-library/
#define STRBUF_DIM 80
char strbuf[STRBUF_DIM];
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
/* ---------------- */
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute = 0;
int beatAvg = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
if (!mlx.begin()) {
Serial.println(F"Error connecting to MLX sensor. Check wiring.");
while (1);
};
snprintf(strbuf, STRBUF_DIM, "MLX90614 Emissivity = %d", mlx.readEmissivity());
Serial.println(strbuf);
/* ---------------- */
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
Serial.println("================================================");
}
void loop() {
snprintf(strbuf, STRBUF_DIM, "Ambient = %d*C\tObject = %d*C", mlx.readAmbientTempC(), mlx.readObjectTempC());
Serial.println(strbuf);
/* ---------------- */
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
snprintf(strbuf, STRBUF_DIM, "IR=%d\tBPM=%d\tAvg BPM=%d", irValue, beatsPerMinute, beatAvg);
Serial.println(strbuf);
if (irValue < 50000)
Serial.println("#### No finger?");
Serial.println("------------------------------------------------");
delay(500);
}