Class: Artoo::Drivers::Servo
- Inherits:
-
Driver
- Object
- Driver
- Artoo::Drivers::Servo
- Defined in:
- lib/artoo/drivers/servo.rb
Overview
Servo behaviors for Firmata
Constant Summary collapse
- COMMANDS =
[:move, :min, :center, :max, :current_angle].freeze
Instance Attribute Summary collapse
-
#angle_range ⇒ Object
readonly
Returns the value of attribute angle_range.
-
#current_angle ⇒ Object
readonly
Returns the value of attribute current_angle.
Instance Method Summary collapse
-
#angle_to_span(angle) ⇒ Object
converts an angle to a span between 0-255.
-
#center ⇒ Object
Moves to center position.
-
#initialize(params = {}) ⇒ Servo
constructor
Create new Servo with angle=0.
-
#max ⇒ Object
Moves to max position.
-
#min ⇒ Object
Moves to min position.
-
#move(angle) ⇒ Object
Moves to specified angle.
Constructor Details
#initialize(params = {}) ⇒ Servo
Create new Servo with angle=0
12 13 14 15 16 17 |
# 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 |
Instance Attribute Details
#angle_range ⇒ Object (readonly)
Returns the value of attribute angle_range.
9 10 11 |
# File 'lib/artoo/drivers/servo.rb', line 9 def angle_range @angle_range end |
#current_angle ⇒ Object (readonly)
Returns the value of attribute current_angle.
9 10 11 |
# File 'lib/artoo/drivers/servo.rb', line 9 def current_angle @current_angle end |
Instance Method Details
#angle_to_span(angle) ⇒ Object
converts an angle to a span between 0-255
46 47 48 |
# File 'lib/artoo/drivers/servo.rb', line 46 def angle_to_span(angle) (angle * 255 / 180).to_i end |
#center ⇒ Object
Moves to center position
35 36 37 |
# File 'lib/artoo/drivers/servo.rb', line 35 def center move(90) end |
#max ⇒ Object
Moves to max position
40 41 42 |
# File 'lib/artoo/drivers/servo.rb', line 40 def max move(180) end |
#min ⇒ Object
Moves to min position
30 31 32 |
# File 'lib/artoo/drivers/servo.rb', line 30 def min move(0) end |
#move(angle) ⇒ Object
Moves to specified angle
21 22 23 24 25 26 27 |
# 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 |