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