HAMAMATSU's I2C color sensor S11059
S11059.h
- Committer:
- Rhyme
- Date:
- 2017-05-12
- Revision:
- 0:cfdb96085fb7
File content as of revision 0:cfdb96085fb7:
#ifndef _S11059_H_ #define _S11059_H_ #include "mbed.h" /** * S11059 HAMAMATSU * @note RGBUr Color Sensor with I2C Interface * @note I2C 7bit address: 0x2A * */ /** @code #include "mbed.h" #include "S11059.h" #define MSU_S11059_ADDRESS 0x2A #define PIN_SCL PTE1 #define PIN_SDA PTE0 int main(void) { uint16_t uR, uG, uB, uIR ; uint8_t ctrl ; int test_loop = 10 ; int interval = 100 ; S11059 *s11059 = new S11059(PIN_SDA, PIN_SCL, MSU_S11059_ADDRESS) ; for (int i = 0 ; i < test_loop ; i++ ) { ctrl = 0x89 ; // ADC reset, High Gain, integration time 1.4ms s11059->setControl(ctrl) ; ctrl = 0x09 ; // Release ADC reset, High Gain, integration time 1.4ms s11059->setControl(ctrl) ; // start measure wait(0.02) ; s11059->getRData(&uR) ; s11059->getGData(&uG) ; s11059->getBData(&uB) ; s11059->getIRData(&uIR) ; printf("S11059 R[%d], G[%d], B[%d], IR[%d]\n", uR, uG, uB, uIR) ; wait_ms(interval) ; } delete s11059 ; while(1) { } } @endcode */ class S11059 { public: /** * constructor * * @param sda SDA pin * @param scl SCL pin * @param addr address of the I2C peripheral */ S11059(PinName sda, PinName scl, int addr) ; ~S11059() ; /* * some member functions here (yet to be written) */ /** * Get measured Red Value as float [0..1] * @returns the value of Red as float */ float getR(void) ; // return float value of Red /** * Get measured Green Value as float [0..1] * @returns the value of Green as float */ float getG(void) ; // return float value of Green /** * Get measured Blue Value as float [0..1] * @returns the value of Blue as float */ float getB(void) ; // return float value of Blue /** * Get measured Infrared Value as float [0..1] * @returns the value of Infrared as float */ float getIR(void) ; // return float value of Infrared /** * Get measured value of Red * @param rdata unsigned 16bit data of Red */ void getRData(uint16_t *rdata) ; /** * Get measured value of Green * @param rdata unsigned 16bit data of Green */ void getGData(uint16_t *gdata) ; /** * Get measured value of Blue * @param rdata unsigned 16bit data of Blue */ void getBData(uint16_t *bdata) ; /** * Get measured value of Infrared * @param rdata unsigned 16bit data of Infrared */ void getIRData(uint16_t *irdata) ; /** * Get measured values of Red, Green, Blue and Infrared at once * @param 4 unsigned 16bit data data[0]:Red, data[1]:Green, data[2]:Blue, data[3]:Infrared */ void getAllData(uint16_t *data) ; /* pass uint16_t data[4] */ /** * Get value of the Control Register * @returns the value of Control Register at address 0x00 * @note bit[7] ADC Reset 1:reset 0:start * @note bit[6] Sleep function 1:sleep 0:active * @note bit[5] Sleep monitor * @note bit[4] (reserved) * @note bit[3] Gain 1:High Gain 0:Low Gain * @note bit[2] Integration mode 1:manual 0:fixed * @note bit[1:0] Integration time * @note (00)87.5us (01)1.4ms (10)22.4ms (11)179.2ms * */ uint8_t getControl(void) ; /** * Set value to the Control Register * @param ctrlValue value to assing to the Control Register at address 0x00 */ void setControl(uint8_t ctrlValue) ; /** * Get value of the Manual Timing Register at address 0x01-0x02 * @returns 16bit value of Manual Timing Register * @note This value matters only in Manual Mode (bit[2] == 1) * @note In manual mode the integration time is * @note length specified by bit[1:0] of Control Register (address 0x00) * @note multiplied by the value of address 0x01-0x02 * @note if the value of 0x01-0x02 is N * @note and according to the bit[1:0] of Control Register * @note Integration time length is calculated as * @note (00) 175 * N us * @note (01) 2.8 * N ms * @note (10) 44.8 * N ms * @note (11) 358.4 * N ms */ uint16_t getTiming(void) ; /** * Set value to the Manual Timing Register at address 0x01-0x02 * @param timingValue 16bit timing value MSB to 0x01 LSB to 0x02 */ void setTiming(uint16_t timingValue) ; /** * Set/clear ADC Reset bit in the Control Register * @param mode 1:reset 0:start */ void setADCReset(int mode) ; /** * Get value of the ADC Reset bit (bit[7]) in the Control Register * @returns the ADC Reset bit (bit[7]) */ int getADCReset(void) ; /** * Set value to the sleep function bit (bit[6]) in the Control Register * @param mode bit value 1:sleep 0:active */ void setSleepMode(int mode) ; /** * Get value of the sleep function bit (bit[6]) in the Control Register * @returns bit value of sleep function bit (bit[6]) */ int getSleepMode(void) ; /** * Set value to the gain bit (bit[3]) in the Control Register * @param mode bit value to assign 1:High Gain 0:Low Gain */ void setGain(int mode) ; /** * Get value of the gain bit (bit[3]) in the Control Register * @returns the bit value of gain bit (bit[3]) */ int getGain(void) ; /** * Set value to Integration mode bit (bit[2]) of the Control Register * @param mode bit value to assign 1:Manual Mode 0:Fixed Time Mode */ void setIntegralMode(int mode) ; /** * Get value of Integration mode bit (bit[2]) of the Control Register * @returns the bit value of Integration mode bit (bit[2]) */ int getIntegralMode(void) ; private: I2C m_i2c; int m_addr; void readRegs(int addr, uint8_t * data, int len); void writeRegs(uint8_t * data, int len); } ; #endif /* _S11059_H_ */