用 Ruby 从串口读取数据

10

我正在尝试使用Ruby对串口进行简单的读写操作。

以下是我目前拥有的代码。我使用了 serialport gem。

require 'rubygems'
require 'serialport'

ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)

ser.write "ab\r\n"
puts ser.read

但是当运行该脚本时,它会卡住。


@psp 你找到解决方案了吗? - roman
读取后,是否需要关闭? - andrea
5个回答

9

我也遇到了这个问题。问题出在使用ser.read命令,它告诉Ruby一直读取并因此使脚本挂起。解决方法是只读取特定数量的字符。

例如:

ser.readline(5)

5

回应用户user968243的话,ser.read调用会一直等待EOF。如果您的设备没有发送EOF,则会永远等待。建议您只读取一定数量的字符。

您的设备可能会在每个响应结束时添加换行符。请尝试读取到下一个回车符:

response = ser.readline("\r")
response.chomp!
print "#{response}\n"

2

我遇到了同样的问题并找到了解决方法。使用Ruby IO方法readlines。

puts ser.readlines

1

1
尝试设置串行端口的#read_timeout值。请注意,使用#write_timeout值可以对写操作执行相同的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接