MAX30100 pulse rate sensor

Dependencies:   PulseRate

Dependents:   PulseRate

Committer:
kohlerba
Date:
Sun Nov 26 21:59:11 2017 +0000
Revision:
4:008e40a7d035
Parent:
3:fa37b0c705b3
Header file error fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kohlerba 0:faf977308bdc 1 #include "mbed.h"
kohlerba 0:faf977308bdc 2 #include "MAX30100.h"
kohlerba 0:faf977308bdc 3
kohlerba 2:d329886938f1 4 DigitalOut led(LED1);
kohlerba 2:d329886938f1 5
kohlerba 3:fa37b0c705b3 6 MAX30100 max;
kohlerba 3:fa37b0c705b3 7 uint32_t tsLastPollUs = 0;
kohlerba 3:fa37b0c705b3 8
kohlerba 3:fa37b0c705b3 9 // Tweakable parameters
kohlerba 3:fa37b0c705b3 10 // Sampling and polling frequency must be set consistently
kohlerba 3:fa37b0c705b3 11 #define POLL_PERIOD_US 1E06 / 100
kohlerba 3:fa37b0c705b3 12 #define SAMPLING_RATE MAX30100_SAMPRATE_100HZ
kohlerba 2:d329886938f1 13
kohlerba 3:fa37b0c705b3 14 // The LEDs currents must be set to a level that avoids clipping and maximises the
kohlerba 3:fa37b0c705b3 15 // dynamic range
kohlerba 3:fa37b0c705b3 16 #define IR_LED_CURRENT MAX30100_LED_CURR_50MA
kohlerba 3:fa37b0c705b3 17 #define RED_LED_CURRENT MAX30100_LED_CURR_27_1MA
kohlerba 3:fa37b0c705b3 18
kohlerba 3:fa37b0c705b3 19 // The pulse width of the LEDs driving determines the resolution of
kohlerba 3:fa37b0c705b3 20 // the ADC (which is a Sigma-Delta).
kohlerba 3:fa37b0c705b3 21 // set HIGHRES_MODE to true only when setting PULSE_WIDTH to MAX30100_SPC_PW_1600US_16BITS
kohlerba 3:fa37b0c705b3 22 #define PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS
kohlerba 3:fa37b0c705b3 23 #define HIGHRES_MODE true
kohlerba 2:d329886938f1 24
kohlerba 0:faf977308bdc 25 int main() {
kohlerba 3:fa37b0c705b3 26 /*
kohlerba 3:fa37b0c705b3 27 pc.printf("POR State:\n\r");
kohlerba 3:fa37b0c705b3 28 max.printRegisters();
kohlerba 3:fa37b0c705b3 29 pc.printf("\n\r");
kohlerba 3:fa37b0c705b3 30
kohlerba 3:fa37b0c705b3 31 max.begin();
kohlerba 3:fa37b0c705b3 32 pc.printf("Begin State:\n\r");
kohlerba 3:fa37b0c705b3 33 max.printRegisters();
kohlerba 3:fa37b0c705b3 34 wait(1);
kohlerba 3:fa37b0c705b3 35 pc.printf("\n\r");
kohlerba 3:fa37b0c705b3 36
kohlerba 3:fa37b0c705b3 37 max.setMode(MAX30100_MODE_SPO2_HR);
kohlerba 3:fa37b0c705b3 38 pc.printf("\n\rSPO2 and HR Mode:\n\r");
kohlerba 3:fa37b0c705b3 39 max.printRegisters();
kohlerba 3:fa37b0c705b3 40 wait(1);
kohlerba 3:fa37b0c705b3 41
kohlerba 3:fa37b0c705b3 42 pc.printf("\n\rSetting LEDs to 50mA:\n\r");
kohlerba 3:fa37b0c705b3 43 max.setLedsCurrent(MAX30100_LED_CURR_50MA, MAX30100_LED_CURR_50MA);
kohlerba 3:fa37b0c705b3 44 max.printRegisters();
kohlerba 3:fa37b0c705b3 45 wait(10);
kohlerba 3:fa37b0c705b3 46
kohlerba 3:fa37b0c705b3 47 pc.printf("\n\rSetting LEDs to 7.6mA\n\r");
kohlerba 3:fa37b0c705b3 48 max.setLedsCurrent(MAX30100_LED_CURR_7_6MA, MAX30100_LED_CURR_7_6MA);
kohlerba 3:fa37b0c705b3 49 max.printRegisters();
kohlerba 3:fa37b0c705b3 50 pc.printf("\n\r");
kohlerba 0:faf977308bdc 51 return 1;
kohlerba 3:fa37b0c705b3 52 */
kohlerba 3:fa37b0c705b3 53 max.begin();
kohlerba 3:fa37b0c705b3 54 max.setMode(MAX30100_MODE_SPO2_HR);
kohlerba 3:fa37b0c705b3 55 max.setLedsCurrent(IR_LED_CURRENT, RED_LED_CURRENT);
kohlerba 3:fa37b0c705b3 56 max.setLedsPulseWidth(PULSE_WIDTH);
kohlerba 3:fa37b0c705b3 57 max.setSamplingRate(SAMPLING_RATE);
kohlerba 3:fa37b0c705b3 58 max.setHighresModeEnabled(HIGHRES_MODE);
kohlerba 3:fa37b0c705b3 59
kohlerba 3:fa37b0c705b3 60 while(1){
kohlerba 3:fa37b0c705b3 61 if(us_ticker_read() < tsLastPollUs || us_ticker_read() - tsLastPollUs > POLL_PERIOD_US){
kohlerba 3:fa37b0c705b3 62 max.update();
kohlerba 3:fa37b0c705b3 63 tsLastPollUs = us_ticker_read();
kohlerba 3:fa37b0c705b3 64 pc.printf("$%d %d;", max.rawIRValue/10, max.rawRedValue/10);
kohlerba 0:faf977308bdc 65 }
kohlerba 3:fa37b0c705b3 66 }
kohlerba 3:fa37b0c705b3 67 }