Датчик MAX30102 представляет из себя пульсоксиметр и монитор сердечных сокращений. Внутри него есть красный и инфо красный светодиод, а также приемник, данные с которого мы можем получить.

  1. #include <Wire.h>
  2. #include "MAX30105.h"
  3.  
  4. MAX30105 particleSensor;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(9600);
  9.   Serial.println("MAX30102 Basic Readings Example");
  10.   particleSensor.begin();
  11.   particleSensor.setup();
  12. }
  13.  
  14. void loop()
  15. {
  16.   Serial.print("R:");
  17.   Serial.print(particleSensor.getRed());
  18.   Serial.print(" IR"");
  19.   Serial.print(particleSensor.getIR());
  20.   Serial.println();
  21. }

Функцией setup мы можем задать настройки модуля если пропишем 6 аргументов. Первый параметр от 0 до 255 это яркость светодиода (0 – выключены). Следующий параметр отвечает за усреднение и принимает параметры 1, 2, 4, 8, 16, 32, следующий параметр — это режим работы 1 – красный светодиод, 2- красный + ИК светодиоды, следующий параметр отвечает за скорость передачи данных (50, 100, 200, 400, 800, 1000, 1600, 3200), следующий аргумент это ширина пульса(69, 118, 215, 411), последний параметр это разрешение АЦП(2048, 4096, 8192, 16384).

Все эти параметры так же можно задать отдельными функциями setADCRange, setSampleRate, setPulseWidth, setPulseAmplitudeRed, setPulseAmplitudeIR, setPulseAmplitudeProximity, setProximityThreshold

Функции getRed и getIR получают значение с красного или инфракрасного датчика.

Функция softReset перезагружает датчик.

Функция shutDown переводит датчик в режим низкого энергопотребления и аналогичной функций wakeUp можно его вывести из сна.

Функциями readTemperature и readTemperatureF можно считать температуру с внутреннего датчика в градусах Цельсия или Фаренгейта.

С точки зрения оптимизации неправильно каждый раз пытаться считывать данные с датчика ведь они могли ещё не обновиться, для этих случаев в датчике есть FIFO.

void loop()
{
  particleSensor.check();
  while (particleSensor.available())
  {
    Serial.print("R:");
    Serial.print(particleSensor.getFIFORed());
    Serial.print(" IR:");
    Serial.print(particleSensor.getFIFOIR());
    Serial.println();
 
    particleSensor.nextSample(); 
  }
}

Функцией available мы проверяет есть ли то, что мы можем обработать из FIFO.

Функциями getFIFORed и getFIFOIR мы получаем данные FIFO.

Функцией nextSample мы переходим к следующим данным в очереди.