class Artoo::Adaptors::IO::DigitalPin

Constants

GPIO_DIRECTION_READ
GPIO_DIRECTION_WRITE
GPIO_PATH
HIGH
LOW

Attributes

mode[R]
pin_file[R]
pin_num[R]
status[R]

Public Class Methods

new(pin_num, mode) click to toggle source
# File lib/artoo/adaptors/io/digital_pin.rb, line 13
def initialize(pin_num, mode)
  @pin_num = pin_num

  File.open("#{ GPIO_PATH }/export", "w") { |f| f.write("#{ pin_num }") }
  File.close
  # Sets the pin for read or write
  set_mode(mode)
end

Public Instance Methods

close() click to toggle source

Unexports the pin in GPIO to leave it free

# File lib/artoo/adaptors/io/digital_pin.rb, line 86
def close
  off! if @mode == 'w'
  File.open("#{ GPIO_PATH }/unexport", "w") { |f| f.write("#{pin_num}") }
  File.close
  @pin_file.close
end
digital_read() click to toggle source

Reads digitally from the specified pin on initialize

# File lib/artoo/adaptors/io/digital_pin.rb, line 42
def digital_read
  set_mode('r') unless @mode == 'r'

  @pin_file.read
end
digital_write(value) click to toggle source

Writes to the specified pin Digitally accepts values :high or :low, 1 or 0, “1” or “0”

# File lib/artoo/adaptors/io/digital_pin.rb, line 24
def digital_write(value)
  set_mode('w') unless @mode == 'w'

  if value.is_a? Symbol
    value = (value == :high) ? 1 : 0
  end

  value = value.to_i

  raise StandardError unless ([HIGH, LOW].include? value)

  @status = (value == 1) ? 'high' : 'low'

  @pin_file.write(value)
  @pin_file.flush
end
off!() click to toggle source

Sets digital write for the pin to LOW

# File lib/artoo/adaptors/io/digital_pin.rb, line 81
def off!
  digital_write(:off)
end
off?() click to toggle source
# File lib/artoo/adaptors/io/digital_pin.rb, line 71
def off?
  !self.on?
end
on!() click to toggle source

Sets digital write for the pin to HIGH

# File lib/artoo/adaptors/io/digital_pin.rb, line 76
def on!
  digital_write(:high)
end
on?() click to toggle source
# File lib/artoo/adaptors/io/digital_pin.rb, line 67
def on?
  (@status == 'high') ? true : false
end
set_mode(mode) click to toggle source

Sets the pin in GPIO for read or write.

# File lib/artoo/adaptors/io/digital_pin.rb, line 49
def set_mode(mode)
  @mode = mode

  if mode == 'w'
    set_pin(mode: 'w', direction: GPIO_DIRECTION_WRITE)
  elsif mode =='r'
    set_pin(mode: 'r', direction: GPIO_DIRECTION_READ)
  end
end
set_pin(settings) click to toggle source
# File lib/artoo/adaptors/io/digital_pin.rb, line 59
def set_pin(settings)
  mode = settings[:mode]
  direction = settings[:direction]
  File.open("#{ GPIO_PATH }/gpio#{ pin_num }/direction", "w") { |f| f.write(direction) }
  File.close
  @pin_file = File.open("#{ GPIO_PATH }/gpio#{ pin_num }/value", mode)
end