我正在尝试使用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
但是脚本在运行时会挂起。
答案 0 :(得分:9)
我遇到了问题。这是因为使用ser.read告诉Ruby永远继续阅读,Ruby永远不会停止阅读,从而挂起脚本。解决方案是只读取特定数量的字符。
例如:
ser.readline(5)
答案 1 :(得分:4)
要回应user968243所说的内容,该ser.read呼叫将等待EOF。如果您的设备没有发送EOF,您将永远等待。您只能按照建议阅读一定数量的字符。
您的设备可能会以一行结束字符结束每个回复。尝试阅读下一个回车:
response = ser.readline("\r")
response.chomp!
print "#{response}\n"
答案 2 :(得分:2)
我遇到了同样的问题并找到了解决方案。使用Ruby IO方法readlines。
puts ser.readlines
答案 3 :(得分:1)
也许你的设备正在等待一些输入。检查此答案,看看是否有帮助:https://stackoverflow.com/a/10534407/1006863
答案 4 :(得分:1)
尝试设置串口的#read_timeout值。请注意,使用#write_timeout值可以对写入操作执行相同的操作。