#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <LiquidCrystal_I2C.h>
#define Raporlama_hizi 1000
PulseOximeter pox;
// I2C LCD modülümüzü 0x27 adresine ayarlıyoruz ve kullanacağımız ekran tipini 16x2 olarak belirliyoruz.
LiquidCrystal_I2C lcd(0x27, 16, 2);
uint32_t SonKayit = 0;
// Pulse algıladığında bu fonksiyon çalışıyor.
void atimalgilandi()
{
Serial.println("Atım Algılandı ...");
lcd.setCursor(15, 1);
lcd.print("*");
}
void setup()
{
lcd.begin();
// LCD Ekranın Arkaplan ışığını açıyoruz.
lcd.backlight();
Serial.begin(115200);
lcd.setCursor(0, 0);
lcd.print("");
lcd.setCursor(0, 1);
lcd.print("");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nabiz Sensor");
lcd.setCursor(0, 1);
lcd.print("OKUMA PROJESI");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor");
lcd.setCursor(0, 1);
lcd.print("Hazirlaniyor");
delay(2000);
Serial.print("Pulse Oksimetre Sensörü Hazırlanıyor ...");
lcd.clear();
lcd.setCursor(0, 0);
// Pulse Oksimetre sensörünü kontrolünü yapıyoruz.
// Arızalar genelde yanlış I2C kablolaması, eksik güç kaynağı nedeniyledir.
if (!pox.begin()) {
Serial.println("BAŞARISIZ");
lcd.print("BASARISIZ");
for (;;);
} else {
Serial.println("TAMAMLANDI");
lcd.print("TAMAMLANDI");
}
// delay(500);
// Atım algılandığında geri çağrılacak olan fonksiyon
pox.setOnBeatDetectedCallback(atimalgilandi);
}
void loop()
{
// Sensöre tarama yapmasını sağlıyoruz.
pox.update();
// Asenkron olarak kalp atış hızı ve oksidasyon seviyelerini okuyoruz
// Her ikisi için de 0 değeri "geçersiz" anlamına gelir
//double deger=alfa*oncekideger+(0-alfa)*ritim;
//yenileme=deger-oncekideger;
if (millis() - SonKayit > Raporlama_hizi) {
Serial.print("Kalp Atış Hızı: ");
Serial.print(pox.getHeartRate());
Serial.print("bpm / SpO2: ");
Serial.print(pox.getSpO2());
Serial.println("%");
SonKayit = millis();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HR: ");
lcd.print(pox.getHeartRate());
lcd.print(" bpm");
lcd.setCursor(0, 1);
lcd.print("SpO2: ");
lcd.print(pox.getSpO2());
lcd.print("%");
}
}