class Smalruby::Hardware::SmalrubotS1

Smalrubot on Studuino v1 class

Constants

DEFAULT_DC_MOTOR_POWER_RATIO

default dc motor power ratio

Public Class Methods

new(_) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 12
def initialize(_)
  world.board.init_dc_motor_port(PORT_M1, 0)
  world.board.init_dc_motor_port(PORT_M2, 0)

  world.board.init_sensor_port(PORT_A0, PIDLED)
  world.board.init_sensor_port(PORT_A1, PIDLED)

  world.board.init_sensor_port(PORT_A4, PIDIRPHOTOREFLECTOR)
  world.board.init_sensor_port(PORT_A5, PIDIRPHOTOREFLECTOR)

  @dc_motor_power_ratios = {
    PORT_M1 => DEFAULT_DC_MOTOR_POWER_RATIO,
    PORT_M2 => DEFAULT_DC_MOTOR_POWER_RATIO,
  }
end

Public Instance Methods

left_dc_motor_power_ratio() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 28
def left_dc_motor_power_ratio
  @dc_motor_power_ratios[PORT_M1]
end
left_dc_motor_power_ratio=(val) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 32
def left_dc_motor_power_ratio=(val)
  set_dc_motor_power_ratio(PORT_M1, val)
end
left_sensor_value() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 74
def left_sensor_value
  world.board.get_ir_photoreflector_value(PORT_A4).to_i
end
right_dc_motor_power_ratio() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 36
def right_dc_motor_power_ratio
  @dc_motor_power_ratios[PORT_M2]
end
right_dc_motor_power_ratio=(val) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 40
def right_dc_motor_power_ratio=(val)
  set_dc_motor_power_ratio(PORT_M2, val)
end
right_sensor_value() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 78
def right_sensor_value
  world.board.get_ir_photoreflector_value(PORT_A5).to_i
end
turn_off_blue_led() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 87
def turn_off_blue_led
  world.board.led(PORT_A0, OFF)
end
Also aliased as: turn_off_left_led
turn_off_left_led()
Alias for: turn_off_blue_led
turn_off_red_led() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 97
def turn_off_red_led
  world.board.led(PORT_A1, OFF)
end
Also aliased as: turn_off_right_led
turn_off_right_led()
Alias for: turn_off_red_led
turn_on_blue_led() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 82
def turn_on_blue_led
  world.board.led(PORT_A0, ON)
end
Also aliased as: turn_on_left_led
turn_on_left_led()
Alias for: turn_on_blue_led
turn_on_red_led() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 92
def turn_on_red_led
  world.board.led(PORT_A1, ON)
end
Also aliased as: turn_on_right_led
turn_on_right_led()
Alias for: turn_on_red_led

Private Instance Methods

_stop() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 157
def _stop
  set_dc_motor_powers
  world.board.dc_motor_control(PORT_M1, COAST)
  world.board.dc_motor_control(PORT_M2, COAST)
end
run(direction, sec: nil) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 127
def run(direction, sec: nil)
  case direction
  when :forward
    set_dc_motor_powers
    world.board.dc_motor_control(PORT_M1, NORMAL)
    world.board.dc_motor_control(PORT_M2, NORMAL)
  when :backward
    set_dc_motor_powers
    world.board.dc_motor_control(PORT_M1, REVERSE)
    world.board.dc_motor_control(PORT_M2, REVERSE)
  when :turn_left
    set_dc_motor_powers
    world.board.dc_motor_control(PORT_M1, REVERSE)
    world.board.dc_motor_control(PORT_M2, NORMAL)
  when :turn_right
    set_dc_motor_powers
    world.board.dc_motor_control(PORT_M1, NORMAL)
    world.board.dc_motor_control(PORT_M2, REVERSE)
  when :stop
    _stop
  end

  if (sec = sec.to_f) > 0
    sleep(sec)
    if direction != :stop
      _stop
    end
  end
end
set_dc_motor_power(port) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 115
def set_dc_motor_power(port)
  ratio = @dc_motor_power_ratios[port]
  power = Smalrubot::Board::HIGH * (ratio.to_f / 100)
  world.board.dc_motor_power(port, power.round)
end
set_dc_motor_power_ratio(port, val) click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 104
def set_dc_motor_power_ratio(port, val)
  if val < 0
    @dc_motor_power_ratios[port] = 0
  elsif val > 100
    @dc_motor_power_ratios[port] = 100
  else
    @dc_motor_power_ratios[port] = val
  end
  set_dc_motor_power(port)
end
set_dc_motor_powers() click to toggle source
# File lib/smalruby/hardware/smalrubot_s1.rb, line 121
def set_dc_motor_powers
  @dc_motor_power_ratios.keys.each do |port|
    set_dc_motor_power(port)
  end
end