Sha256: 50c5444a93f48c0da3c5fbb5addbc18ee918f4a4e2146b2f5ea37e84b99ae22e

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

module RapiroWrapper
  # Controll class for RAPIRO
  class Body
    def initialize(device = '/dev/ttyAMA0')
      @commander  = RapiroWrapper::Commander.new(device)
      servo_class = RapiroWrapper::ServoMotor.find_servos

      @servos = servo_class.inject({}) do |hash, klass|
        class_name = klass.to_s
        snake_case = class_name.gsub(/::/, '/')
                               .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
                               .gsub(/([a-z\d])([A-Z])/, '\1_\2')
                               .tr('-', '_').downcase
        hash[snake_case.split('/').last] = klass
        hash
      end
      @servos['eyes'] = RapiroWrapper::Eyes
      @servos.each do |s, k|
        self.class.class_eval <<-EOF
          def #{s}=(val)
            @#{s} = #{k}.new(val)
          end

          def #{s}
            @#{s}
          end
        EOF
        instance_variable_set('@'.concat(s).to_sym, k.new)
      end
    end

    def sequences(duration = 10)
      @commander.sequences(
        @servos.keys.map { |k| instance_variable_get('@'.concat(k).to_sym) },
        duration
      )
    end

    def execute!(duration = 10)
      @commander.write(sequences(duration))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rapiro_wrapper-0.1.0 lib/rapiro_wrapper/body.rb