2025-07-30 11:57:45 +08:00

93 lines
1.8 KiB
Ruby

require 'json'
require 'rest-client'
require 'parallel'
require './motor'
class Poppy
attr_reader :ip, :port, :url, :motors
def initialize ip
@host = ip
@port = "8080"
@url = "http://" + @host + ":" + @port
init_motors;
end
def init_motors
@motors = Hash.new
motor_list.each do |motor_name|
@motors[motor_name] = Motor.new(self, motor_name)
end
end
def motor_list_text
RestClient.get @url + '/motor/list.json'
end
def motor_list
JSON.parse(motor_list_text).values[0]
end
def to_s
"Poppy :]"
end
def update_motor_registers
each_motor do |motor|
motor.update_registers
end
end
def each_motor
@motors.each_value do |motor|
yield motor
end
end
def set_compliant (is_compliant)
each_motor do |motor|
motor.compliant = is_compliant
end
end
def set_default_motor_positions
each_motor do |motor|
motor.compliant = "false"
motor.goal_speed = 0
motor.goal_position = 0
end
end
def set_default_motor_positions_parallel
Parallel.each(@motors.values) do |motor|
motor.compliant = "false"
motor.goal_speed = 10
motor.goal_position = 0
end
end
## Low level for motors ...
def motor_values (name)
RestClient.get @url + '/motor/' + name + '/register/list.json' , {:accept => :json}
end
def motor_register_get (motor, register)
RestClient.get @url + '/motor/' + motor.name + '/register/' + register , {:accept => :json}
end
def motor_register_list (motor)
RestClient.get @url + '/motor/' + motor.name + '/register/list.json' , {:accept => :json}
end
def send_motor_register (motor, register, value)
RestClient.post @url + '/motor/' + motor.name + '/register/' + register + '/value.json', value, :content_type => :json
end
end