/** Motor group for tank-like propulsion.
*/
class MotorGroupDifferential : public MotorGroup {
private:
/** Check if speed is inside bounds
@param speed - speed to be checked
@return - speed inside bounds
*/
int16_t checkBounds(int16_t speed);
public:
/** Constructor
@param motorBoardForLeft1 - Controller for one of the left wheels
@param motorNumberForLeft1 - Controller's output number
@param motorBoardForRight1 - Controller for one of the right wheels
@param motorNumberForRight1 - Controller's output number
@param motorBoardForLeft2 - Controller for one of the left wheels
@param motorNumberForLeft2 - Controller's output number
@param motorBoardForRight2 - Controller for one of the right wheels
@param motorNumberForRight2 - Controller's output number
*/
MotorGroupDifferential(Robot* robot, MotorBoard* motorBoardForLeft1, uint8_t motorNumberForLeft1, MotorBoard* motorBoardForRight1, uint8_t motorNumberForRight1,
MotorBoard* motorBoardForLeft2 = NULL, uint8_t motorNumberForLeft2 = 0, MotorBoard* motorBoardForRight2 = NULL, uint8_t motorNumberForRight2 = 0);
/** Start all motors
@param leftSpeed, in range -127 to 127
@param right Speed, in range -127 to 127
@param speedLimit - Speed limit, 0 to 127. For example, 80 will limit all the speeds to 80/127%. 0 will turn the motors off.
*/
void go(int16_t leftSpeed = 0, int16_t rightSpeed = 0, int16_t lateralSpeedToRight = 0, uint8_t speedLimit = 127);
};
Dalje ćemo raditi na primjeru robota s diferencijalnim pogonom.
Lijevi kod je i dalje iz datoteke "mrm-board.h".
Klasa kojom je predstavljen ovaj pogon je "MotorGroupDifferential" i izvedena je iz "MotorGroup".
Lijevo je deklarirana funkcija "checkBounds()" koja provjerava jesu li parametri u okviru dozvoljenog i njom se nećemo baviti.
U javnom dijelu ("public") se nalazi konstruktor funkcija "go()", kojom ćemo se baviti najviše.
Konstruktor (MotorGroupDifferential()) omogućava da se bilo koji kontroler motora i bilo koji broj motora na njemu spoji na određeni kotač s lijeve ili desne strane.
Zašto funkcija "go()" nije bila deklarirana u baznoj klasi? Zato što je pogon za svaku vrstu pogonske grupe dovoljno različit da ga ne može pokriti jedna funkcija. Zato svaka izvedena klasa ima svoju "go()" funkciju.