穿戴式控制-心律脈搏體溫感測器

// 注意事項:1. 手指輕放,勿按壓。2. 手指請勿移動

#include <Wire.h>

#include "MAX30105.h"           //MAX3010x 函式庫

#include "heartRate.h"          //心率計算演算法函式庫

MAX30105 particleSensor;

int i = 0;

const byte RATE_SIZE = 5;      //計算平均數量

byte rates[RATE_SIZE];          // 心跳陣列

int beat=0; 

byte rateSpot = 0;

long lastBeat = 0;              //最後一次心跳發生的時間

float beatsPerMinute;

int beatAvg;

#define FINGER_ON 25000          //紅外線最小量(判斷手指是否已放上感測器)


void setup() {

  Serial.begin(9600);

  delay(2000); 

  Serial.println("======== 心率測試儀 ========");

  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) 

  {

    Serial.println(" 血氧感測器初始化失敗 ");

    while (1);

  }

  particleSensor.setup(); 

  particleSensor.setPulseAmplitudeRed(0x1F);    // 紅色 LED 燈亮(Options: 0=Off to 255=50mA)

  particleSensor.setPulseAmplitudeGreen(0);     // 綠色 LED 燈熄滅

  Serial.println("**** 請將手指放在感測器上,並請稍後 ****");

}


void loop() {

  

  long irValue = particleSensor.getIR();        // 讀取紅外線值,以確認手指是否放上

  if (irValue > FINGER_ON ) {                   // 手指已放在感測器上

    if (checkForBeat(irValue) == true) {        // 檢查是否有心跳

      long irValue = particleSensor.getIR(); 

      // 讀取紅外線值,以確認手指是否放上

      long delta = millis() - lastBeat;         // 計算心跳差

      lastBeat = millis();

      beatsPerMinute = 60 / (delta / 1000.0);   // 計算平均心跳

      if (beatsPerMinute < 180 && beatsPerMinute > 40) { 

      // 心跳必須介於 40-180 之間

      rates[rateSpot++] = (byte)beatsPerMinute; // 儲存心跳數值陣列

      rateSpot %= RATE_SIZE;

      beatAvg = 0;                              // 計算平均值

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

        beatAvg /= RATE_SIZE;

      }

      if (beatAvg > 60){

        beat = beat + beatAvg; 

        i++;

        Serial.print(".");

        if (i > 15){

          Serial.println("OK!");

          beat = beat / 15;

          Serial.print(" 您的心跳值為:");Serial.println(beat);

          float temperature = particleSensor.readTemperature(); //偵測身體溫度

          Serial.print(" 身體溫度C=");

          Serial.println(temperature, 4);

          while(1);                             // 停止偵測

        }

      }

    } 

    particleSensor.nextSample();                //讀取下次心跳數值

  }

}