Module Motor
[hide private]
[frames] | no frames]

Source Code for Module Motor

  1  # Motor.py 
  2  # Remote mode 
  3   
  4  ''' 
  5   This software is part of the raspibrick module. 
  6   It is Open Source Free Software, so you may 
  7   - run the code for any purpose 
  8   - study how the code works and adapt it to your needs 
  9   - integrate all or parts of the code in your own programs 
 10   - redistribute copies of the code 
 11   - improve the code and release your improvements to the public 
 12   However the use of the code is entirely your responsibility. 
 13   ''' 
 14   
 15  from Tools import Tools 
 16  import SharedConstants 
 17  from RobotInstance import RobotInstance 
 18   
 19  # ------------------------   Class MotorState  ---------------------------------------------- 
20 -class MotorState():
21 FORWARD = 0 22 BACKWARD = 1 23 STOPPED = 2 24 UNDEFINED = 3
25 26 # ------------------------ Class Motor ---------------------------------------------------
27 -class Motor():
28 ''' 29 Class that represents a motor. 30 '''
31 - def __init__(self, id):
32 ''' 33 Creates a motor instance with given id. 34 @param id: 0 for left motor, 1 for right motor 35 ''' 36 self.state = MotorState.UNDEFINED 37 self.id = id 38 self.device = "mot" + str(id) 39 self.speed = SharedConstants.MOTOR_DEFAULT_SPEED 40 robot = RobotInstance.getRobot() 41 if robot == None: # deferred registering, because Robot not yet created 42 RobotInstance._partsToRegister.append(self) 43 else: 44 self._setup(robot)
45
46 - def _setup(self, robot):
47 robot.sendCommand(self.device + ".create") 48 robot.sendCommand(self.device + ".setSpeed." + str(self.speed)) 49 self.robot = robot
50
51 - def forward(self):
52 ''' 53 Starts the forward rotation with preset speed. 54 The method returns immediately, while the rotation continues. 55 ''' 56 self._checkRobot() 57 if self.state == MotorState.FORWARD: 58 return 59 self.robot.sendCommand(self.device + ".forward") 60 self.state = MotorState.FORWARD
61
62 - def backward(self):
63 ''' 64 Starts the backward rotation with preset speed. 65 The method returns immediately, while the rotation continues. 66 ''' 67 self._checkRobot() 68 if self.state == MotorState.BACKWARD: 69 return 70 self.robot.sendCommand(self.device + ".backward") 71 self.state = MotorState.BACKWARD
72
73 - def stop(self):
74 ''' 75 Stops the motor. 76 (If motor is already stopped, returns immediately.) 77 ''' 78 self._checkRobot() 79 if self.state == MotorState.STOPPED: 80 return 81 self.robot.sendCommand(self.device + ".stop") 82 self.state = MotorState.STOPPED
83
84 - def setSpeed(self, speed):
85 ''' 86 Sets the speed to the given value (arbitrary units). 87 The speed will be changed to the new value at the next movement call only. 88 The speed is limited to 0..100. 89 @param speed: the new speed 0..100 90 '''
91 - def setSpeed(self, speed):
92 self._checkRobot() 93 speed = int(speed) 94 if self.speed == speed: 95 return 96 self.speed = speed 97 self.robot.sendCommand(self.device + ".setSpeed." + str(speed)) 98 self.state = MotorState.UNDEFINED
99
100 - def _checkRobot(self):
101 if RobotInstance.getRobot() == None: 102 raise Exception("Create Robot instance first")
103