an I2C bus optical sensor for heart rate monitor

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?

UserRevisionLine numberNew 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