Bradley Kohler
/
PulseRate
MAX30100 pulse rate sensor
main.cpp@4:008e40a7d035, 2017-11-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |