-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sp.gets working in irb, but not as ruby script #57
Comments
Update: with some desperation tweaks (I added seq.each do |i|
puts 'laptop> ' + i
sp.write i
end
sp.flush
sleep 3
while (o = sp.gets.chomp) do
puts 'arduino> '+ o
if o == 'done'
break
end
end |
@s2tephen: I would recommend breaking out your read operations into a separate thread. Join it to the main thread when you're done. Something like this (untested): require 'thread'
read_thread = Thread.new do
while (o = sp.gets.chomp) do
puts 'arduino> '+ o
if o == 'done'
break
end
end
end
seq.each do |i|
puts 'laptop> ' + i
sp.write i
end
read_thread.join |
This problem seems to be caused by the “auto reset on serial connection” feature of Arduino boards: Everytime a serial connection is opened, the board resets itself. Thus you need to wait a few seconds before you can start sending / receiving data. See http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection for more info. |
I am trying to set up serial communication between a Ruby on Rails app and an Arduino Mega. In Ruby, I am writing an array of strings to the serial, which the Arduino is then supposed to read, process and write corresponding output back to the serial.
For some reason, when I use
irb
and run the script line by line, everything works and I get the desired result, but when I useruby sample.rb
or run the code from inside Rails, it just gets stuck in the while loop and never returns anything. Would love any guidance on how to get this working.For reference, I am running Ruby 2.1.2, Rails 4.1.4, and serialport 1.3.1.
The text was updated successfully, but these errors were encountered: