class Artoo::Drivers::Servo

Servo behaviors for Firmata

Constants

COMMANDS

Attributes

angle_range[R]
current_angle[R]

Public Class Methods

new(params={}) click to toggle source

Create new Servo with angle=0

Calls superclass method
# File lib/artoo/drivers/servo.rb, line 12
def initialize(params={})
  super

  @current_angle = 0
  @angle_range = params[:range].nil? ? Range.new(30,150) : Range.new(params[:range][:min],params[:range][:max])
end

Public Instance Methods

angle_to_span(angle) click to toggle source

converts an angle to a span between 0-255 @param [Integer] angle

# File lib/artoo/drivers/servo.rb, line 46
def angle_to_span(angle)
  (angle * 255 / 180).to_i
end
center() click to toggle source

Moves to center position

# File lib/artoo/drivers/servo.rb, line 35
def center
  move(90)
end
max() click to toggle source

Moves to max position

# File lib/artoo/drivers/servo.rb, line 40
def max
  move(180)
end
min() click to toggle source

Moves to min position

# File lib/artoo/drivers/servo.rb, line 30
def min
  move(0)
end
move(angle) click to toggle source

Moves to specified angle @param [Integer] angle must be between 0-180

# File lib/artoo/drivers/servo.rb, line 21
def move(angle)
  raise "Servo angle must be an integer between 0-180" unless (angle.is_a?(Numeric) && angle >= 0 && angle <= 180)

  safety_angle = safe_angle(angle)
  @current_angle = safety_angle
  connection.servo_write(pin, angle_to_span(safety_angle))
end

Private Instance Methods

safe_angle(angle) click to toggle source

contains angle to safe values @param [Integer] angle

# File lib/artoo/drivers/servo.rb, line 54
def safe_angle(angle)
  if angle < @angle_range.min
    @angle_range.min
  elsif angle > @angle_range.max
    @angle_range.max
  else
    angle
  end
end