class Smalruby::Hardware::MotorDriver

モータードライバを表現するクラス

モータードライバのVrefにはPWM出力できるD3, D5, D6, D9, D10, D11の いずれかを接続し、Vin1、Vin2はVrefからの連番(例えば、VrefがD3であ ればVin1、Vin2はそれぞれD4, D5)を接続してください。

動作確認済みのモータードライバの一覧

Attributes

speed[R]

モーターの回転速度の割合(0~100%)

Public Class Methods

new(options) click to toggle source
Calls superclass method
# File lib/smalruby/hardware/motor_driver.rb, line 18
def initialize(options)
  pin = Pin.smalruby_to_smalrubot(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

Public Instance Methods

backward() click to toggle source

逆転する

# File lib/smalruby/hardware/motor_driver.rb, line 44
def backward
  write_pins(speed, 0, 100)
end
forward() click to toggle source

正転する

# File lib/smalruby/hardware/motor_driver.rb, line 39
def forward
  write_pins(speed, 100, 0)
end
speed=(val) click to toggle source
# File lib/smalruby/hardware/motor_driver.rb, line 29
def speed=(val)
  @speed = val
  if @speed < 0
    @speed = 0
  elsif @speed > 100
    @speed = 100
  end
end
stop() click to toggle source

停止する

# File lib/smalruby/hardware/motor_driver.rb, line 49
def stop
  write_pins(0, 0, 0)
end

Private Instance Methods

after_initialize(_ = {}) click to toggle source
# File lib/smalruby/hardware/motor_driver.rb, line 55
def after_initialize(_ = {})
  pins.each do |pin|
    set_pin_mode(pin, :out)
  end
  stop
end
write_pins(*levels) click to toggle source
# File lib/smalruby/hardware/motor_driver.rb, line 62
def write_pins(*levels)
  levels.each.with_index do |level, i|
    case level
    when 0
      digital_write(pins[i], Smalrubot::Board::LOW)
    when 100
      digital_write(pins[i], Smalrubot::Board::HIGH)
    else
      analog_write(pins[i], (Smalrubot::Board::HIGH * level / 100.0).round)
    end
  end
end