class BBB::Components::Servo

Attributes

max_degrees[R]
max_duty[R]
min_duty[R]
period[R]

Public Class Methods

new(options={}) click to toggle source

Min duty and max duty for FS5103B servo duty cycle of 900 to 2100 ms for 120 degrees www.servodatabase.com/servo/feetech/fs5103b

# File lib/BBB/components/servo.rb, line 13
def initialize(options={})
  set_options(options)

  @period      = options.fetch(:period, 20e6)
  @min_duty    = options.fetch(:min_duty, 17.9e6)
  @max_duty    = options.fetch(:max_duty, 19.1e6)
  @max_degrees = options.fetch(:max_degrees, 120)

end

Public Instance Methods

activate!() click to toggle source
# File lib/BBB/components/servo.rb, line 31
def activate!
  pin.run = 1
end
angle(degrees) click to toggle source
# File lib/BBB/components/servo.rb, line 23
def angle(degrees)
  pin.duty = degrees_to_ns(degrees)
end
deactivate!() click to toggle source
# File lib/BBB/components/servo.rb, line 35
def deactivate!
  pin.run = 0
end
degrees_to_ns(degrees) click to toggle source
# File lib/BBB/components/servo.rb, line 27
def degrees_to_ns(degrees)
  degrees / max_degrees.to_f * duty_range + min_duty
end
pin() click to toggle source
# File lib/BBB/components/servo.rb, line 39
def pin
  pins.first
end

Private Instance Methods

after_pin_initialization() click to toggle source
# File lib/BBB/components/servo.rb, line 49
def after_pin_initialization
  pin.period = self.period
  pin.duty   = (min_duty + duty_range / 2)
  pin.run    = 1
end
duty_range() click to toggle source
# File lib/BBB/components/servo.rb, line 45
def duty_range
  max_duty - min_duty
end