Class: Artoo::Drivers::Servo

Inherits:
Driver
  • Object
show all
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

Instance Method Summary collapse

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_rangeObject (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_angleObject (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

Parameters:



46
47
48
# File 'lib/artoo/drivers/servo.rb', line 46

def angle_to_span(angle)
  (angle * 255 / 180).to_i
end

#centerObject

Moves to center position



35
36
37
# File 'lib/artoo/drivers/servo.rb', line 35

def center
  move(90)
end

#maxObject

Moves to max position



40
41
42
# File 'lib/artoo/drivers/servo.rb', line 40

def max
  move(180)
end

#minObject

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

Parameters:

  • must be between 0-180



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