我正在使用serialport gem从我的Ruby on Rails 3.2应用程序中的串口读取.串行端口本身用于从Arduino板写入数据.宝石被添加到Gemfile.端口初始化为application.rb:
config.serial_port = SerialPort.new "/devttyACM0", 9600
config.serial_port.read_timeout = 100
Run Code Online (Sandbox Code Playgroud)
当我尝试从此端口读取时出现问题.
@sp = ProjectName::Application::config.serial_port
@sp.read
Run Code Online (Sandbox Code Playgroud)
该应用程序挂起致命.我试图从一个pry会话中执行阅读,一切都很好.如果我设置read_timeout到0,从阅读pry也挂起.我已经尝试设置read_timeout更大的值而没有结果.我该怎么做才能让它发挥作用?
更新:
我试图使用sinatra 框架执行相同的操作.它也挂了.
require "sinatra"
require "serialport"
get '/' do
read_data
end
helpers do
def read_data
sp = SerialPort.new "/dev/ttyACM0", 9600
sp.read_timeout = 1500
t = sp.read.match(/\d+(\n|\r)+/)[0].gsub!(/(\n|\r)*/,"") rescue nil
sp.close
t
end
end
Run Code Online (Sandbox Code Playgroud)