shokai / arduino_firmata

Arduino Firmata protocol implementation on Ruby
http://shokai.github.io/arduino_firmata
MIT License
104 stars 23 forks source link

add sinatra sample #8

Open shokai opened 12 years ago

shokai commented 12 years ago

control arduino via HTTP

chrusttt commented 11 years ago

it is not working for me always (sometimes does:)) but mostly i got error: Errno::EAGAIN: Resource temporarily unavailable - write would block running on 1.9.3 but tried on 1.9.2 also

shokai commented 11 years ago

thank you for report. I'll check it.

shokai commented 11 years ago

on Linux OS, dissable nonblocking IO

arduino = ArduinoFirmata.connect '/dev/tty.usb-device-name', :nonblock_io => false
jbhatab commented 11 years ago

I have been playing around with this gem and have been having trouble with the sinatra script.

$:.unshift File.expand_path '../lib', File.dirname(__FILE__)
require 'rubygems'
require 'sinatra'
require 'eventmachine'
require 'arduino_firmata'

arduino = ArduinoFirmata.connect nil, :nonblock_io => true
arduino.pin_mode 13, ArduinoFirmata::OUTPUT

get '/' do
  redirect './on'
end

get '/on' do
  arduino.digital_write 13, true
  "<p><a href='./off'>LED OFF</a></p>"
end

get '/off' do
  arduino.digital_write 13, false
  "<p><a href='./on'>LED ON</a></p>"
end

This is the code I'm currently using, which does end in a sinatra page and supposed connection altough the led doesn't light up when I go to /on. I did remove :eventmachine => true because it was causing an error but I don't think it was even used in this code.

I have also tried setting :nonblock_io to false but then the ruby script just gets stuck at this line: arduino = ArduinoFirmata.connect 'dev/tty.usbmodem1411', :nonblock_io => false

And I have gotten blink led to work. Does it have to do with the fact that I dont have a loop or do I need to use a special firmata for the arduino besides standard_firmata?

marciok commented 10 years ago

The sinatra example it only works if I connect to the arduino each call like:

get '/on' do
  arduino = ArduinoFirmata.connect
  analog = arduino.analog_read(0)
  arduino.digital_write 13, ArduinoFirmata::HIGH
  "<p>analog : #{analog}</p><p><a href='./off'>LED OFF</a></p>"
end

get '/off' do
  arduino = ArduinoFirmata.connect
  analog = arduino.analog_read(0)
  arduino.digital_write 13, ArduinoFirmata::LOW
  "<p>analog : #{analog}</p><p><a href='./on'>LED ON</a></p>"
end

which is not correct. I can't figure out what is wrong, I tried to update firmata but nothing happend.