穿戴式控制-心律脈搏體溫感測器
// 注意事項: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(); //讀取下次心跳數值
}
}