uart.read()返回的是string格式的数据。
想着将每个字节和0x80比较,大于的话,就自减0x80。
但是string类型是不能改变,那么只能新建个变量来赋值了。
但是luat没有数组这种类型,能用的估计就是string和table类型了。
用table类型估计不好再拼接成string然后再用串口发出去吧?
求个简单好用的方法。
离线
现在想这样该,串口一个字节一个字节的读取,然后判断该字节大小,或按位与0x7f。
现在问题是,uart.read()返回的是字符串类型。如何将这个字符串按数字处理?不能用tonumer()这样处理。
离线
用string.byte()可以将单个字符转换为number类型,然后判断其大小,再做处理。
现在想串口一次读多个字节的字符串,一次性处理。
打算
for i=1, i < #data then
data1 = string.byte(data, i, i)
if data1 > 127 then
data2 = data1 - 128
else
data2 = data1
end
end
这样来获得每个字符对应的数字进行处理,但是不知道该如何再组合成字符串进行发送。
--------------------------------------
目前这么处理的:
data = uart.read(1, "*l")
if not data or string.len(data) == 0 then
break
end
s = ""
for i = 1, #data do
data1 = string.byte(data, i, i)
if data1 > 127 then
data2 = data1 - 128
else
data2 = data1
end
s1 = string.char(data2)
s = s..s1
end
最近编辑记录 Gentlepig (2023-04-20 14:20:28)
离线
又遇到了个问题,串口接收是按上边那段程序处理的,大部分情况下正常。但是串口一次接收大量数据时,会将一帧数据分成2帧处理了。
我实际应用过程中,串口应该收到132字节数据,但是却分成了112字节和20字节两部分。很奇怪,每次收这组132字节时,都会从112字节处断开处理。
离线
7. 一次发送的数据模块分为2个包来接收;第一个64bytes,第二次26bytes
串口速度比主频慢很多,115200大概112K/s,模块主频有500MHz,所以接收的时候会分包。
在合宙官网找到这些内容。不太明白,为何模块主频高,所以串口接收会分包。不明白这里的因果关系...
离线