class Smalruby::Hardware::TwoWheelDriveCar

2WD車のモーターを表現するクラス

Attributes

left_speed[R]

左のモーターの速度%

right_speed[R]

右のモーターの速度%

Public Class Methods

new(options) click to toggle source
Calls superclass method
# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 13
def initialize(options)
  @left_speed = 100
  @right_speed = 100

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

Public Instance Methods

backward() click to toggle source

後退する

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 47
def backward
  digital_write_pins(0, left_speed, 0, right_speed)
end
forward() click to toggle source

前進する

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 42
def forward
  digital_write_pins(left_speed, 0, right_speed, 0)
end
run(options = {}) click to toggle source

命令する

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 67
def run(options = {})
  defaults = {
    command: 'forward',
    sec: nil,
  }
  opts = Util.process_options(options, defaults)

  send(opts[:command])
  sleep(opts[:sec]) if opts[:sec]
  stop unless opts[:command] == :stop
end
stop() click to toggle source

停止する

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 62
def stop
  digital_write_pins(0, 0, 0, 0)
end
turn_left() click to toggle source

左に曲がる

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 52
def turn_left
  digital_write_pins(0, left_speed, right_speed, 0)
end
turn_right() click to toggle source

右に曲がる

# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 57
def turn_right
  digital_write_pins(left_speed, 0, 0, right_speed)
end

Private Instance Methods

after_initialize(_ = {}) click to toggle source
# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 81
def after_initialize(_ = {})
  pins.each do |pin|
    set_pin_mode(pin, :out)
  end
  stop
end
digital_write_pins(*speeds) click to toggle source
# File lib/smalruby/hardware/two_wheel_drive_car.rb, line 88
def digital_write_pins(*speeds)
  speeds.each.with_index do |speed, i|
    level = (Smalrubot::Board::HIGH * speed / 100.0).floor
    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], level)
    end
  end
end