summaryrefslogtreecommitdiff
path: root/veml6075.lua
blob: 6f5e19f58431fe156fb1cd41d3fe60c58f292e25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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