初始化提交
This commit is contained in:
78
boards/default_src/micropython/origin/build/lib/ltr381rgb.py
Normal file
78
boards/default_src/micropython/origin/build/lib/ltr381rgb.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
LTR-381RGB-XX
|
||||
|
||||
MicroPython library for the LTR-381RGB-XX (Color sensor)
|
||||
=======================================================
|
||||
|
||||
#Preliminary composition 20230417
|
||||
|
||||
@dahanzimin From the Mixly Team
|
||||
"""
|
||||
import time
|
||||
from micropython import const
|
||||
|
||||
LTR_MAIN_CTRL = const(0x00)
|
||||
LTR_ALS_CS_MEAS_RATE = const(0x04)
|
||||
LTR_ALS_CS_GAIN = const(0x05)
|
||||
LTR_PART_ID = const(0x06)
|
||||
LTR_MAIN_STATUS = const(0x07)
|
||||
LTR_CS_DATA = const(0x0A)
|
||||
#1x 3x 6x 9x 18x
|
||||
_GAINS_X = (1, 3, 6, 9, 18)
|
||||
|
||||
class LTR_381RGB:
|
||||
def __init__(self, i2c_bus, addr=0x53, gain=1):
|
||||
self._device = i2c_bus
|
||||
self._address = addr
|
||||
self._gain = gain
|
||||
self._color = [0, 0, 0]
|
||||
self._ir = 0
|
||||
self._als = 0
|
||||
|
||||
if (self._chip_id() & 0xF0) != 0xC0:
|
||||
raise AttributeError("Cannot find a LTR-381RGB")
|
||||
|
||||
self._configure()
|
||||
time.sleep(0.1)
|
||||
|
||||
def _wreg(self, reg, val):
|
||||
'''Write memory address'''
|
||||
self._device.writeto_mem(self._address,reg,val.to_bytes(1, 'little'))
|
||||
|
||||
def _rreg(self, reg, nbytes=1):
|
||||
'''Read memory address'''
|
||||
return self._device.readfrom_mem(self._address, reg, nbytes)[0] if nbytes<=1 else self._device.readfrom_mem(self._address, reg, nbytes)[0:nbytes]
|
||||
|
||||
def _chip_id(self):
|
||||
'''Proofreading device ID'''
|
||||
return self._rreg(LTR_PART_ID)
|
||||
|
||||
def _configure(self):
|
||||
'''Configuration Register'''
|
||||
self._wreg(LTR_MAIN_CTRL, 0x06) #CS mode & ALS/CS Enable
|
||||
self._wreg(LTR_ALS_CS_MEAS_RATE, 0x22) #Resolution = 18 bit, Meas Rate =100ms
|
||||
self._wreg(LTR_ALS_CS_GAIN, self._gain & 0x07) #CS measurement Gain Range
|
||||
|
||||
def status(self):
|
||||
'''Data conversion status'''
|
||||
return self._rreg(LTR_MAIN_STATUS) & 0x08
|
||||
|
||||
def getdata(self):
|
||||
'''Processing data acquisition'''
|
||||
if self.status():
|
||||
_buf=self._rreg(LTR_CS_DATA, 12)
|
||||
self._ir = _buf[2] << 16 | _buf[1] << 8 | _buf[0]
|
||||
self._color [1] = _buf[5] << 16 | _buf[4] << 8 | _buf[3]
|
||||
self._color [0] = _buf[8] << 16 | _buf[7] << 8 | _buf[6]
|
||||
self._color [2] = _buf[11] << 16 | _buf[10] << 8 | _buf[9]
|
||||
self._als = 0.8 * self._color [1] * (1 - 0.033 * self._ir / self._color [1]) / _GAINS_X[self._gain]
|
||||
return round(self._als, 2), self._ir, self._color
|
||||
|
||||
def color(self):
|
||||
return self.getdata[2]
|
||||
|
||||
def ir(self):
|
||||
return self.getdata[1]
|
||||
|
||||
def als(self):
|
||||
return self.getdata[0]
|
||||
Reference in New Issue
Block a user