Fix: 修复MicroPython MixGoAI和Microbit下一些py异常同时格式化代码
This commit is contained in:
@@ -1,64 +1,103 @@
|
||||
from microbit import *
|
||||
|
||||
class TCS34725():
|
||||
|
||||
TCS34725_ADDRESS = 0x29
|
||||
class TCS34725:
|
||||
|
||||
TCS34725_COMMAND_BIT = 0x80
|
||||
TCS34725_ADDRESS = 0x29
|
||||
|
||||
TCS34725_ENABLE = 0x00
|
||||
TCS34725_ENABLE_AIEN = 0x10 # RGBC Interrupt Enable
|
||||
TCS34725_ENABLE_WEN = 0x08 # Wait enable - Writing 1 activates the wait timer
|
||||
TCS34725_ENABLE_AEN = 0x02 # RGBC Enable - Writing 1 actives the ADC, 0 disables it
|
||||
TCS34725_ENABLE_PON = 0x01 # Power on - Writing 1 activates the internal oscillator, 0 disables it
|
||||
TCS34725_ATIME = 0x01 # Integration time
|
||||
TCS34725_WTIME = 0x03 # Wait time (if TCS34725_ENABLE_WEN is asserted
|
||||
TCS34725_WTIME_2_4MS = 0xFF # WLONG0 = 2.4ms WLONG1 = 0.029s
|
||||
TCS34725_WTIME_204MS = 0xAB # WLONG0 = 204ms WLONG1 = 2.45s
|
||||
TCS34725_WTIME_614MS = 0x00 # WLONG0 = 614ms WLONG1 = 7.4s
|
||||
TCS34725_AILTL = 0x04 # Clear channel lower interrupt threshold
|
||||
TCS34725_AILTH = 0x05
|
||||
TCS34725_AIHTL = 0x06 # Clear channel upper interrupt threshold
|
||||
TCS34725_AIHTH = 0x07
|
||||
TCS34725_PERS = 0x0C # Persistence register - basic SW filtering mechanism for interrupts
|
||||
TCS34725_PERS_NONE = 0b0000 # Every RGBC cycle generates an interrupt
|
||||
TCS34725_PERS_1_CYCLE = 0b0001 # 1 clean channel value outside threshold range generates an interrupt
|
||||
TCS34725_PERS_2_CYCLE = 0b0010 # 2 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_3_CYCLE = 0b0011 # 3 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_5_CYCLE = 0b0100 # 5 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_10_CYCLE = 0b0101 # 10 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_15_CYCLE = 0b0110 # 15 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_20_CYCLE = 0b0111 # 20 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_25_CYCLE = 0b1000 # 25 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_30_CYCLE = 0b1001 # 30 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_35_CYCLE = 0b1010 # 35 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_40_CYCLE = 0b1011 # 40 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_45_CYCLE = 0b1100 # 45 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_50_CYCLE = 0b1101 # 50 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_55_CYCLE = 0b1110 # 55 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_PERS_60_CYCLE = 0b1111 # 60 clean channel values outside threshold range generates an interrupt
|
||||
TCS34725_CONFIG = 0x0D
|
||||
TCS34725_CONFIG_WLONG = 0x02 # Choose between short and long (12x wait times via TCS34725_WTIME
|
||||
TCS34725_CONTROL = 0x0F # Set the gain level for the sensor
|
||||
TCS34725_ID = 0x12 # 0x44 = TCS34721/TCS34725, 0x4D = TCS34723/TCS34727
|
||||
TCS34725_STATUS = 0x13
|
||||
TCS34725_STATUS_AINT = 0x10 # RGBC Clean channel interrupt
|
||||
TCS34725_STATUS_AVALID = 0x01 # Indicates that the RGBC channels have completed an integration cycle
|
||||
TCS34725_CDATAL = 0x14 # Clear channel data
|
||||
TCS34725_CDATAH = 0x15
|
||||
TCS34725_RDATAL = 0x16 # Red channel data
|
||||
TCS34725_RDATAH = 0x17
|
||||
TCS34725_GDATAL = 0x18 # Green channel data
|
||||
TCS34725_GDATAH = 0x19
|
||||
TCS34725_BDATAL = 0x1A # Blue channel data
|
||||
TCS34725_BDATAH = 0x1B
|
||||
|
||||
# TCS34725_INTEGRATIONTIME_2_4MS = 0xFF, /**< 2.4ms - 1 cycle - Max Count: 1024
|
||||
# TCS34725_INTEGRATIONTIME_24MS = 0xF6, /**< 24ms - 10 cycles - Max Count: 10240
|
||||
# TCS34725_INTEGRATIONTIME_50MS = 0xEB, /**< 50ms - 20 cycles - Max Count: 20480
|
||||
# TCS34725_INTEGRATIONTIME_101MS = 0xD5, /**< 101ms - 42 cycles - Max Count: 43008
|
||||
# TCS34725_INTEGRATIONTIME_154MS = 0xC0, /**< 154ms - 64 cycles - Max Count: 65535
|
||||
# TCS34725_INTEGRATIONTIME_700MS = 0x00 /**< 700ms - 256 cycles - Max Count: 65535
|
||||
TCS34725_COMMAND_BIT = 0x80
|
||||
|
||||
TCS34725_ENABLE = 0x00
|
||||
TCS34725_ENABLE_AIEN = 0x10 # RGBC Interrupt Enable
|
||||
TCS34725_ENABLE_WEN = 0x08 # Wait enable - Writing 1 activates the wait timer
|
||||
TCS34725_ENABLE_AEN = 0x02 # RGBC Enable - Writing 1 actives the ADC, 0 disables it
|
||||
TCS34725_ENABLE_PON = (
|
||||
0x01 # Power on - Writing 1 activates the internal oscillator, 0 disables it
|
||||
)
|
||||
TCS34725_ATIME = 0x01 # Integration time
|
||||
TCS34725_WTIME = 0x03 # Wait time (if TCS34725_ENABLE_WEN is asserted
|
||||
TCS34725_WTIME_2_4MS = 0xFF # WLONG0 = 2.4ms WLONG1 = 0.029s
|
||||
TCS34725_WTIME_204MS = 0xAB # WLONG0 = 204ms WLONG1 = 2.45s
|
||||
TCS34725_WTIME_614MS = 0x00 # WLONG0 = 614ms WLONG1 = 7.4s
|
||||
TCS34725_AILTL = 0x04 # Clear channel lower interrupt threshold
|
||||
TCS34725_AILTH = 0x05
|
||||
TCS34725_AIHTL = 0x06 # Clear channel upper interrupt threshold
|
||||
TCS34725_AIHTH = 0x07
|
||||
TCS34725_PERS = (
|
||||
0x0C # Persistence register - basic SW filtering mechanism for interrupts
|
||||
)
|
||||
TCS34725_PERS_NONE = 0b0000 # Every RGBC cycle generates an interrupt
|
||||
TCS34725_PERS_1_CYCLE = (
|
||||
0b0001 # 1 clean channel value outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_2_CYCLE = (
|
||||
0b0010 # 2 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_3_CYCLE = (
|
||||
0b0011 # 3 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_5_CYCLE = (
|
||||
0b0100 # 5 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_10_CYCLE = (
|
||||
0b0101 # 10 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_15_CYCLE = (
|
||||
0b0110 # 15 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_20_CYCLE = (
|
||||
0b0111 # 20 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_25_CYCLE = (
|
||||
0b1000 # 25 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_30_CYCLE = (
|
||||
0b1001 # 30 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_35_CYCLE = (
|
||||
0b1010 # 35 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_40_CYCLE = (
|
||||
0b1011 # 40 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_45_CYCLE = (
|
||||
0b1100 # 45 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_50_CYCLE = (
|
||||
0b1101 # 50 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_55_CYCLE = (
|
||||
0b1110 # 55 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_PERS_60_CYCLE = (
|
||||
0b1111 # 60 clean channel values outside threshold range generates an interrupt
|
||||
)
|
||||
TCS34725_CONFIG = 0x0D
|
||||
TCS34725_CONFIG_WLONG = (
|
||||
0x02 # Choose between short and long (12x wait times via TCS34725_WTIME
|
||||
)
|
||||
TCS34725_CONTROL = 0x0F # Set the gain level for the sensor
|
||||
TCS34725_ID = 0x12 # 0x44 = TCS34721/TCS34725, 0x4D = TCS34723/TCS34727
|
||||
TCS34725_STATUS = 0x13
|
||||
TCS34725_STATUS_AINT = 0x10 # RGBC Clean channel interrupt
|
||||
TCS34725_STATUS_AVALID = (
|
||||
0x01 # Indicates that the RGBC channels have completed an integration cycle
|
||||
)
|
||||
TCS34725_CDATAL = 0x14 # Clear channel data
|
||||
TCS34725_CDATAH = 0x15
|
||||
TCS34725_RDATAL = 0x16 # Red channel data
|
||||
TCS34725_RDATAH = 0x17
|
||||
TCS34725_GDATAL = 0x18 # Green channel data
|
||||
TCS34725_GDATAH = 0x19
|
||||
TCS34725_BDATAL = 0x1A # Blue channel data
|
||||
TCS34725_BDATAH = 0x1B
|
||||
|
||||
# TCS34725_INTEGRATIONTIME_2_4MS = 0xFF, /**< 2.4ms - 1 cycle - Max Count: 1024
|
||||
# TCS34725_INTEGRATIONTIME_24MS = 0xF6, /**< 24ms - 10 cycles - Max Count: 10240
|
||||
# TCS34725_INTEGRATIONTIME_50MS = 0xEB, /**< 50ms - 20 cycles - Max Count: 20480
|
||||
# TCS34725_INTEGRATIONTIME_101MS = 0xD5, /**< 101ms - 42 cycles - Max Count: 43008
|
||||
# TCS34725_INTEGRATIONTIME_154MS = 0xC0, /**< 154ms - 64 cycles - Max Count: 65535
|
||||
# TCS34725_INTEGRATIONTIME_700MS = 0x00 /**< 700ms - 256 cycles - Max Count: 65535
|
||||
|
||||
_tcs34725Initialised = False
|
||||
_tcs34725Gain = 0
|
||||
@@ -66,57 +105,66 @@ class TCS34725():
|
||||
|
||||
def __init__(self, i2c):
|
||||
self.i2c = i2c
|
||||
#pass
|
||||
# pass
|
||||
|
||||
def write8(self, reg, val):
|
||||
self.i2c.write(self.TCS34725_ADDRESS, bytearray([self.TCS34725_COMMAND_BIT | reg, val & 0xFF]))
|
||||
self.i2c.write(
|
||||
self.TCS34725_ADDRESS,
|
||||
bytearray([self.TCS34725_COMMAND_BIT | reg, val & 0xFF]),
|
||||
)
|
||||
|
||||
def read16(self, reg):
|
||||
self.i2c.write(self.TCS34725_ADDRESS, bytearray([self.TCS34725_COMMAND_BIT | reg]))
|
||||
self.i2c.write(
|
||||
self.TCS34725_ADDRESS, bytearray([self.TCS34725_COMMAND_BIT | reg])
|
||||
)
|
||||
list_bytes = self.i2c.read(self.TCS34725_ADDRESS, 2)
|
||||
bytes = list_bytes[1]<<8 | list_bytes[0]
|
||||
#return [ hex(x) for x in bytes ][0]
|
||||
bytes = list_bytes[1] << 8 | list_bytes[0]
|
||||
# return [ hex(x) for x in bytes ][0]
|
||||
return bytes
|
||||
|
||||
|
||||
def read8(self, reg):
|
||||
self.i2c.write(self.TCS34725_ADDRESS, bytearray([self.TCS34725_COMMAND_BIT | reg]))
|
||||
self.i2c.write(
|
||||
self.TCS34725_ADDRESS, bytearray([self.TCS34725_COMMAND_BIT | reg])
|
||||
)
|
||||
return i2c.read(self.TCS34725_ADDRESS, 1)[0] - 0
|
||||
|
||||
def begin(self):
|
||||
x = self.read8(self.TCS34725_ID)
|
||||
#print(x)
|
||||
if x != 68: # code I was basing this on expects 0x44, not sure why. Got 0x12
|
||||
print('did not get the expected response from sensor: ', x)
|
||||
# print(x)
|
||||
if x != 68: # code I was basing this on expects 0x44, not sure why. Got 0x12
|
||||
print("did not get the expected response from sensor: ", x)
|
||||
return False
|
||||
self._tcs34725Initialised = True
|
||||
self.setIntegrationTime(self._tcs34725IntegrationTime)
|
||||
self.setGain(0)
|
||||
self.enable()
|
||||
return True
|
||||
|
||||
|
||||
def setIntegrationTime(self, theTime):
|
||||
if theTime not in [0xFF,0xF6,0xEB,0xD5,0xC0,0x00]:
|
||||
print('setting integration time to 0x00, %s is illegal' % theTime)
|
||||
if theTime not in [0xFF, 0xF6, 0xEB, 0xD5, 0xC0, 0x00]:
|
||||
print("setting integration time to 0x00, %s is illegal" % theTime)
|
||||
theTime = 0x00
|
||||
self.write8(self.TCS34725_ATIME, theTime)
|
||||
# self.i2c.write8(self.TCS34725_ATIME, theTime)
|
||||
self._tcs34725IntegrationTime = theTime
|
||||
|
||||
|
||||
def setGain(self, gain):
|
||||
# TCS34725_GAIN_1X = 0x00, /**< No gain
|
||||
# TCS34725_GAIN_4X = 0x01, /**< 2x gain
|
||||
# TCS34725_GAIN_16X = 0x02, /**< 16x gain
|
||||
# TCS34725_GAIN_60X = 0x03 /**< 60x gain
|
||||
if gain not in [0,1,2,3]:
|
||||
print('setting gain to 0, %s is illegal' % gain)
|
||||
# TCS34725_GAIN_1X = 0x00, /**< No gain
|
||||
# TCS34725_GAIN_4X = 0x01, /**< 2x gain
|
||||
# TCS34725_GAIN_16X = 0x02, /**< 16x gain
|
||||
# TCS34725_GAIN_60X = 0x03 /**< 60x gain
|
||||
if gain not in [0, 1, 2, 3]:
|
||||
print("setting gain to 0, %s is illegal" % gain)
|
||||
gain = 0
|
||||
self.write8(self.TCS34725_CONTROL, gain)
|
||||
self._tcs34725Gain = gain
|
||||
|
||||
|
||||
def enable(self):
|
||||
self.write8(self.TCS34725_ENABLE, self.TCS34725_ENABLE_PON)
|
||||
sleep(0.003)
|
||||
self.write8(self.TCS34725_ENABLE, (self.TCS34725_ENABLE_PON | self.TCS34725_ENABLE_AEN))
|
||||
self.write8(
|
||||
self.TCS34725_ENABLE, (self.TCS34725_ENABLE_PON | self.TCS34725_ENABLE_AEN)
|
||||
)
|
||||
|
||||
def getRawRGBData(self, type):
|
||||
if not self._tcs34725Initialised:
|
||||
@@ -145,4 +193,5 @@ class TCS34725():
|
||||
else:
|
||||
return b
|
||||
|
||||
tcs = TCS34725(i2c)
|
||||
|
||||
tcs = TCS34725(i2c)
|
||||
|
||||
Reference in New Issue
Block a user