Utility class for controlling a servo system motor.

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?

UserRevisionLine numberNew 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 }