Sha256: 1aea704b39c84232d1d1b4f004aa9e7d62e5bde42a6253050212a71b430f39a7

Contents?: true

Size: 1.9 KB

Versions: 6

Compression:

Stored size: 1.9 KB

Contents

# -*- coding: utf-8 -*-
require 'smalruby/hardware'

module Smalruby
  module Hardware
    # モータードライバを表現するクラス
    #
    # モータードライバのVrefにはPWM出力できるD3, D5, D6, D9, D10, D11の
    # いずれかを接続し、Vin1、Vin2はVrefからの連番(例えば、VrefがD3であ
    # ればVin1、Vin2はそれぞれD4, D5)を接続してください。
    #
    # 動作確認済みのモータードライバの一覧
    # * TOSHIBA
    #   * TA7291P
    class MotorDriver < Dino::Components::BaseComponent
      # モーターの回転速度の割合(0~100%)
      attr_reader :speed

      def initialize(options)
        pin = Pin.smalruby_to_dino(options[:pin])
        case pin
        when 3, 5, 6, 9, 10, 11
          super(board: world.board, pin: (pin...(pin + 3)).to_a)
        else
          fail "モーターのピン番号が間違っています: {options[:pin]}"
        end
        self.speed = options[:speed] || 100
      end

      def speed=(val)
        @speed = val
        if @speed < 0
          @speed = 0
        elsif @speed > 100
          @speed = 100
        end
      end

      # 正転する
      def forward
        write_pins(speed, 100, 0)
      end

      # 逆転する
      def backward
        write_pins(speed, 0, 100)
      end

      # 停止する
      def stop
        write_pins(0, 0, 0)
      end

      private

      def after_initialize(_ = {})
        pins.each do |pin|
          set_pin_mode(pin, :out)
        end
        stop
      end

      def write_pins(*levels)
        levels.each.with_index do |level, i|
          case level
          when 0
            digital_write(pins[i], Dino::Board::LOW)
          when 100
            digital_write(pins[i], Dino::Board::HIGH)
          else
            analog_write(pins[i], (Dino::Board::HIGH * level / 100.0).round)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
smalruby-0.0.32-x86-mingw32 lib/smalruby/hardware/motor_driver.rb
smalruby-0.0.32 lib/smalruby/hardware/motor_driver.rb
smalruby-0.0.31-x86-mingw32 lib/smalruby/hardware/motor_driver.rb
smalruby-0.0.31 lib/smalruby/hardware/motor_driver.rb
smalruby-0.0.30-x86-mingw32 lib/smalruby/hardware/motor_driver.rb
smalruby-0.0.30 lib/smalruby/hardware/motor_driver.rb