Rohm BH1749NUC color sensor library

Dependents:   rohm-SensorShield-example

Committer:
MACRUM
Date:
Wed Feb 27 06:48:28 2019 +0000
Revision:
0:fe0f43b69595
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:fe0f43b69595 1 /*****************************************************************************
MACRUM 0:fe0f43b69595 2 BH1749NUC.h
MACRUM 0:fe0f43b69595 3
MACRUM 0:fe0f43b69595 4 Copyright (c) 2018 ROHM Co.,Ltd.
MACRUM 0:fe0f43b69595 5
MACRUM 0:fe0f43b69595 6 Permission is hereby granted, free of charge, to any person obtaining a copy
MACRUM 0:fe0f43b69595 7 of this software and associated documentation files (the "Software"), to deal
MACRUM 0:fe0f43b69595 8 in the Software without restriction, including without limitation the rights
MACRUM 0:fe0f43b69595 9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
MACRUM 0:fe0f43b69595 10 copies of the Software, and to permit persons to whom the Software is
MACRUM 0:fe0f43b69595 11 furnished to do so, subject to the following conditions:
MACRUM 0:fe0f43b69595 12
MACRUM 0:fe0f43b69595 13 The above copyright notice and this permission notice shall be included in
MACRUM 0:fe0f43b69595 14 all copies or substantial portions of the Software.
MACRUM 0:fe0f43b69595 15
MACRUM 0:fe0f43b69595 16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
MACRUM 0:fe0f43b69595 17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
MACRUM 0:fe0f43b69595 18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
MACRUM 0:fe0f43b69595 19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
MACRUM 0:fe0f43b69595 20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
MACRUM 0:fe0f43b69595 21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
MACRUM 0:fe0f43b69595 22 THE SOFTWARE.
MACRUM 0:fe0f43b69595 23 ******************************************************************************/
MACRUM 0:fe0f43b69595 24 #ifndef _BH1749NUC_H_
MACRUM 0:fe0f43b69595 25 #define _BH1749NUC_H_
MACRUM 0:fe0f43b69595 26
MACRUM 0:fe0f43b69595 27 #include "mbed.h"
MACRUM 0:fe0f43b69595 28
MACRUM 0:fe0f43b69595 29 #ifdef _DEBUG
MACRUM 0:fe0f43b69595 30 #undef DEBUG_PRINT
MACRUM 0:fe0f43b69595 31 #define DEBUG_PRINT(...) printf(__VA_ARGS__)
MACRUM 0:fe0f43b69595 32 #else
MACRUM 0:fe0f43b69595 33 #define DEBUG_PRINT(...)
MACRUM 0:fe0f43b69595 34 #endif
MACRUM 0:fe0f43b69595 35
MACRUM 0:fe0f43b69595 36 #define BH1749NUC_DEVICE_ADDRESS_38 (0x38 << 1) // 7bit Addrss
MACRUM 0:fe0f43b69595 37 #define BH1749NUC_DEVICE_ADDRESS_39 (0x39 << 1) // 7bit Addrss
MACRUM 0:fe0f43b69595 38 #define BH1749NUC_PART_ID_VAL (0x0D)
MACRUM 0:fe0f43b69595 39 #define BH1749NUC_MANUFACT_ID_VAL (0xE0)
MACRUM 0:fe0f43b69595 40
MACRUM 0:fe0f43b69595 41 #define BH1749NUC_SYSTEM_CONTROL (0x40)
MACRUM 0:fe0f43b69595 42 #define BH1749NUC_MODE_CONTROL1 (0x41)
MACRUM 0:fe0f43b69595 43 #define BH1749NUC_MODE_CONTROL2 (0x42)
MACRUM 0:fe0f43b69595 44 #define BH1749NUC_RED_DATA_LSB (0x50)
MACRUM 0:fe0f43b69595 45 #define BH1749NUC_MANUFACTURER_ID (0x92)
MACRUM 0:fe0f43b69595 46
MACRUM 0:fe0f43b69595 47 #define BH1749NUC_MODE_CONTROL1_MEAS_MODE_120MS (2)
MACRUM 0:fe0f43b69595 48 #define BH1749NUC_MODE_CONTROL1_MEAS_MODE_240MS (3)
MACRUM 0:fe0f43b69595 49 #define BH1749NUC_MODE_CONTROL1_RGB_GAIN_X1 (1 << 3)
MACRUM 0:fe0f43b69595 50 #define BH1749NUC_MODE_CONTROL1_RGB_GAIN_X32 (3 << 3)
MACRUM 0:fe0f43b69595 51 #define BH1749NUC_MODE_CONTROL1_IR_GAIN_X1 (1 << 5)
MACRUM 0:fe0f43b69595 52 #define BH1749NUC_MODE_CONTROL1_IR_GAIN_X32 (3 << 5)
MACRUM 0:fe0f43b69595 53 #define BH1749NUC_MODE_CONTROL2_RGB_EN (1 << 4)
MACRUM 0:fe0f43b69595 54
MACRUM 0:fe0f43b69595 55 #define BH1749NUC_MODE_CONTROL1_VAL (BH1749NUC_MODE_CONTROL1_MEAS_MODE_120MS | BH1749NUC_MODE_CONTROL1_RGB_GAIN_X1 | BH1749NUC_MODE_CONTROL1_IR_GAIN_X1)
MACRUM 0:fe0f43b69595 56 #define BH1749NUC_MODE_CONTROL2_VAL (BH1749NUC_MODE_CONTROL2_RGB_EN)
MACRUM 0:fe0f43b69595 57
MACRUM 0:fe0f43b69595 58 #define GET_BYTE_RED_TO_GREEN2 (12)
MACRUM 0:fe0f43b69595 59 #define WAIT_TMT2_MAX (340)
MACRUM 0:fe0f43b69595 60
MACRUM 0:fe0f43b69595 61 /** Interface for controlling BME280 Combined humidity and pressure sensor
MACRUM 0:fe0f43b69595 62 *
MACRUM 0:fe0f43b69595 63 * @code
MACRUM 0:fe0f43b69595 64 * #include "mbed.h"
MACRUM 0:fe0f43b69595 65 * #include "BH1749NUC.h"
MACRUM 0:fe0f43b69595 66 *
MACRUM 0:fe0f43b69595 67 * BH1749NUC color(I2C_SDA, I2C_SCL);
MACRUM 0:fe0f43b69595 68 *
MACRUM 0:fe0f43b69595 69 * int main(void) {
MACRUM 0:fe0f43b69595 70 * uint16_t buf[5];
MACRUM 0:fe0f43b69595 71 * color.init();
MACRUM 0:fe0f43b69595 72 *
MACRUM 0:fe0f43b69595 73 * while (1) {
MACRUM 0:fe0f43b69595 74 * color.get_val(buf);
MACRUM 0:fe0f43b69595 75 * printf("BH1749 color : [R] %04x, [G] %04x, [B] %04x, [IR] %04x, [G2] %04x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);
MACRUM 0:fe0f43b69595 76 * wait(1);
MACRUM 0:fe0f43b69595 77 * }
MACRUM 0:fe0f43b69595 78 * }
MACRUM 0:fe0f43b69595 79 * @endcode
MACRUM 0:fe0f43b69595 80 */
MACRUM 0:fe0f43b69595 81
MACRUM 0:fe0f43b69595 82 /** BH1749NUC class
MACRUM 0:fe0f43b69595 83 *
MACRUM 0:fe0f43b69595 84 * BH1749NUC: A library to correct color data using Rohm BH1749NUC color sensor device
MACRUM 0:fe0f43b69595 85 *
MACRUM 0:fe0f43b69595 86 */
MACRUM 0:fe0f43b69595 87 class BH1749NUC
MACRUM 0:fe0f43b69595 88 {
MACRUM 0:fe0f43b69595 89 public:
MACRUM 0:fe0f43b69595 90 /** Create a BH1749NUC instance
MACRUM 0:fe0f43b69595 91 * which is connected to specified I2C pins with specified address
MACRUM 0:fe0f43b69595 92 *
MACRUM 0:fe0f43b69595 93 * @param sda I2C-bus SDA pin
MACRUM 0:fe0f43b69595 94 * @param sdl I2C-bus SCL pin
MACRUM 0:fe0f43b69595 95 * @param addr slave address of the I2C peripheral (default: 0x72)
MACRUM 0:fe0f43b69595 96 */
MACRUM 0:fe0f43b69595 97 BH1749NUC(PinName sda, PinName scl, int addr = BH1749NUC_DEVICE_ADDRESS_39);
MACRUM 0:fe0f43b69595 98 /**
MACRUM 0:fe0f43b69595 99 * BH1749NUC destructor
MACRUM 0:fe0f43b69595 100 */
MACRUM 0:fe0f43b69595 101 ~BH1749NUC();
MACRUM 0:fe0f43b69595 102 /**
MACRUM 0:fe0f43b69595 103 * Initialize BH1749NUC device
MACRUM 0:fe0f43b69595 104 */
MACRUM 0:fe0f43b69595 105 int init(void) ;
MACRUM 0:fe0f43b69595 106 /**
MACRUM 0:fe0f43b69595 107 * Get color sensor raw value
MACRUM 0:fe0f43b69595 108 * @param data buffer to store raw data
MACRUM 0:fe0f43b69595 109 */
MACRUM 0:fe0f43b69595 110 int get_rawval(char *data);
MACRUM 0:fe0f43b69595 111 /**
MACRUM 0:fe0f43b69595 112 * Get color sensor value
MACRUM 0:fe0f43b69595 113 * @param data buffer to store sensor data (R, B, G, IR and G2)
MACRUM 0:fe0f43b69595 114 */
MACRUM 0:fe0f43b69595 115 int get_val(unsigned short *data);
MACRUM 0:fe0f43b69595 116 private:
MACRUM 0:fe0f43b69595 117 int write(char memory_address, char *data, int size);
MACRUM 0:fe0f43b69595 118 int read(char memory_address, char *data, int size);
MACRUM 0:fe0f43b69595 119 I2C m_i2c;
MACRUM 0:fe0f43b69595 120 int m_addr;
MACRUM 0:fe0f43b69595 121 };
MACRUM 0:fe0f43b69595 122
MACRUM 0:fe0f43b69595 123 #endif // _BH1749NUC_H_