diff --git a/boards/default_src/micropython/origin/build/lib/ltr381rgb.py b/boards/default_src/micropython/origin/build/lib/ltr381rgb.py index 4fc1d1da..c285235d 100644 --- a/boards/default_src/micropython/origin/build/lib/ltr381rgb.py +++ b/boards/default_src/micropython/origin/build/lib/ltr381rgb.py @@ -69,10 +69,10 @@ class LTR_381RGB: return round(self._als, 2), self._ir, self._color def color(self): - return self.getdata[2] + return self.getdata()[2] def ir(self): - return self.getdata[1] + return self.getdata()[1] def als(self): - return self.getdata[0] + return self.getdata()[0] diff --git a/boards/default_src/micropython/origin/build/lib/ucs12071.py b/boards/default_src/micropython/origin/build/lib/ucs12071.py new file mode 100644 index 00000000..ddca328d --- /dev/null +++ b/boards/default_src/micropython/origin/build/lib/ucs12071.py @@ -0,0 +1,78 @@ +""" +UCS12071 + +MicroPython library for the UCS12071 (Color sensor) +======================================================= +@dahanzimin From the Mixly Team +""" +import time +from micropython import const + +UCS_SYSM_CTRL = const(0x00) +UCS_INT_FLAG = const(0x02) +UCS_WAIT_TIME = const(0x03) +UCS_CLS_GAIN = const(0x04) +UCS_CLS_TIME = const(0x05) +UCS_CLS_DATA = const(0x1C) + +_GAINS_X = (1, 4, 8, 32, 96, 192) + +class UCS1207: + def __init__(self, i2c_bus, addr=0x38, gain=2): + self._device = i2c_bus + self._address = addr + self._gain = gain + self._color = [0, 0, 0] + self._ir = 0 + self._als = 0 + self._configure() + + 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 _configure(self): + '''Configuration Register''' + #self._wreg(UCS_SYSM_CTRL, 0x80) #Software reset + self._wreg(UCS_SYSM_CTRL, 0x03) #CLS & IR Enable + self._wreg(UCS_CLS_GAIN, 1 << self._gain | 0x80) #CLS sensing gain + self._wreg(UCS_CLS_TIME, 0x03) #CLSCONV INT_TIME + self._wreg(UCS_WAIT_TIME, 0x00) #10ms per time unit + + def status(self): + '''Data conversion status''' + return self._rreg(UCS_INT_FLAG) & 0x40 + + def getdata(self): + '''Processing data acquisition''' + if not self.status(): + _buf = self._rreg(UCS_CLS_DATA, 10) + self._color[0] = _buf[0] | _buf[1] << 8 + self._color[1] = _buf[2] | _buf[3] << 8 + self._color[2] = _buf[4] | _buf[5] << 8 + self._als = _buf[6] | _buf[7] << 8 + self._ir = _buf[8] | _buf[9] << 8 + return self._als, self._ir, self._color + + def color(self): + w, _, (r, g, b) = self.getdata() + if w == 0: + return (0, 0, 0) + else: + red = int(pow((int((r / w) * 256) / 255), 2.5) * 255) + green = int(pow((int((g / w) * 256) / 255), 2.5) * 255) + blue = int(pow((int((b / w) * 256) / 255), 2.5) * 255) + return (min(red, 255), min(green, 255), min(blue, 255)) + + def color_raw(self): + return self.getdata()[2] + + def ir(self): + return round(self.getdata()[1] / _GAINS_X[self._gain]) + + def als(self): + return round(self.getdata()[0] / _GAINS_X[self._gain])