-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathsi1145.py
More file actions
54 lines (54 loc) · 1.7 KB
/
si1145.py
File metadata and controls
54 lines (54 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from microbit import i2c,sleep
class SI1145:
def __init__(self):
self._reset()
self._load_calibration()
def _reset(self):
i2c.write(0x60,b'\x08\x00')
i2c.write(0x60,b'\x09\x00')
i2c.write(0x60,b'\x04\x00')
i2c.write(0x60,b'\x05\x00')
i2c.write(0x60,b'\x06\x00')
i2c.write(0x60,b'\x03\x00')
i2c.write(0x60,b'\x21\xFF')
i2c.write(0x60,b'\x18\x01')
sleep(10)
i2c.write(0x60,b'\x07\x17')
sleep(10)
def writeParam(self,p,v):
i2c.write(0x60,bytearray([0x17,v]))
i2c.write(0x60,bytearray([0x18,p|0xA0]))
return i2c.read(0x60, 0x2E)
def _load_calibration(self):
i2c.write(0x60,b'\x13\x29')
i2c.write(0x60,b'\x14\x89')
i2c.write(0x60,b'\x15\x02')
i2c.write(0x60,b'\x16\x00')
self.writeParam(0x01,0x80|0x20|0X10|0x01)
i2c.write(0x60,b'\x03\x01')
i2c.write(0x60,b'\x04\x01')
i2c.write(0x60,b'\x0F\x03')
self.writeParam(0x07,0x03)
self.writeParam(0x02,0X01)
self.writeParam(0x0B,0)
self.writeParam(0x0A,0x70)
self.writeParam(0x0C,0x20|0x04)
self.writeParam(0x0E,0x00)
self.writeParam(0x1E,0)
self.writeParam(0x1D,0x70)
self.writeParam(0x1F,0x20)
self.writeParam(0x11,0)
self.writeParam(0x10,0x70)
self.writeParam(0x12,0x20)
i2c.write(0x60,b'\x08\xFF')
i2c.write(0x60,b'\x18\x0F')
def read16(self,reg,l=True):
i2c.write(0x60,bytearray([reg]))
d=i2c.read(0x60,2)
if l:d=((d[1]<<8)|(d[0]&0xFF))
else:d=((d[0]<<8)|(d[1]&0xFF))
return d
def readUV(self):return self.read16(0x2C)
def readVisible(self):return self.read16(0x22)
def readIR(self):return self.read16(0x24)
def readProx(self):return self.read16(0x26)