_G='val' _F=b'\x00' _E='hue' _D=None _C='blue' _B='green' _A='red' from PiicoDev_Unified import * from math import sqrt _veml6040Address=16 _CONF=_F _REG_RED=8 _REG_GREEN=9 _REG_BLUE=10 _REG_WHITE=11 _DEFAULT_SETTINGS=_F _SHUTDOWN=b'\x01' _INTEGRATION_TIME=40 _G_SENSITIVITY=0.25168 _NaN=float('NaN') def rgb2hsv(r,g,b): r=float(r/65535);g=float(g/65535);b=float(b/65535);high=max(r,g,b);low=min(r,g,b);h,s,v=high,high,high;d=high-low;s=0 if high==0 else d/high if high==low:h=0.0 else:h={r:(g-b)/d+(6 if g=1:0 else:print(compat_str) except:print(compat_str) self.i2c=create_unified_i2c(bus=bus,freq=freq,sda=sda,scl=scl);self.addr=addr try:self.i2c.write8(self.addr,_CONF,_SHUTDOWN);self.i2c.write8(self.addr,_CONF,_DEFAULT_SETTINGS);sleep_ms(50) except Exception:print('Device 0x{:02X} not found'.format(self.addr)) def classifyHue(self,hues={_A:0,'yellow':60,_B:120,'cyan':180,_C:240,'magenta':300},min_brightness=0): d=self.readHSV() if d[_G]>min_brightness:key,val=min(hues.items(),key=lambda x:min(360-abs(d[_E]-x[1]),abs(d[_E]-x[1])));return key else:return'None' def readRGB(self): D='cct';C='als';B='white';A='little' try:raw_data=self.i2c.readfrom_mem(self.addr,_REG_RED,2);u16red=int.from_bytes(raw_data,A);raw_data=self.i2c.readfrom_mem(self.addr,_REG_GREEN,2);u16grn=int.from_bytes(raw_data,A);raw_data=self.i2c.readfrom_mem(self.addr,_REG_BLUE,2);u16blu=int.from_bytes(raw_data,A);raw_data=self.i2c.readfrom_mem(self.addr,_REG_WHITE,2);data_white_int=int.from_bytes(raw_data,A) except:print(i2c_err_str.format(self.addr));return{_A:_NaN,_B:_NaN,_C:_NaN,B:_NaN,C:_NaN,D:_NaN} colour_X=-0.023249*u16red+0.291014*u16grn+-0.36488*u16blu;colour_Y=-0.042799*u16red+0.272148*u16grn+-0.279591*u16blu;colour_Z=-0.155901*u16red+0.251534*u16grn+-0.07624*u16blu;colour_total=colour_X+colour_Y+colour_Z if colour_total==0:return{_A:_NaN,_B:_NaN,_C:_NaN,B:_NaN,C:_NaN,D:_NaN} else:colour_x=colour_X/colour_total;colour_y=colour_Y/colour_total colour_n=(colour_x-0.332)/(0.1858-colour_y);colour_CCT=449.0*colour_n**3+3525.0*colour_n**2+6823.3*colour_n+5520.33;colour_ALS=u16grn*_G_SENSITIVITY;return{_A:u16red,_B:u16grn,_C:u16blu,B:data_white_int,C:colour_ALS,D:colour_CCT} def readHSV(self):d=self.readRGB();return rgb2hsv(d[_A],d[_B],d[_C])