diff options
Diffstat (limited to 'veml6075.lua')
-rw-r--r-- | veml6075.lua | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/veml6075.lua b/veml6075.lua new file mode 100644 index 0000000..6f5e19f --- /dev/null +++ b/veml6075.lua @@ -0,0 +1,48 @@ +local veml6075 = {} +local device_address = 0x10 + +function veml6075.start() + i2c.start(0) + if not i2c.address(0, device_address, i2c.TRANSMITTER) then + return false + end + i2c.write(0, {0x00, 0x00}) + i2c.stop(0) + return true +end + +function veml6075.read_reg(reg) + i2c.start(0) + if not i2c.address(0, device_address, i2c.TRANSMITTER) then + return + end + i2c.write(0, reg) + i2c.start(0) + if not i2c.address(0, device_address, i2c.RECEIVER) then + return + end + local data = i2c.read(0, 2) + i2c.stop(0) + return string.byte(data, 2) * 256 + string.byte(data, 1) +end + +function veml6075.read() + local uva = veml6075.read_reg(0x07) + local uvb = veml6075.read_reg(0x09) + local cvi = veml6075.read_reg(0x0a) + local cir = veml6075.read_reg(0x0b) + + if uva == nil or uvb == nil or cvi == nil or cir == nil then + return + end + + local uva_c = uva - 2.22 * cvi - 1.33 * cir + local uvb_c = uvb - 2.95 * cvi - 1.74 * cir + veml6075.uva = uva_c * 0.93 + veml6075.uvb = uvb_c * 2.1 + veml6075.uva_i = uva_c * 0.001461 + veml6075.uvb_i = uvb_c * 0.002591 + return true +end + +return veml6075 |