Vishay UV Sensor I2C library

Dependents:   test_VEML6075 quattro_vishay_6075_171018 testSensor

Committer:
Rhyme
Date:
Fri Feb 24 04:23:42 2017 +0000
Revision:
1:8bc12629d49b
Parent:
0:14ccc7ed49fa
Child:
2:0f3bb80aba40
duplicated definition were given unique definition names

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shockey 0:14ccc7ed49fa 1 /*
shockey 0:14ccc7ed49fa 2 * File description here
shockey 0:14ccc7ed49fa 3 */
shockey 0:14ccc7ed49fa 4 #include "VEML6075.h"
shockey 0:14ccc7ed49fa 5
shockey 0:14ccc7ed49fa 6 /* VEML6075 SLAVE ADDRESS AND FUNCTION DESCRIPTION */
shockey 0:14ccc7ed49fa 7 #define REG_UV_CONF 0x00
Rhyme 1:8bc12629d49b 8 #define REG_Reserved01 0x01
Rhyme 1:8bc12629d49b 9 #define REG_Reserved02 0x02
Rhyme 1:8bc12629d49b 10 #define REG_Reserved03 0x03
Rhyme 1:8bc12629d49b 11 #define REG_Reserved04 0x04
Rhyme 1:8bc12629d49b 12 #define REG_Reserved05 0x05
Rhyme 1:8bc12629d49b 13 #define REG_Reserved06 0x06
shockey 0:14ccc7ed49fa 14 #define REG_UVA_Data 0x07
shockey 0:14ccc7ed49fa 15 #define REG_UVD_Data 0x08
shockey 0:14ccc7ed49fa 16 #define REG_UVB_Data 0x09
shockey 0:14ccc7ed49fa 17 #define REG_UVCOMP1_Data 0x0A
shockey 0:14ccc7ed49fa 18 #define REG_UVCOMP2_Data 0x0B
shockey 0:14ccc7ed49fa 19 #define REG_ID 0x0C
shockey 0:14ccc7ed49fa 20
shockey 0:14ccc7ed49fa 21 // Following magic numbers are from
shockey 0:14ccc7ed49fa 22 // VISHAY veml6075 Application Note 84339
shockey 0:14ccc7ed49fa 23 // Page 6
shockey 0:14ccc7ed49fa 24 #define UVA_A_COEF (2.5)
shockey 0:14ccc7ed49fa 25 #define UVA_B_COEF (2.5)
shockey 0:14ccc7ed49fa 26 #define UVB_C_COEF (2.75)
shockey 0:14ccc7ed49fa 27 #define UVB_D_COEF (2.75)
shockey 0:14ccc7ed49fa 28 #define UVA_sensitivity (0.93)
shockey 0:14ccc7ed49fa 29 #define UVA_CIE_sensitivity (0.093)
shockey 0:14ccc7ed49fa 30 #define UVB_sensitivity (2.1)
shockey 0:14ccc7ed49fa 31 #define UVB_CIE_sensitivity (0.21)
shockey 0:14ccc7ed49fa 32 #define UVA_RESPONSIVITY (0.0011)
shockey 0:14ccc7ed49fa 33 #define UVB_RESPONSIVITY (0.00125)
shockey 0:14ccc7ed49fa 34
shockey 0:14ccc7ed49fa 35 VEML6075::VEML6075(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
shockey 0:14ccc7ed49fa 36 // activate the peripheral
shockey 0:14ccc7ed49fa 37 }
shockey 0:14ccc7ed49fa 38
shockey 0:14ccc7ed49fa 39 VEML6075::~VEML6075() { }
shockey 0:14ccc7ed49fa 40
shockey 0:14ccc7ed49fa 41 #if 0
shockey 0:14ccc7ed49fa 42 //
shockey 0:14ccc7ed49fa 43 // numdata is supposed to be 2
shockey 0:14ccc7ed49fa 44 //
shockey 0:14ccc7ed49fa 45 void VEML6075::cmdWrite(uint8_t cmd, uint8_t *data, uint8_t numdata)
shockey 0:14ccc7ed49fa 46 {
shockey 0:14ccc7ed49fa 47 uint8_t buf[3] ;
shockey 0:14ccc7ed49fa 48
shockey 0:14ccc7ed49fa 49 buf[0] = cmd ;
shockey 0:14ccc7ed49fa 50 buf[1] = data[0] ;
shockey 0:14ccc7ed49fa 51 buf[2] = data[1] ;
shockey 0:14ccc7ed49fa 52 writeRegs(data, 3) ;
shockey 0:14ccc7ed49fa 53 }
shockey 0:14ccc7ed49fa 54
shockey 0:14ccc7ed49fa 55 //
shockey 0:14ccc7ed49fa 56 // numdata is supposed to be 2
shockey 0:14ccc7ed49fa 57 //
shockey 0:14ccc7ed49fa 58
shockey 0:14ccc7ed49fa 59 void VEML6075::cmdRead(uint8_t cmd, uint8_t *data, uint8_t numdata)
shockey 0:14ccc7ed49fa 60 {
shockey 0:14ccc7ed49fa 61 uint8_t buf[1] ;
shockey 0:14ccc7ed49fa 62 buf[0] = cmd ;
shockey 0:14ccc7ed49fa 63 m_i2c.write(m_addr, buf, 1, true) ; // writing command
shockey 0:14ccc7ed49fa 64 m_i2c.read(m_addr, (char*)data, numdata) ;
shockey 0:14ccc7ed49fa 65 }
shockey 0:14ccc7ed49fa 66 #endif
shockey 0:14ccc7ed49fa 67
shockey 0:14ccc7ed49fa 68 void VEML6075::getUVConf(uint8_t *uvconf)
shockey 0:14ccc7ed49fa 69 {
shockey 0:14ccc7ed49fa 70 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 71 readRegs(REG_UV_CONF, data, 2) ;
shockey 0:14ccc7ed49fa 72 *uvconf = data[0] ;
shockey 0:14ccc7ed49fa 73 }
shockey 0:14ccc7ed49fa 74
shockey 0:14ccc7ed49fa 75 void VEML6075::setUVConf(uint8_t uvconf)
shockey 0:14ccc7ed49fa 76 {
shockey 0:14ccc7ed49fa 77 uint8_t data[3] ;
shockey 0:14ccc7ed49fa 78 data[0] = REG_UV_CONF ;
shockey 0:14ccc7ed49fa 79 data[1] = uvconf ;
shockey 0:14ccc7ed49fa 80 data[2] = 0 ;
shockey 0:14ccc7ed49fa 81 writeRegs(data, 3) ;
shockey 0:14ccc7ed49fa 82 }
shockey 0:14ccc7ed49fa 83
shockey 0:14ccc7ed49fa 84
shockey 0:14ccc7ed49fa 85 void VEML6075::getUVAData(uint16_t *uvadata)
shockey 0:14ccc7ed49fa 86 {
shockey 0:14ccc7ed49fa 87 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 88 readRegs(REG_UVA_Data, data, 2) ;
shockey 0:14ccc7ed49fa 89 *uvadata = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 90 }
shockey 0:14ccc7ed49fa 91
shockey 0:14ccc7ed49fa 92 void VEML6075::getUVBData(uint16_t *uvbdata)
shockey 0:14ccc7ed49fa 93 {
shockey 0:14ccc7ed49fa 94 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 95 readRegs(REG_UVB_Data, data, 2) ;
shockey 0:14ccc7ed49fa 96 *uvbdata = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 97 }
shockey 0:14ccc7ed49fa 98
shockey 0:14ccc7ed49fa 99 void VEML6075::getUVDData(uint16_t *uvddata)
shockey 0:14ccc7ed49fa 100 {
shockey 0:14ccc7ed49fa 101 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 102 readRegs(REG_UVD_Data, data, 2) ;
shockey 0:14ccc7ed49fa 103 *uvddata = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 104 }
shockey 0:14ccc7ed49fa 105
shockey 0:14ccc7ed49fa 106 float VEML6075::UVI(void)
shockey 0:14ccc7ed49fa 107 {
shockey 0:14ccc7ed49fa 108 float uvi = 0.0 ;
shockey 0:14ccc7ed49fa 109 uint16_t uvacomp = 0.0 ;
shockey 0:14ccc7ed49fa 110 uint16_t uvbcomp = 0.0 ;
shockey 0:14ccc7ed49fa 111 uint16_t uva, uvb, uvd, uvcomp1, uvcomp2 ;
shockey 0:14ccc7ed49fa 112 getUVAData(&uva) ;
shockey 0:14ccc7ed49fa 113 getUVBData(&uvb) ;
shockey 0:14ccc7ed49fa 114 getUVDData(&uvd) ;
shockey 0:14ccc7ed49fa 115 getUVCOMP1Data(&uvcomp1) ;
shockey 0:14ccc7ed49fa 116 getUVCOMP2Data(&uvcomp2) ;
shockey 0:14ccc7ed49fa 117 uvacomp = (uva - uvd) - UVA_A_COEF * (uvcomp1 - uvd) - UVA_B_COEF * (uvcomp2 - uvd) ;
shockey 0:14ccc7ed49fa 118 uvbcomp = (uvb - uvd) - UVB_C_COEF * (uvcomp1 - uvd) - UVB_D_COEF * (uvcomp2 - uvd) ;
shockey 0:14ccc7ed49fa 119 // uvi = (((float)uvbcomp * (float)UVB_RESPONSIVITY) + ((float)uvacomp * (float)UVA_RESPONSIVITY)) / 2.0 * 15 ; // For demo
shockey 0:14ccc7ed49fa 120 uvi = (((float)uvbcomp * (float)UVB_RESPONSIVITY) + ((float)uvacomp * (float)UVA_RESPONSIVITY)) / 2.0 ;
shockey 0:14ccc7ed49fa 121 return( uvi ) ;
shockey 0:14ccc7ed49fa 122 }
shockey 0:14ccc7ed49fa 123
shockey 0:14ccc7ed49fa 124 // usage
shockey 0:14ccc7ed49fa 125 // fvalue = veml->getUVA() ;
shockey 0:14ccc7ed49fa 126 // printf("%f", fvalue) ;
shockey 0:14ccc7ed49fa 127 float VEML6075::getUVA(void)
shockey 0:14ccc7ed49fa 128 {
shockey 0:14ccc7ed49fa 129 uint16_t data ;
shockey 0:14ccc7ed49fa 130 float value ;
shockey 0:14ccc7ed49fa 131 getUVAData(&data) ;
shockey 0:14ccc7ed49fa 132 value = (float)data / (float)UVA_sensitivity ;
shockey 0:14ccc7ed49fa 133 return( value ) ;
shockey 0:14ccc7ed49fa 134 }
shockey 0:14ccc7ed49fa 135
shockey 0:14ccc7ed49fa 136 float VEML6075::getUVA_CIE(void)
shockey 0:14ccc7ed49fa 137 {
shockey 0:14ccc7ed49fa 138 uint16_t data ;
shockey 0:14ccc7ed49fa 139 float value ;
shockey 0:14ccc7ed49fa 140 getUVAData(&data) ;
shockey 0:14ccc7ed49fa 141 value = (float)data / (float)UVA_CIE_sensitivity ;
shockey 0:14ccc7ed49fa 142 return( value ) ;
shockey 0:14ccc7ed49fa 143 }
shockey 0:14ccc7ed49fa 144
shockey 0:14ccc7ed49fa 145 float VEML6075::getUVB(void)
shockey 0:14ccc7ed49fa 146 {
shockey 0:14ccc7ed49fa 147 uint16_t data ;
shockey 0:14ccc7ed49fa 148 float value ;
shockey 0:14ccc7ed49fa 149 getUVBData(&data) ;
shockey 0:14ccc7ed49fa 150 value = (float)data / (float)UVB_sensitivity ;
shockey 0:14ccc7ed49fa 151 return( value ) ;
shockey 0:14ccc7ed49fa 152 }
shockey 0:14ccc7ed49fa 153
shockey 0:14ccc7ed49fa 154 float VEML6075::getUVB_CIE(void)
shockey 0:14ccc7ed49fa 155 {
shockey 0:14ccc7ed49fa 156 uint16_t data ;
shockey 0:14ccc7ed49fa 157 float value ;
shockey 0:14ccc7ed49fa 158 getUVBData(&data) ;
shockey 0:14ccc7ed49fa 159 value = (float)data / (float)UVB_CIE_sensitivity ;
shockey 0:14ccc7ed49fa 160 return( value ) ;
shockey 0:14ccc7ed49fa 161 }
shockey 0:14ccc7ed49fa 162
shockey 0:14ccc7ed49fa 163 void VEML6075::getUVCOMP1Data(uint16_t *uvcomp1data)
shockey 0:14ccc7ed49fa 164 {
shockey 0:14ccc7ed49fa 165 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 166 readRegs(REG_UVCOMP1_Data, data, 2) ;
shockey 0:14ccc7ed49fa 167 *uvcomp1data = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 168 }
shockey 0:14ccc7ed49fa 169
shockey 0:14ccc7ed49fa 170 void VEML6075::getUVCOMP2Data(uint16_t *uvcomp2data)
shockey 0:14ccc7ed49fa 171 {
shockey 0:14ccc7ed49fa 172 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 173 readRegs(REG_UVCOMP2_Data, data, 2) ;
shockey 0:14ccc7ed49fa 174 *uvcomp2data = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 175 }
shockey 0:14ccc7ed49fa 176
shockey 0:14ccc7ed49fa 177 void VEML6075::getID(uint16_t *id)
shockey 0:14ccc7ed49fa 178 {
shockey 0:14ccc7ed49fa 179 uint8_t data[2] ;
shockey 0:14ccc7ed49fa 180 readRegs(REG_ID, data, 2) ;
shockey 0:14ccc7ed49fa 181 *id = (data[1]<<8) | data[0] ;
shockey 0:14ccc7ed49fa 182 }
shockey 0:14ccc7ed49fa 183
shockey 0:14ccc7ed49fa 184 void VEML6075::readRegs(int addr, uint8_t * data, int len) {
shockey 0:14ccc7ed49fa 185 char t[1] = {addr};
shockey 0:14ccc7ed49fa 186 m_i2c.write(m_addr, t, 1, true);
shockey 0:14ccc7ed49fa 187 m_i2c.read(m_addr, (char *)data, len);
shockey 0:14ccc7ed49fa 188 }
shockey 0:14ccc7ed49fa 189
shockey 0:14ccc7ed49fa 190 void VEML6075::writeRegs(uint8_t * data, int len) {
shockey 0:14ccc7ed49fa 191 m_i2c.write(m_addr, (char *)data, len);
shockey 0:14ccc7ed49fa 192 }