2011-06-15 11 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

+0

@psp क्या आपको इसका समाधान मिला है? – RomanKapitonov

+0

और पढ़ने के बाद, कुछ बंद आवश्यक नहीं है? – andrea

उत्तर

1

शायद आपका डिवाइस कुछ इनपुट की प्रतीक्षा कर रहा है। इस उत्तर को जांचें और देखें कि यह मदद करता है: https://stackoverflow.com/a/10534407/1006863

9

मुझे समस्या थी। ऐसा इसलिए है क्योंकि ser.read का उपयोग रूबी को हमेशा पढ़ने के लिए कहता है और रुबी कभी भी पढ़ना बंद नहीं करता है और इस प्रकार स्क्रिप्ट को लटकता है। समाधान केवल वर्णों की एक विशेष राशि को पढ़ना है।

उदाहरण के लिए

तो:

ser.readline(5) 
3

गूंज के लिए user968243 क्या कहा, कि ser.read कॉल EOF के लिए प्रतीक्षा करने जा रहा है। यदि आपका डिवाइस ईओएफ नहीं भेज रहा है, तो आप हमेशा के लिए इंतजार करेंगे। आप सुझाए गए वर्णों की केवल एक निश्चित संख्या को पढ़ सकते हैं।

आपकी डिवाइस लाइन वर्ण के अंत के साथ हर प्रतिक्रिया समाप्त कर सकती है। अगले गाड़ी वापसी करने के लिए पढ़ने का प्रयास करें:

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

मैं इस एक ही समस्या में पड़ गए और एक समाधान मिल गया। रुबी आईओ विधि रीडलाइन का प्रयोग करें।

puts ser.readlines 
1

सीरियल पोर्ट के लिए #read_timeout मूल्य सेट करके देखें। ध्यान दें कि #write_timeout मान का उपयोग करके एक लिखने के लिए एक ही काम किया जा सकता है।