class Artoo::Adaptors::Raspi

Connect to a Raspberry Pi GPIO @see device documentation for more information

Constants

PINS

Attributes

board_version[R]
device[R]
i2c[R]
pins[R]
pwm_pins[R]

Public Instance Methods

close_all_raspi_pins() click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 106
def close_all_raspi_pins
  pins.each_value { |pin| pin.close }
end
connect() click to toggle source

Creates a connection with device @return [Boolean]

Calls superclass method
# File lib/artoo/adaptors/raspi.rb, line 37
def connect
  @pins = {} if @pins.nil?
  @pwm_pins = {} if @pwm_pins.nil?
  @board_version = `cat /proc/cpuinfo | grep Revision`.split.last.unpack("CCCC").last
  super
end
digital_read(pin) click to toggle source

GPIO - digital interface

# File lib/artoo/adaptors/raspi.rb, line 79
def digital_read(pin)
  release_pwm(pin) if (pwm_used? pin)
  pin = raspi_pin(pin, "r")
  pin.digital_read
end
digital_write(pin, val) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 85
def digital_write(pin, val)
  release_pwm(pin) if (pwm_used? pin)
  pin = raspi_pin(pin, "w")
  pin.digital_write(val)
end
disconnect() click to toggle source

Closes connection with device @return [Boolean]

Calls superclass method
# File lib/artoo/adaptors/raspi.rb, line 46
def disconnect
  release_all_pwm_pins
  close_all_raspi_pins
  super
end
firmware_name() click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 52
def firmware_name
  "Raspberry Pi"
end
i2c_read(len) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 74
def i2c_read len
  @i2c.read len
end
i2c_start(address) click to toggle source

i2c

# File lib/artoo/adaptors/raspi.rb, line 61
def i2c_start address
  if @board_version >= 100
    i2c_location = "/dev/i2c-1"
  else
    i2c_location = "/dev/i2c-0"
  end
  @i2c = I2c.new i2c_location, address
end
i2c_write(*data) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 70
def i2c_write *data
  @i2c.write *data
end
method_missing(method_name, *arguments, &block) click to toggle source

Uses method missing to call device actions @see device documentation

# File lib/artoo/adaptors/raspi.rb, line 112
def method_missing(method_name, *arguments, &block)
  device.send(method_name, *arguments, &block)
end
pwm_write(pin, val) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 91
def pwm_write(pin, val)
  pin = pwm_pin(pin)
  pin.pwm_write(val)
end
release_all_pwm_pins() click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 102
def release_all_pwm_pins
  pwm_pins.each_value { |pwm_pin| pwm_pin.release }
end
release_pwm(pin) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 96
def release_pwm(pin)
  pin = translate_pin(pin)
  pwm_pins[pin].release
  pwm_pins[pin] = nil
end
version() click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 56
def version
  Artoo::Raspi::VERSION
end

Private Instance Methods

pwm_pin(pin) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 128
def pwm_pin(pin)
  pin = translate_pin(pin)
  pwm_pins[pin] = PwmPin.new(pin) if pwm_pins[pin].nil?
  pwm_pins[pin]
end
pwm_used?(pin) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 118
def pwm_used?(pin)
  (pwm_pins[translate_pin(pin)].nil?) ? false : true
end
raspi_pin(pin, mode) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 122
def raspi_pin(pin, mode)
  pin = translate_pin pin
  pins[pin] = DigitalPin.new(pin, mode) if pins[pin].nil? || pins[pin].mode != mode
  pins[pin]
end
translate_pin(pin) click to toggle source
# File lib/artoo/adaptors/raspi.rb, line 134
def translate_pin pin
  begin
    p = PINS.fetch(pin.to_i)
    if p.class == Hash
      if @board_version >= 54
       return p[:rev2]
      else
       return p[:rev1]
      end
    else
      return p
    end
  rescue Exception => e
    raise "Not a valid pin"
  end
end