118 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 
 | |
| class Motor
 | |
| 
 | |
|   attr_reader :name, :registers
 | |
|   
 | |
|   def initialize (robot, motor_name)
 | |
|     @name = motor_name
 | |
|     @robot = robot
 | |
|     load_registers
 | |
|   end
 | |
| 
 | |
|   def set_name (name)
 | |
|     @name = name
 | |
|   end
 | |
|   
 | |
|   def load_registers
 | |
| 
 | |
|     @registers = Hash.new
 | |
|     names = JSON.parse(@robot.motor_register_list self).values[0]
 | |
|     
 | |
|     names.each do |name|
 | |
|       
 | |
|       next if name == "registers"
 | |
|       begin 
 | |
|         value = @robot.motor_register_get(self, name)
 | |
|         value = JSON.parse(value)
 | |
|         value = value[name]
 | |
|         @registers[name] = value
 | |
| 
 | |
|         ## create a function to access this
 | |
|         instance_variable_set("@#{name}", value)
 | |
|         self.class.send(:attr_reader, name)
 | |
| 
 | |
|         if is_float_register(name)
 | |
|           self.class.send(:define_method, name+"=") do |argument|
 | |
|             puts "Sending value..."
 | |
|             @robot.send_motor_register(self, name, argument.to_s)
 | |
|           end
 | |
|         else
 | |
|           self.class.send(:define_method, name+"=") do |argument|
 | |
|             puts "Sending ..."
 | |
|             @robot.send_motor_register(self, name, argument)
 | |
|           end
 | |
| 
 | |
|         end
 | |
|         
 | |
|       rescue
 | |
| #        puts "Register not read " + name
 | |
|       end
 | |
|     end
 | |
| 
 | |
| #    update_registers
 | |
|   end
 | |
| 
 | |
|   def is_float_register (name)
 | |
|     if name == "goal_position" or name == "goal_speed"
 | |
|       return true
 | |
|     end
 | |
|     false
 | |
|   end
 | |
|   
 | |
|   def update_registers
 | |
|     
 | |
|     @registers.each do |name, value|
 | |
|       begin 
 | |
|         value = @robot.motor_register_get(self, name)
 | |
|         value = JSON.parse(value)
 | |
|         value = value[name]
 | |
|         @registers[name] = value
 | |
| 
 | |
|         instance_variable_set("@#{name}", value)
 | |
|       rescue
 | |
| #        puts "Register not read " + name
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   ## TODO: custom functions for key functions.
 | |
|   ## not for the others. 
 | |
|   
 | |
|   # def set_compliant (value)
 | |
|   #   compliant = value
 | |
|   # end
 | |
| 
 | |
|   # def compliant= (value)
 | |
|   #   text = "true" if value == true
 | |
|   #   text = "false" if value == false
 | |
|   #   @robot.send_motor_register(self, "compliant", text)
 | |
|   # end
 | |
| 
 | |
|   # def moving_speed= (value)
 | |
|   #   @robot.send_motor_register(self, "moving_speed", value)
 | |
|   # end
 | |
| 
 | |
|   # def position= (value)
 | |
|   #   @robot.send_motor_register(self, "goal_position", value.to_s)
 | |
|   # end
 | |
| 
 | |
|   # def position
 | |
|   #   present_position
 | |
|   # end
 | |
| 
 | |
| 
 | |
|   def to_s
 | |
|     return "Motor: " + @name 
 | |
|   end
 | |
|   
 | |
| #   RestClient.get @url + '/motor/' + name + '/register/list.json' , {:accept => :json}
 | |
|   
 | |
|   
 | |
|   
 | |
| end
 | |
| 
 | |
| 
 | |
| # class Register
 | |
| #   attr_reader :name 
 | |
| # end
 |