2011-06-15 31 views
10

我想用紅寶石對串口做一個簡單的讀寫操作。用串口讀取紅寶石

這是我到目前爲止的代碼。我正在使用serialport寶石。

require 'rubygems' 
require 'serialport' 

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

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

但腳本在運行時會掛起。

+0

它掛在哪裏? – sml 2011-06-15 14:26:13

+0

@psp 您是否找到了解決方案? – RomanKapitonov 2012-04-15 11:11:47

+0

並閱讀後,是不是有必要關閉? – andrea 2014-02-02 21:47:28

回答

9

我有問題。這是因爲使用ser.read會告訴Ruby永遠繼續閱讀,而Ruby從不停止閱讀並掛起腳本。解決方案是隻讀取特定數量的字符。

因此,例如:

ser.readline(5) 
3

爲了呼應什麼user968243所說,ser.read通話將要等待EOF。如果您的設備沒有發送EOF,您將永遠等待。建議您只能讀取一定數量的字符。

您的設備可能會以行尾字符結束每個響應。嘗試閱讀到下一個回車:

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

我遇到了同樣的問題,並找到了解決方案。使用Ruby IO方法readlines。

puts ser.readlines 
1

嘗試設置串口的#read_timeout值。請注意,對於使用#write_timeout值的寫入操作,也可以做同樣的事情。