2012-04-15 14 views
5

मैं serialportgem का उपयोग कर रहा हूं ताकि रेल रुस 3.2 अनुप्रयोग में रूबी में सीरियल पोर्ट से पढ़ा जा सके। धारावाहिक बंदरगाह का उपयोग Arduino बोर्ड से डेटा लिखने के लिए किया जाता है। मणि Gemfile में जोड़ा गया है। पोर्ट application.rb में आरंभ नहीं हो जाता:रेल अनुप्रयोग पर रुबी में सीरियल पोर्ट से पढ़ना

config.serial_port = SerialPort.new "/devttyACM0", 9600 
config.serial_port.read_timeout = 100 

समस्या प्रकट होता है जब मैं इस बंदरगाह से पढ़ने के लिए प्रयास करें।

@sp = ProjectName::Application::config.serial_port 
@sp.read 

एप्लिकेशन घातक लटका हुआ है। मैंने pry सत्र से पढ़ने का प्रयास किया है और सब कुछ ठीक था। अगर मैंने read_timeout से 0 सेट किया है, तो pry से पढ़ना भी लटकता है। मैंने पहले से ही read_timeout को बिना किसी परिणाम के बड़े मूल्यों पर सेट करने का प्रयास किया है। इसे काम करने के लिए मुझे क्या करना चाहिए?

अद्यतन:

मैं sinatraframework का उपयोग कर एक ही कार्रवाई करने के लिए कोशिश की है। यह भी लटकता है।

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 

उत्तर

0

आप एक सरल स्क्रिप्ट का उपयोग कर डिवाइस के साथ intereact कर सकते हैं, इस तरह:

require 'rubygems' 
require 'serialport' 
sp = SerialPort.new "/dev/ttyUSB0" 
sp.write "AT\r" 
while true do 
    printf("%c", sp.getc) 
end 

इस मामले में मैं एक जीएसएम मॉडेम का उपयोग किया गया था। शायद आपका डिवाइस पहले कुछ कमांड की प्रतीक्षा कर रहा है।

2

एक ही समस्या थी। फिक्स वास्तव में आसान था, समस्या यह है कि आपके रेल ऐप सीरियल पोर्ट से लगातार नए मान पढ़ रहे हैं और जब तक यह उन इनपुट को पढ़ता है, यह कुछ और नहीं करता है, इसलिए आपकी साइट वास्तव में कभी नहीं बनाई जाएगी।

अगर यह काम करता है तो कोशिश करें अगर उदाहरण के लिए आप इसे सीरियल पोर्ट से निश्चित समय पर पढ़ सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^