Arduino

MAX30102 산소포화도, 심박수 측정 센서 모듈 문자 LCD

작성자 임베디드코리아 작성일26-06-21 03:33 조회24회 댓글0건
---<  MAX30102_HeartRate_Char-LCD.ino  >--------------------------------------------
#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal_I2C.h>
#include "heartRate.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);
MAX30105 particleSensor;

const byte RATE_SIZE = 4;
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;

void setup() {
  lcd.begin(16, 2);
  lcd.backlight();
  Serial.begin(115200);
  Serial.println("Initializing...");

  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();
  particleSensor.setPulseAmplitudeRed(0x0A);
  particleSensor.setPulseAmplitudeGreen(0);
}

void loop() {
  long irValue = particleSensor.getIR();

  if (checkForBeat(irValue) == true){
    long delta = millis() - lastBeat;
    lastBeat = millis();
    beatsPerMinute = 60 / (delta / 1000.0);

    if (beatsPerMinute < 255 && beatsPerMinute > 20)
    {
      rates[rateSpot++] = (byte)beatsPerMinute;
      rateSpot %= RATE_SIZE;
      beatAvg = 0;

      for (byte x = 0 ; x < RATE_SIZE ; x++)
        beatAvg += rates[x];

      beatAvg /= RATE_SIZE;
    }
  }

  if (irValue < 50000)
  {
    Serial.print(" No finger?");
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("No");
    lcd.setCursor(0,1);
    lcd.print("Finger");
    delay(150);
  }
  else {
    Serial.print("IR=");
    Serial.print(irValue);
    Serial.print(", BPM=");
    Serial.print(beatsPerMinute);
    Serial.print(", Avg BPM=");
    Serial.print(beatAvg);
    lcd.setCursor(0,0);
    lcd.print("BPM: ");
    lcd.print(beatAvg);
    lcd.setCursor(0,1);
    lcd.print("IR: ");
    lcd.print(irValue);
  }
  Serial.println();
}
----------------------------------------------------------------------------------------------------------