Utility class for controlling a servo system motor.
MotorController.cpp@0:ec2f323f6388, 2016-01-05 (annotated)
- Committer:
- Sinterbaas
- Date:
- Tue Jan 05 14:41:35 2016 +0000
- Revision:
- 0:ec2f323f6388
Introduced some epic classes/libraries to be used for controlling the servo system and PC controls.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sinterbaas | 0:ec2f323f6388 | 1 | #include "MotorController.h" |
Sinterbaas | 0:ec2f323f6388 | 2 | |
Sinterbaas | 0:ec2f323f6388 | 3 | MotorController::MotorController (HBridge &motor, AnalogIn &motorInput) : |
Sinterbaas | 0:ec2f323f6388 | 4 | motor ( motor ), motorInput ( motorInput ) { |
Sinterbaas | 0:ec2f323f6388 | 5 | } |
Sinterbaas | 0:ec2f323f6388 | 6 | |
Sinterbaas | 0:ec2f323f6388 | 7 | void MotorController::start () { |
Sinterbaas | 0:ec2f323f6388 | 8 | this->motor.start(); |
Sinterbaas | 0:ec2f323f6388 | 9 | } |
Sinterbaas | 0:ec2f323f6388 | 10 | |
Sinterbaas | 0:ec2f323f6388 | 11 | void MotorController::stop () { |
Sinterbaas | 0:ec2f323f6388 | 12 | this->motor.stop(); |
Sinterbaas | 0:ec2f323f6388 | 13 | } |
Sinterbaas | 0:ec2f323f6388 | 14 | |
Sinterbaas | 0:ec2f323f6388 | 15 | void MotorController::turnLeft () { |
Sinterbaas | 0:ec2f323f6388 | 16 | this->motor.start(); |
Sinterbaas | 0:ec2f323f6388 | 17 | this->motor.backward(); |
Sinterbaas | 0:ec2f323f6388 | 18 | } |
Sinterbaas | 0:ec2f323f6388 | 19 | |
Sinterbaas | 0:ec2f323f6388 | 20 | |
Sinterbaas | 0:ec2f323f6388 | 21 | void MotorController::turnRight () { |
Sinterbaas | 0:ec2f323f6388 | 22 | this->motor.start(); |
Sinterbaas | 0:ec2f323f6388 | 23 | this->motor.forward(); |
Sinterbaas | 0:ec2f323f6388 | 24 | } |
Sinterbaas | 0:ec2f323f6388 | 25 | |
Sinterbaas | 0:ec2f323f6388 | 26 | void MotorController::setPosition (float position) { |
Sinterbaas | 0:ec2f323f6388 | 27 | float current_position = this->getPosition(); |
Sinterbaas | 0:ec2f323f6388 | 28 | |
Sinterbaas | 0:ec2f323f6388 | 29 | if (current_position > position) { |
Sinterbaas | 0:ec2f323f6388 | 30 | this->turnLeft(); |
Sinterbaas | 0:ec2f323f6388 | 31 | |
Sinterbaas | 0:ec2f323f6388 | 32 | while (1) { |
Sinterbaas | 0:ec2f323f6388 | 33 | if (this->getPosition() <= position) { |
Sinterbaas | 0:ec2f323f6388 | 34 | this->stop(); |
Sinterbaas | 0:ec2f323f6388 | 35 | break; |
Sinterbaas | 0:ec2f323f6388 | 36 | } |
Sinterbaas | 0:ec2f323f6388 | 37 | } |
Sinterbaas | 0:ec2f323f6388 | 38 | } |
Sinterbaas | 0:ec2f323f6388 | 39 | else { |
Sinterbaas | 0:ec2f323f6388 | 40 | this->turnRight(); |
Sinterbaas | 0:ec2f323f6388 | 41 | |
Sinterbaas | 0:ec2f323f6388 | 42 | while (1) { |
Sinterbaas | 0:ec2f323f6388 | 43 | if (this->getPosition() >= position) { |
Sinterbaas | 0:ec2f323f6388 | 44 | this->stop(); |
Sinterbaas | 0:ec2f323f6388 | 45 | break; |
Sinterbaas | 0:ec2f323f6388 | 46 | } |
Sinterbaas | 0:ec2f323f6388 | 47 | } |
Sinterbaas | 0:ec2f323f6388 | 48 | } |
Sinterbaas | 0:ec2f323f6388 | 49 | } |
Sinterbaas | 0:ec2f323f6388 | 50 | |
Sinterbaas | 0:ec2f323f6388 | 51 | |
Sinterbaas | 0:ec2f323f6388 | 52 | float MotorController::getPosition () { |
Sinterbaas | 0:ec2f323f6388 | 53 | return this->motorInput.read() * 100.0f; |
Sinterbaas | 0:ec2f323f6388 | 54 | } |