9 测量范围:5-4000mm(可选择短、中、长测量模式)
10 单次测量:测量一次后需要重新发送单次输出距离数据指令
12 --注意:因使用了sys.wait()所有api需要在协程中使用
14 gy53l1=require"gy53l1"
16 sys.taskInit(function()
22 --设置模式,不设置为默认模式,设置模式要有一定的间隔时间
24 gy53l1.mode(uart2,gy53l1.measuring_short)
26 gy53l1.mode(uart2,gy53l1.measuring_time_1)
32 --gy53l1.mode(uart2,gy53l1.out_mode_query)
34 data,mode,time=gy53l1.get()
35 log.info('距离',data,'模式',mode,'时间',time)
43 local uart_recv_val
=""
67 -----------------------------------------------可选择测量模式---------------------------------------------------
69 --默认模式连续输出、中距离、测量时间110ms、波特率9600
72 gy53l1
.out_mode_coiled
=string.char(0xA5,0x45,0xEA) ---------------连续输出距离数据---1
73 --[[若设置为查询指令,则发一次指令测量一次]]
74 gy53l1
.out_mode_query
=string.char(0xA5,0x15,0xBA) ---------------单次输出距离数据---2
77 gy53l1
.save
=string.char(0xA5,0x25,0xCA) ---------------掉电保存当前配置;包括波特率(重新上电起效)、测量模
78 ---------------式、测量时间、输出模式设置
80 gy53l1
.measuring_short
=string.char(0xA5,0x51,0xF6) ---------------短距离测量模式---1
81 gy53l1
.measuring_middle
=string.char(0xA5,0x52,0xF7) ---------------中距离测量模式(默认)---2
82 gy53l1
.measuring_long
=string.char(0xA5,0x53,0xF8) ---------------长距离测量模式---3
84 gy53l1
.measuring_time_1
=string.char(0xA5,0x61,0x06) ---------------测量时间 110ms(默认)---1
85 gy53l1
.measuring_time_2
=string.char(0xA5,0x62,0x07) ---------------测量时间 200ms ---2
86 gy53l1
.measuring_time_3
=string.char(0xA5,0x63,0x08) ---------------测量时间 300ms ---3
87 gy53l1
.measuring_time_4
=string.char(0xA5,0x64,0x09) ---------------测量时间 55ms ---0
89 gy53l1
.ste_baut_1
=string.char(0xA5,0xAE,0x53) ---------------9600(默认)---1
90 gy53l1
.ste_baut_2
=string.char(0xA5,0xAF,0x54) ---------------115200---2
93 -- uart.write(2,measuring_short) 设置工作模式为短距离
94 -----------------------------------------------可选择测量模式---------------------------------------------------
97 参数:str 传入串口接收到的string类型的数据
100 local function data_dispose(str
)
101 recv_data
.head1
=string.byte(str
,1)
102 recv_data
.head2
=string.byte(str
,2)
103 recv_data
.type=string.byte(str
,3)
104 recv_data
.amount
=string.byte(str
,4)
105 recv_data
.hight
=string.byte(str
,5)
106 recv_data
.low
=string.byte(str
,6)
107 recv_data
.mode
=string.byte(str
,7)
108 recv_data
.check_sum
=string.byte(str
,8)
110 if recv_data
.head1
~= 0x5A then
115 local sum
=recv_data
.head1
+recv_data
.head2
+recv_data
.type+ recv_data
.amount
+recv_data
.hight
+recv_data
.low
+recv_data
.mode
117 if sum
==recv_data
.check_sum
then
119 range
=(recv_data
.hight
<<8)|recv_data
.low
120 --log.info("距离:mm",range,"测量模式:",recv_data.mode & 0x03,"测量时间:",(recv_data.mode>>2) & 0x03)
131 @return bool 成功返回true失败返回false
135 function gy53l1
.init(id
)
137 local uart_s
=uart
.setup(id
, 9600, 8, 1)
143 -- 收取数据会触发回调, 这里的"receive" 是固定值
144 uart
.on(id
, "receive", function(id
, len
)
147 -- s = uart.read(id, 1024)
148 s
= uart
.read(id
, len
)
149 if #s
> 0 then -- #s 是取字符串的长度
150 -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
151 -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
152 --log.info("uart", "receive", id, #s, s)
165 @api gy53l1.mode(id,mode)
168 @return bool 成功返回true失败返回false
170 gy53l1.mode(2,gy53l1.save)--掉电保存当前配置
171 gy53l1.mode(2,gy53l1.measuring_time_3)--测量时间 300ms
172 gy53l1.mode(2,gy53l1.measuring_long)--测量距离选择
174 function gy53l1
.mode(id
,mode
)
175 local ret_data
=uart
.write(id
,mode
)
176 if recv_data
~=0 then
186 @return number data 距离数据
187 @return number mode 当前测量模式
188 @return number time 当前测量时间
190 local data,mode,timer=gy53l1.get()
191 log.info("距离",data,"模式",mode,"时间",timer)
193 function gy53l1
.get()
194 local data
,mode
,time
= range
, recv_data
.mode
& 0x03 , (recv_data
.mode
>>2) & 0x03
195 return data
,mode
,time