2

我正在 Lua 中编写代码以从串行端口读取,但是当我读取时,我收到带有代码的回显:

print("Dragino Uart Test started\n")
while 1 do
    serialin=io.open("/dev/ttyS0","r")
    print(serialin:read())    --print the data
    serialin:close()
end

当我打开 minicom 向他发送一些数据时,我启用本地回显而不是输入“文本”,然后我看到:

texxtt

然后我需要按回车键在我的 lua 脚本中查看我的消息。

我在 Dragino 中使用 OpenWRT。

看起来它就像一个提示命令,你输入你看到的每一个东西,你需要按 enter 来向你发送命令。

还有其他方法可以读取/写入串行端口吗?

有人可以帮我吗?太感谢了!

4

2 回答 2

1

没有参数的read方法读取一整行。这就是为什么您需要在文本末尾按 Enter 键的原因。尝试一次读取一个字节:read(1)或使用:read("*a").

于 2013-03-29T11:04:34.583 回答
0

我不知道这对某人来说是否仍然是一个问题,但也许这对一些人有帮助。就像 lhf 说的 :read(1) 是这样做的好方法。我在 :read("*a") 上遇到了一些问题。在我看来,最简单的方法是逐个附加答案,例如:

rserial=io.open("/dev/ttyS0",'r')
lines = ""
repeat
    local line=rserial:read(1)
    if string.sub(line, 0, 3) == "OED" then  --OED is here the stream ending. This can vary
            EOD = true
            rserial:close()
    elseif line then
            lines = lines .. line 
    end
until EOD == true
print (lines)
于 2016-02-18T09:02:21.140 回答