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