我想用紅寶石對串口做一個簡單的讀寫操作。用串口讀取紅寶石
這是我到目前爲止的代碼。我正在使用serialport
寶石。
require 'rubygems'
require 'serialport'
ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)
ser.write "ab\r\n"
puts ser.read
但腳本在運行時會掛起。
我想用紅寶石對串口做一個簡單的讀寫操作。用串口讀取紅寶石
這是我到目前爲止的代碼。我正在使用serialport
寶石。
require 'rubygems'
require 'serialport'
ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)
ser.write "ab\r\n"
puts ser.read
但腳本在運行時會掛起。
也許您的設備正在等待一些輸入。檢查這個答案,看看它是否有幫助:https://stackoverflow.com/a/10534407/1006863
我有問題。這是因爲使用ser.read會告訴Ruby永遠繼續閱讀,而Ruby從不停止閱讀並掛起腳本。解決方案是隻讀取特定數量的字符。
因此,例如:
ser.readline(5)
爲了呼應什麼user968243所說,ser.read通話將要等待EOF。如果您的設備沒有發送EOF,您將永遠等待。建議您只能讀取一定數量的字符。
您的設備可能會以行尾字符結束每個響應。嘗試閱讀到下一個回車:
response = ser.readline("\r")
response.chomp!
print "#{response}\n"
我遇到了同樣的問題,並找到了解決方案。使用Ruby IO方法readlines。
puts ser.readlines
嘗試設置串口的#read_timeout值。請注意,對於使用#write_timeout值的寫入操作,也可以做同樣的事情。
它掛在哪裏? – sml 2011-06-15 14:26:13
@psp 您是否找到了解決方案? – RomanKapitonov 2012-04-15 11:11:47
並閱讀後,是不是有必要關閉? – andrea 2014-02-02 21:47:28