Class: Artoo::Adaptors::Firmata

Inherits:
Adaptor
  • Object
show all
Defined in:
lib/artoo/adaptors/firmata.rb

Overview

Connect to Arduino using Firmata

Instance Attribute Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *arguments, &block) ⇒ Object (private)

Uses method missing to call Firmata Board methods



120
121
122
# File 'lib/artoo/adaptors/firmata.rb', line 120

def method_missing(method_name, *arguments, &block)
  firmata.send(method_name, *arguments, &block)
end

Instance Attribute Details

#firmataObject (readonly)

Returns the value of attribute firmata.



8
9
10
# File 'lib/artoo/adaptors/firmata.rb', line 8

def firmata
  @firmata
end

#i2c_addressObject (readonly)

Returns the value of attribute i2c_address.



8
9
10
# File 'lib/artoo/adaptors/firmata.rb', line 8

def i2c_address
  @i2c_address
end

Instance Method Details

#analog_read(pin) ⇒ Object

GPIO - analog



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/artoo/adaptors/firmata.rb', line 56

def analog_read(pin)
  firmata.set_pin_mode(firmata.analog_pins[pin], ::Firmata::PinModes::ANALOG)
  firmata.toggle_pin_reporting(firmata.analog_pins[pin])
  firmata.read_and_process

  value = 0
  while i = find_event("analog_read_#{pin}") do
    event = events.slice!(i)
    value = event.data.first if !event.nil?
  end
  value
end

#connectBoolean

Creates connection with firmata board

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
# File 'lib/artoo/adaptors/firmata.rb', line 12

def connect
  require 'firmata' unless defined?(::Firmata::Board)

  @firmata = ::Firmata::Board.new(connect_to)
  @firmata.connect
  super
  return true
end

#digital_read(pin) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/artoo/adaptors/firmata.rb', line 42

def digital_read(pin)
  firmata.set_pin_mode(pin, ::Firmata::PinModes::INPUT)
  firmata.toggle_pin_reporting(pin)
  firmata.read_and_process

  value = nil
  while i = find_event("digital_read_#{pin}")
    event = events.slice!(i)
    value = event.data.first if !event.nil?
  end
  value
end

#digital_write(pin, level) ⇒ Object

GPIO - digital



37
38
39
40
# File 'lib/artoo/adaptors/firmata.rb', line 37

def digital_write(pin, level)
  firmata.set_pin_mode(pin, ::Firmata::PinModes::OUTPUT)
  firmata.digital_write(pin, convert_level(level))
end

#disconnectBoolean

Closes connection with firmata board

Returns:

  • (Boolean)


23
24
25
# File 'lib/artoo/adaptors/firmata.rb', line 23

def disconnect
  super
end

#firmware_nameObject

device info interface



28
29
30
# File 'lib/artoo/adaptors/firmata.rb', line 28

def firmware_name
  firmata.firmware_name
end

#i2c_endObject



88
89
90
# File 'lib/artoo/adaptors/firmata.rb', line 88

def i2c_end

end

#i2c_read(size) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/artoo/adaptors/firmata.rb', line 92

def i2c_read(size)
  firmata.i2c_read_request(i2c_address, size)
  firmata.read_and_process

  value = []
  while i = find_event(:i2c_reply) do
    event = events.slice!(i)
    value = event.data.first[:data] if !event.nil?
  end
  value
end

#i2c_start(address) ⇒ Object

i2c interface



82
83
84
85
86
# File 'lib/artoo/adaptors/firmata.rb', line 82

def i2c_start(address)
  @i2c_address = address

  firmata.i2c_config(0)
end

#i2c_write(*data) ⇒ Object



104
105
106
# File 'lib/artoo/adaptors/firmata.rb', line 104

def i2c_write(*data)
  firmata.i2c_write_request(i2c_address, *data)
end

#pwm_write(pin, level) ⇒ Object

GPIO - PWM



70
71
72
73
# File 'lib/artoo/adaptors/firmata.rb', line 70

def pwm_write(pin, level)
  firmata.set_pin_mode(pin, ::Firmata::PinModes::PWM)
  firmata.analog_write(pin, level)
end

#servo_write(pin, angle) ⇒ Object

GPIO - servo



76
77
78
79
# File 'lib/artoo/adaptors/firmata.rb', line 76

def servo_write(pin, angle)
  firmata.set_pin_mode(pin, ::Firmata::PinModes::SERVO)
  firmata.analog_write(pin, angle)
end

#versionObject



32
33
34
# File 'lib/artoo/adaptors/firmata.rb', line 32

def version
  firmata.version
end