Sto utilizzando la serialport
gem a leggere dalla porta seriale nel mio Ruby on Rails 3.2 dell'applicazione. La stessa porta seriale viene utilizzata per scrivere dati da una scheda Arduino. La gemma viene aggiunta a Gemfile
. La porta viene inizializzato in application.rb
:lettura dalla porta seriale in un'applicazione Ruby on Rails pende
config.serial_port = SerialPort.new "/devttyACM0", 9600
config.serial_port.read_timeout = 100
Il problema si presenta quando si tenta di leggere da questa porta.
@sp = ProjectName::Application::config.serial_port
@sp.read
L'applicazione è micidiale. Ho provato ad eseguire la lettura da una sessione pry
e tutto era OK. Se si imposta read_timeout
su 0
, la lettura da pry
si blocca anche. Ho già provato a impostare read_timeout
su valori più grandi senza risultati. Cosa dovrei fare per farlo funzionare?
Aggiornamento:
ho cercato di eseguire le stesse azioni con sinatra
framework. Si blocca anche.
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