/
lidar_lite.py
54 lines (44 loc) · 1.3 KB
/
lidar_lite.py
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
import smbus
import time
class Lidar_Lite():
def __init__(self):
self.address = 0x62
self.distWriteReg = 0x00
self.distWriteVal = 0x04
self.distReadReg1 = 0x8f
self.distReadReg2 = 0x10
self.velWriteReg = 0x04
self.velWriteVal = 0x08
self.velReadReg = 0x09
def connect(self, bus):
try:
self.bus = smbus.SMBus(bus)
time.sleep(0.5)
return 0
except:
return -1
def writeAndWait(self, register, value):
self.bus.write_byte_data(self.address, register, value);
time.sleep(0.02)
def readAndWait(self, register):
res = self.bus.read_byte_data(self.address, register)
time.sleep(0.02)
return res
def readDistAndWait(self, register):
res = self.bus.read_i2c_block_data(self.address, register, 2)
time.sleep(0.02)
return (res[0] << 8 | res[1])
def getDistance(self):
self.writeAndWait(self.distWriteReg, self.distWriteVal)
dist = self.readDistAndWait(self.distReadReg1)
return dist
def getVelocity(self):
self.writeAndWait(self.distWriteReg, self.distWriteVal)
self.writeAndWait(self.velWriteReg, self.velWriteVal)
vel = self.readAndWait(self.velReadReg)
return self.signedInt(vel)
def signedInt(self, value):
if value > 127:
return (256-value) * (-1)
else:
return value