an I2C bus optical sensor for heart rate monitor
BH1790GLC.h@0:68b1bd50b38b, 2017-06-12 (annotated)
- Committer:
- hidekich1
- Date:
- Mon Jun 12 08:48:38 2017 +0000
- Revision:
- 0:68b1bd50b38b
Firse commit from ROHM Arduino library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hidekich1 | 0:68b1bd50b38b | 1 | /***************************************************************************** |
hidekich1 | 0:68b1bd50b38b | 2 | BH1790GLC.h |
hidekich1 | 0:68b1bd50b38b | 3 | |
hidekich1 | 0:68b1bd50b38b | 4 | Copyright (c) 2016 ROHM Co.,Ltd. |
hidekich1 | 0:68b1bd50b38b | 5 | |
hidekich1 | 0:68b1bd50b38b | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy |
hidekich1 | 0:68b1bd50b38b | 7 | of this software and associated documentation files (the "Software"), to deal |
hidekich1 | 0:68b1bd50b38b | 8 | in the Software without restriction, including without limitation the rights |
hidekich1 | 0:68b1bd50b38b | 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
hidekich1 | 0:68b1bd50b38b | 10 | copies of the Software, and to permit persons to whom the Software is |
hidekich1 | 0:68b1bd50b38b | 11 | furnished to do so, subject to the following conditions: |
hidekich1 | 0:68b1bd50b38b | 12 | |
hidekich1 | 0:68b1bd50b38b | 13 | The above copyright notice and this permission notice shall be included in |
hidekich1 | 0:68b1bd50b38b | 14 | all copies or substantial portions of the Software. |
hidekich1 | 0:68b1bd50b38b | 15 | |
hidekich1 | 0:68b1bd50b38b | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
hidekich1 | 0:68b1bd50b38b | 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
hidekich1 | 0:68b1bd50b38b | 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
hidekich1 | 0:68b1bd50b38b | 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
hidekich1 | 0:68b1bd50b38b | 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
hidekich1 | 0:68b1bd50b38b | 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
hidekich1 | 0:68b1bd50b38b | 22 | THE SOFTWARE. |
hidekich1 | 0:68b1bd50b38b | 23 | ******************************************************************************/ |
hidekich1 | 0:68b1bd50b38b | 24 | #ifndef _BH1790GLC_H_ |
hidekich1 | 0:68b1bd50b38b | 25 | #define _BH1790GLC_H_ |
hidekich1 | 0:68b1bd50b38b | 26 | |
hidekich1 | 0:68b1bd50b38b | 27 | #define BH1790GLC_DEVICE_ADDRESS (0x5B<<1) |
hidekich1 | 0:68b1bd50b38b | 28 | #define BH1790GLC_MID_VAL (0xE0) |
hidekich1 | 0:68b1bd50b38b | 29 | #define BH1790GLC_PID_VAL (0x0D) |
hidekich1 | 0:68b1bd50b38b | 30 | |
hidekich1 | 0:68b1bd50b38b | 31 | #define BH1790GLC_MANUFACTURER_ID (0x0F) |
hidekich1 | 0:68b1bd50b38b | 32 | #define BH1790GLC_PART_ID (0x10) |
hidekich1 | 0:68b1bd50b38b | 33 | #define BH1790GLC_MEAS_CONTROL1 (0x41) |
hidekich1 | 0:68b1bd50b38b | 34 | #define BH1790GLC_DATAOUT_LEDOFF (0x54) |
hidekich1 | 0:68b1bd50b38b | 35 | |
hidekich1 | 0:68b1bd50b38b | 36 | #define BH1790GLC_MEAS_CONTROL1_RDY (1 << 7) |
hidekich1 | 0:68b1bd50b38b | 37 | #define BH1790GLC_MEAS_CONTROL1_LED_LIGHTING_FREQ_128HZ (0 << 2) |
hidekich1 | 0:68b1bd50b38b | 38 | #define BH1790GLC_MEAS_CONTROL1_RCYCLE_32HZ (2 << 0) |
hidekich1 | 0:68b1bd50b38b | 39 | |
hidekich1 | 0:68b1bd50b38b | 40 | #define BH1790GLC_MEAS_CONTROL2_LED_EN_00 (0 << 6) |
hidekich1 | 0:68b1bd50b38b | 41 | #define BH1790GLC_MEAS_CONTROL2_LED_ON_TIME_0_3MS (0 << 5) |
hidekich1 | 0:68b1bd50b38b | 42 | #define BH1790GLC_MEAS_CONTROL2_LED_CURRENT_10MA (12 << 0) |
hidekich1 | 0:68b1bd50b38b | 43 | |
hidekich1 | 0:68b1bd50b38b | 44 | #define BH1790GLC_MEAS_START_MEAS_ST (1 << 0) |
hidekich1 | 0:68b1bd50b38b | 45 | |
hidekich1 | 0:68b1bd50b38b | 46 | #define BH1790GLC_MEAS_CONTROL1_VAL (BH1790GLC_MEAS_CONTROL1_RDY | BH1790GLC_MEAS_CONTROL1_LED_LIGHTING_FREQ_128HZ | BH1790GLC_MEAS_CONTROL1_RCYCLE_32HZ) |
hidekich1 | 0:68b1bd50b38b | 47 | #define BH1790GLC_MEAS_CONTROL2_VAL (BH1790GLC_MEAS_CONTROL2_LED_EN_00 | BH1790GLC_MEAS_CONTROL2_LED_ON_TIME_0_3MS | BH1790GLC_MEAS_CONTROL2_LED_CURRENT_10MA) |
hidekich1 | 0:68b1bd50b38b | 48 | #define BH1790GLC_MEAS_START_VAL (BH1790GLC_MEAS_START_MEAS_ST) |
hidekich1 | 0:68b1bd50b38b | 49 | |
hidekich1 | 0:68b1bd50b38b | 50 | #include "mbed.h" |
hidekich1 | 0:68b1bd50b38b | 51 | |
hidekich1 | 0:68b1bd50b38b | 52 | /** BH1790GLC class |
hidekich1 | 0:68b1bd50b38b | 53 | * |
hidekich1 | 0:68b1bd50b38b | 54 | * BH1790GLC: an I2C bus optical sensor for heart rate monitor library |
hidekich1 | 0:68b1bd50b38b | 55 | * |
hidekich1 | 0:68b1bd50b38b | 56 | * BH1790GLC is optical sensor for heart rate monitor IC in |
hidekich1 | 0:68b1bd50b38b | 57 | * which LED driver and green light detection photo-diode |
hidekich1 | 0:68b1bd50b38b | 58 | * are incorporated. This device drives LED and provides |
hidekich1 | 0:68b1bd50b38b | 59 | * the intensity of light reflected from body. |
hidekich1 | 0:68b1bd50b38b | 60 | * |
hidekich1 | 0:68b1bd50b38b | 61 | * For more information about BH1790GLC: |
hidekich1 | 0:68b1bd50b38b | 62 | * http://www.rohm.com/web/global/datasheet/BH1790GLC/bh1790glc-e |
hidekich1 | 0:68b1bd50b38b | 63 | * |
hidekich1 | 0:68b1bd50b38b | 64 | * This was ported from Arduino library by H.Tanaka |
hidekich1 | 0:68b1bd50b38b | 65 | * http://rohmfs.rohm.com/en/products/databook/applinote/ic/sensor/optical_sensor_for_heart_rate_monitor/bh1790glc-evk-001-manual-e.pdf |
hidekich1 | 0:68b1bd50b38b | 66 | * http://rohmfs.rohm.com/en/products/databook/applinote/ic/sensor/optical_sensor_for_heart_rate_monitor/bh1790glc-software-manual-e.pdf |
hidekich1 | 0:68b1bd50b38b | 67 | */ |
hidekich1 | 0:68b1bd50b38b | 68 | |
hidekich1 | 0:68b1bd50b38b | 69 | class BH1790GLC |
hidekich1 | 0:68b1bd50b38b | 70 | { |
hidekich1 | 0:68b1bd50b38b | 71 | public: |
hidekich1 | 0:68b1bd50b38b | 72 | /** Create a BH1790GLC instance connected to specified I2C pins with specified address |
hidekich1 | 0:68b1bd50b38b | 73 | * |
hidekich1 | 0:68b1bd50b38b | 74 | * @param sda I2C-bus SDA pin |
hidekich1 | 0:68b1bd50b38b | 75 | * @param scl I2C-bus SCL pin |
hidekich1 | 0:68b1bd50b38b | 76 | * @param i2c_address I2C-bus address (default: 0x5B<<1) |
hidekich1 | 0:68b1bd50b38b | 77 | */ |
hidekich1 | 0:68b1bd50b38b | 78 | BH1790GLC(PinName sda, PinName scl, char address = BH1790GLC_DEVICE_ADDRESS); |
hidekich1 | 0:68b1bd50b38b | 79 | /** Create a BH1790GLC instance connected to specified I2C object with specified address |
hidekich1 | 0:68b1bd50b38b | 80 | * |
hidekich1 | 0:68b1bd50b38b | 81 | * @param i2c_obj I2C object (instance) |
hidekich1 | 0:68b1bd50b38b | 82 | * @param i2c_address I2C-bus address (default: 0x5B<<1) |
hidekich1 | 0:68b1bd50b38b | 83 | */ |
hidekich1 | 0:68b1bd50b38b | 84 | BH1790GLC(I2C &i2c_obj, char address = BH1790GLC_DEVICE_ADDRESS); |
hidekich1 | 0:68b1bd50b38b | 85 | /** Destructor of BH1790GLC |
hidekich1 | 0:68b1bd50b38b | 86 | */ |
hidekich1 | 0:68b1bd50b38b | 87 | ~BH1790GLC(); |
hidekich1 | 0:68b1bd50b38b | 88 | |
hidekich1 | 0:68b1bd50b38b | 89 | void init(void); |
hidekich1 | 0:68b1bd50b38b | 90 | int meas_start(void); |
hidekich1 | 0:68b1bd50b38b | 91 | int get_rawval(char *data); |
hidekich1 | 0:68b1bd50b38b | 92 | int get_val(unsigned short *data); |
hidekich1 | 0:68b1bd50b38b | 93 | int write(char memory_address,char *data,int size); |
hidekich1 | 0:68b1bd50b38b | 94 | int read(char memory_address,char *data, int size); |
hidekich1 | 0:68b1bd50b38b | 95 | private: |
hidekich1 | 0:68b1bd50b38b | 96 | I2C *i2c_p; |
hidekich1 | 0:68b1bd50b38b | 97 | I2C &i2c; |
hidekich1 | 0:68b1bd50b38b | 98 | char adr; |
hidekich1 | 0:68b1bd50b38b | 99 | }; |
hidekich1 | 0:68b1bd50b38b | 100 | #endif |