Skip to content

Commit 08f2f85

Browse files
Adrian McEwenpeter-pycom
authored andcommitted
Add lux calculation to LTR329ALS sensor
1 parent 7b3fadc commit 08f2f85

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

shields/lib/LTR329ALS01.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ class LTR329ALS01:
2828
ALS_GAIN_8X = const(0x03)
2929
ALS_GAIN_48X = const(0x06)
3030
ALS_GAIN_96X = const(0x07)
31+
ALS_GAIN_VALUES = {
32+
ALS_GAIN_1X: 1,
33+
ALS_GAIN_2X: 2,
34+
ALS_GAIN_4X: 4,
35+
ALS_GAIN_8X: 8,
36+
ALS_GAIN_48X: 48,
37+
ALS_GAIN_96X: 96
38+
}
3139

3240
ALS_INT_50 = const(0x01)
3341
ALS_INT_100 = const(0x00)
@@ -37,6 +45,16 @@ class LTR329ALS01:
3745
ALS_INT_300 = const(0x06)
3846
ALS_INT_350 = const(0x07)
3947
ALS_INT_400 = const(0x03)
48+
ALS_INT_VALUES = {
49+
ALS_INT_50: 0.5,
50+
ALS_INT_100: 1,
51+
ALS_INT_150: 1.5,
52+
ALS_INT_200: 2,
53+
ALS_INT_250: 2.5,
54+
ALS_INT_300: 3,
55+
ALS_INT_350: 3.5,
56+
ALS_INT_400: 4
57+
}
4058

4159
ALS_RATE_50 = const(0x00)
4260
ALS_RATE_100 = const(0x01)
@@ -51,6 +69,9 @@ def __init__(self, pysense = None, sda = 'P22', scl = 'P21', gain = ALS_GAIN_1X,
5169
else:
5270
self.i2c = I2C(0, mode=I2C.MASTER, pins=(sda, scl))
5371

72+
self.gain = gain
73+
self.integration = integration
74+
5475
contr = self._getContr(gain)
5576
self.i2c.writeto_mem(ALS_I2CADDR, ALS_CONTR_REG, bytearray([contr]))
5677

@@ -78,3 +99,16 @@ def light(self):
7899
data0 = int(self._getWord(ch0high[0], ch0low[0]))
79100

80101
return (data0, data1)
102+
103+
def lux(self):
104+
# Calculate Lux value from formula in Appendix A of the datasheet
105+
light_level = self.light()
106+
ratio = light_level[1]/(light_level[0]+light_level[1])
107+
if ratio < 0.45:
108+
return (1.7743 * light_level[0] + 1.1059 * light_level[1]) / self.ALS_GAIN_VALUES[self.gain] / self.ALS_INT_VALUES[self.integration]
109+
elif ratio < 0.64 and ratio >= 0.45:
110+
return (4.2785 * light_level[0] - 1.9548 * light_level[1]) / self.ALS_GAIN_VALUES[self.gain] / self.ALS_INT_VALUES[self.integration]
111+
elif ratio < 0.85 and ratio >= 0.64:
112+
return (0.5926 * light_level[0] + 0.1185 * light_level[1]) / self.ALS_GAIN_VALUES[self.gain] / self.ALS_INT_VALUES[self.integration]
113+
else:
114+
return 0

0 commit comments

Comments
 (0)