Sha256: 49e050870a8efd7ebc040ac5b62e21e3be694acddae888a1e262779fb79bedf2

Contents?: true

Size: 1.05 KB

Versions: 7

Compression:

Stored size: 1.05 KB

Contents

require 'artoo/drivers/driver'

module Artoo
  module Drivers
    # Servo behaviors for Firmata
    class Servo < Driver
      COMMANDS = [:move, :min, :center, :max, :current_angle].freeze

      attr_reader :current_angle

      # Create new Servo with angle=0
      def initialize(params={})
        super

        @current_angle = 0
      end

      # Moves to specified angle
      # @param [Integer] angle must be between 0-180
      def move(angle)
        raise "Servo angle must be an integer between 0-180" unless (angle.is_a?(Numeric) && angle >= 0 && angle <= 180)

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

      # Moves to min position
      def min
        move(0)
      end

      # Moves to center position
      def center
        move(90)
      end

      # Moves to max position
      def max
        move(180)
      end

      # converts an angle to a span between 0-255
      # @param [Integer] angle
      def angle_to_span(angle)
        (angle * 255 / 180).to_i
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
artoo-gpio-0.4.0 lib/artoo/drivers/servo.rb
artoo-gpio-0.3.0 lib/artoo/drivers/servo.rb
artoo-gpio-0.2.1 lib/artoo/drivers/servo.rb
artoo-gpio-0.2.0 lib/artoo/drivers/servo.rb
artoo-gpio-0.1.0 lib/artoo/drivers/servo.rb
artoo-gpio-0.0.1 lib/artoo/drivers/servo.rb
artoo-arduino-1.1.0 lib/artoo/drivers/servo.rb