@@ -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