例程讲解24-I2C_Lidar_Lite_V3_example_code I2C控制激光雷达

#  OpenMV M7 I2C接口与Garmin Lidar Lite V3 - By: Grant Phillips - 2018年4月8日


#  返回距激光雷达的目标点的基本距离(以厘米为单位),并打印到控制台
#  使用默认的激光雷达设置。有关更多高级设置,请参见手册中的I2C命令:
#  https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf

#  I2C Control of LIDAR Lite V3
#  1. 将0x04写入寄存器0x00
#  2. 读取寄存器0x01。重复直到位0(LSB)变为低电平。
#  3. 从0x8f读取两个字节(高字节0x0f,然后低字节0x10),以厘米为单位获得16位测量值

#  硬件连接:
#  连接激光雷达SCL线(绿色)到OpenMV上的I2C 2 SCL(引脚4)
#  连接激光雷达SDA线(蓝色)到OpenMV上的I2C 2 SDA (引脚5)
#  与激光雷达并联的680uF滤波电容器
#  SCL和SDA线路上的10k上拉电阻至+5Vdc


import pyb
from pyb import I2C


lidarReady = bytearray([0xff])          #  保存返回的数据以备随时检查
lidarReadyCheck = bytes([1])            #  比较lidarReady的第0位

startBuf = bytearray([0x00,0x04])       #  1.地址和数据
readyBuf = bytearray([0x01])            #  2.准备检查地址
distBuf = bytearray([0x8f])             #  3.距离读取地址
distance = -1                           #  距离读取变量

#  I2C设置
Lidar=I2C(2,I2C.MASTER)                 #  在主模式下初始化I2C 2总线


while(True):
    distance = -1                       #  重置为-1,这样我们就知道什么时候会得到真正的读数

    try:                                #  如果发生I2C错误,则处理抛出的错误
    #  步骤1将0x04写入寄存器0x00
        Lidar.send(startBuf,0x62)       #  这是读取(激光可见)

    #  步骤2读取寄存器0x01并等待位0变低
        while (lidarReady[0] & readyBuf[0]):
            Lidar.send(readyBuf,0x62)
            lidarReady=Lidar.recv(1,0x62)
            pyb.delay(50)               #  这似乎有助于减少I2C总线上的错误
        lidarReady=bytearray([0xff])    #  重新设置准备好的检查数据,以便下一次读取

    #  步骤3从0x8f(0x0f和0x10)读取距离测量值
        Lidar.send(distBuf,0x62)
        dist=Lidar.recv(2,0x62)
        distance=dist[0]
        distance<<=8                    #  将2个字节移动到16位int中
        distance|=dist[1]
        pyb.delay(100)                  #  两次读取之间的时间较短,可以更快但会出现更多错误

    except OSError:                     #  如果出现错误,重新初始化i2c总线
        Lidar.init(I2C.MASTER)
        print("error, reinitialising")

    if distance > -1:
        print("Distance:", distance, "cm")

results matching ""

    No results matching ""