Skip to content

Commit 2f26726

Browse files
kai-morichliske
authored andcommitted
new readLight(), faster read...Light(), new setLightIntegrationTime() functions
1 parent 7bb75a5 commit 2f26726

1 file changed

Lines changed: 26 additions & 20 deletions

File tree

apds9960/device.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -240,46 +240,52 @@ def isLightAvailable(self):
240240

241241
return (val == APDS9960_BIT_AVALID)
242242

243+
# read R/G/B/C light levels as a tuple of 4 16-bit values
244+
def readLight(self):
245+
# read all 4 channels at once from consecutive registers
246+
data = self._read_i2c_block_data(APDS9960_REG_CDATAL, 8)
247+
248+
return (data[2] | data[3] << 8,
249+
data[4] | data[5] << 8,
250+
data[6] | data[7] << 8,
251+
data[0] | data[1] << 8)
252+
243253
# reads the ambient (clear) light level as a 16-bit value
244254
def readAmbientLight(self):
245-
# read value from clear channel, low byte register
246-
l = self._read_byte_data(APDS9960_REG_CDATAL)
247-
248-
# read value from clear channel, high byte register
249-
h = self._read_byte_data(APDS9960_REG_CDATAH)
255+
# read value from clear channel, low byte register first
256+
l, h = self._read_i2c_block_data(APDS9960_REG_CDATAL, 2)
250257

251258
return l + (h << 8)
252259

253260
# reads the red light level as a 16-bit value
254261
def readRedLight(self):
255-
# read value from red channel, low byte register
256-
l = self._read_byte_data(APDS9960_REG_RDATAL)
257-
258-
# read value from red channel, high byte register
259-
h = self._read_byte_data(APDS9960_REG_RDATAH)
262+
# read value from red channel, low byte register first
263+
l, h = self._read_i2c_block_data(APDS9960_REG_RDATAL, 2)
260264

261265
return l + (h << 8)
262266

263267
# reads the green light level as a 16-bit value
264268
def readGreenLight(self):
265-
# read value from green channel, low byte register
266-
l = self._read_byte_data(APDS9960_REG_GDATAL)
267-
268-
# read value from green channel, high byte register
269-
h = self._read_byte_data(APDS9960_REG_GDATAH)
269+
# read value from green channel, low byte register first
270+
l, h = self._read_i2c_block_data(APDS9960_REG_GDATAL, 2)
270271

271272
return l + (h << 8)
272273

273274
# reads the blue light level as a 16-bit value
274275
def readBlueLight(self):
275-
# read value from blue channel, low byte register
276-
l = self._read_byte_data(APDS9960_REG_BDATAL)
277-
278-
# read value from blue channel, high byte register
279-
h = self._read_byte_data(APDS9960_REG_BDATAH)
276+
# read value from blue channel, low byte register first
277+
l, h = self._read_i2c_block_data(APDS9960_REG_BDATAL, 2)
280278

281279
return l + (h << 8)
282280

281+
# set the integration time for the light sensor to nearest multiple of 2.78ms
282+
def setLightIntegrationTime(self, time):
283+
v = 256 - round(time / 2.78)
284+
if v > 255:
285+
raise ValueError("Integration time too short")
286+
if v < 0:
287+
raise ValueError("Integration time too long")
288+
self._write_byte_data(APDS9960_REG_ATIME, v)
283289

284290
# *******************************************************************************
285291
# Proximity sensor controls

0 commit comments

Comments
 (0)