AP1017 library for the Rev.E hardware with expanded capabilities.

Fork of AP1017 by AKM Development Platform

Committer:
tkstreet
Date:
Fri Aug 10 17:31:09 2018 +0000
Revision:
13:1bea9a9412cb
Parent:
12:bebb667c182f
Removed calls to debug library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tkstreet 0:a0435a630c5d 1 #include "AP1017.h"
tkstreet 0:a0435a630c5d 2
tkstreet 0:a0435a630c5d 3 /******************** Constructors & Destructors ****************************/
tkstreet 0:a0435a630c5d 4
tkstreet 0:a0435a630c5d 5 // Default constructor
tkstreet 11:ac867fa4aa10 6 AP1017::AP1017(DigitalOut* InputA, DigitalOut* InputB, DigitalOut* Enable) : motorOn(false), dutyCycle(0.0)
tkstreet 0:a0435a630c5d 7 {
tkstreet 11:ac867fa4aa10 8 inA = InputA;
tkstreet 11:ac867fa4aa10 9 inB = InputB;
tkstreet 11:ac867fa4aa10 10 en = Enable;
tkstreet 6:d4d3bc82d446 11
tkstreet 6:d4d3bc82d446 12 // Initialize RSV as output
tkstreet 11:ac867fa4aa10 13 en->write(0); // Turn motor off
tkstreet 0:a0435a630c5d 14 }
tkstreet 0:a0435a630c5d 15
tkstreet 0:a0435a630c5d 16 // Default destructor
tkstreet 0:a0435a630c5d 17 AP1017::~AP1017(void)
tkstreet 0:a0435a630c5d 18 {
tkstreet 3:f8e70f639ed0 19 stop();
tkstreet 11:ac867fa4aa10 20 delete inA, inB, en;
tkstreet 0:a0435a630c5d 21 }
tkstreet 0:a0435a630c5d 22
tkstreet 0:a0435a630c5d 23 /*********************** Member Functions ***********************************/
tkstreet 0:a0435a630c5d 24
tkstreet 4:c36159701cde 25 AP1017::Status AP1017::setDirection(AP1017::Rotation dir)
tkstreet 0:a0435a630c5d 26 {
tkstreet 3:f8e70f639ed0 27 direction = dir;
tkstreet 4:c36159701cde 28
tkstreet 3:f8e70f639ed0 29 switch(direction){
tkstreet 4:c36159701cde 30 case DIRECTION_CW: // direction = 0x00
tkstreet 4:c36159701cde 31 if(isMotorOn())
tkstreet 4:c36159701cde 32 {
tkstreet 0:a0435a630c5d 33 return ERROR_MOTORON;
tkstreet 4:c36159701cde 34 }else
tkstreet 4:c36159701cde 35 {
tkstreet 4:c36159701cde 36 inA->write(1);
tkstreet 4:c36159701cde 37 inB->write(0);
tkstreet 4:c36159701cde 38 }
tkstreet 0:a0435a630c5d 39 break;
tkstreet 4:c36159701cde 40 case DIRECTION_CCW: // direction = 0x01
tkstreet 4:c36159701cde 41 if(isMotorOn())
tkstreet 4:c36159701cde 42 {
tkstreet 0:a0435a630c5d 43 return ERROR_MOTORON;
tkstreet 4:c36159701cde 44 }else
tkstreet 4:c36159701cde 45 {
tkstreet 4:c36159701cde 46 inA->write(0);
tkstreet 4:c36159701cde 47 inB->write(1);
tkstreet 4:c36159701cde 48 }
tkstreet 0:a0435a630c5d 49 break;
tkstreet 4:c36159701cde 50 case DIRECTION_BRAKE: // direction = 0x03
tkstreet 1:4d4c77589134 51 inA->write(1);
tkstreet 1:4d4c77589134 52 inB->write(1);
tkstreet 0:a0435a630c5d 53 break;
tkstreet 4:c36159701cde 54 case DIRECTION_COAST: // direction = 0x04
tkstreet 1:4d4c77589134 55 inA->write(0);
tkstreet 1:4d4c77589134 56 inB->write(0);
tkstreet 0:a0435a630c5d 57 motorOn = false;
tkstreet 0:a0435a630c5d 58 break;
tkstreet 0:a0435a630c5d 59 default:
tkstreet 0:a0435a630c5d 60 return ERROR_DIRECTION;
tkstreet 0:a0435a630c5d 61 }
tkstreet 0:a0435a630c5d 62
tkstreet 0:a0435a630c5d 63 return SUCCESS;
tkstreet 0:a0435a630c5d 64 }
tkstreet 0:a0435a630c5d 65
tkstreet 3:f8e70f639ed0 66
tkstreet 3:f8e70f639ed0 67 AP1017::Rotation AP1017::getDirection(void)
tkstreet 0:a0435a630c5d 68 {
tkstreet 3:f8e70f639ed0 69 return direction;
tkstreet 3:f8e70f639ed0 70 }
tkstreet 3:f8e70f639ed0 71
tkstreet 0:a0435a630c5d 72
tkstreet 11:ac867fa4aa10 73 AP1017::Status AP1017::setSpeed(double dc)
tkstreet 3:f8e70f639ed0 74 {
tkstreet 9:1ca7d16de1c4 75 if((dc <= 100.0) && (dc >= 0.0))
tkstreet 9:1ca7d16de1c4 76 {
tkstreet 3:f8e70f639ed0 77 dutyCycle = dc/100.0;
tkstreet 0:a0435a630c5d 78
tkstreet 0:a0435a630c5d 79 if(motorOn == true){
tkstreet 12:bebb667c182f 80 return ERROR_MOTORON;
tkstreet 0:a0435a630c5d 81 }
tkstreet 0:a0435a630c5d 82 }
tkstreet 9:1ca7d16de1c4 83 else
tkstreet 9:1ca7d16de1c4 84 {
tkstreet 0:a0435a630c5d 85 dutyCycle = 0.0;
tkstreet 0:a0435a630c5d 86 return ERROR_DUTY_CYCLE;
tkstreet 0:a0435a630c5d 87 }
tkstreet 0:a0435a630c5d 88
tkstreet 0:a0435a630c5d 89 return SUCCESS;
tkstreet 0:a0435a630c5d 90 }
tkstreet 0:a0435a630c5d 91
tkstreet 0:a0435a630c5d 92
tkstreet 11:ac867fa4aa10 93 double AP1017::getSpeed(void)
tkstreet 0:a0435a630c5d 94 {
tkstreet 3:f8e70f639ed0 95 return dutyCycle*100.0;
tkstreet 0:a0435a630c5d 96 }
tkstreet 0:a0435a630c5d 97
tkstreet 0:a0435a630c5d 98
tkstreet 3:f8e70f639ed0 99 AP1017::Status AP1017::start(void)
tkstreet 0:a0435a630c5d 100 {
tkstreet 11:ac867fa4aa10 101 en->write(1);
tkstreet 12:bebb667c182f 102 motorOn = true; // Set ON flag
tkstreet 0:a0435a630c5d 103
tkstreet 0:a0435a630c5d 104 return SUCCESS;
tkstreet 0:a0435a630c5d 105 }
tkstreet 0:a0435a630c5d 106
tkstreet 0:a0435a630c5d 107
tkstreet 3:f8e70f639ed0 108 AP1017::Status AP1017::stop(void)
tkstreet 0:a0435a630c5d 109 {
tkstreet 11:ac867fa4aa10 110 en->write(0); // set RSV low
tkstreet 0:a0435a630c5d 111 motorOn = false; // Set OFF flag
tkstreet 0:a0435a630c5d 112
tkstreet 0:a0435a630c5d 113 return SUCCESS;
tkstreet 0:a0435a630c5d 114 }
tkstreet 0:a0435a630c5d 115
tkstreet 3:f8e70f639ed0 116 AP1017::Status AP1017::brake(void)
tkstreet 0:a0435a630c5d 117 {
tkstreet 0:a0435a630c5d 118 setDirection(DIRECTION_BRAKE);
tkstreet 0:a0435a630c5d 119 return SUCCESS;
tkstreet 0:a0435a630c5d 120 }
tkstreet 0:a0435a630c5d 121
tkstreet 3:f8e70f639ed0 122 AP1017::Status AP1017::coast(void)
tkstreet 0:a0435a630c5d 123 {
tkstreet 0:a0435a630c5d 124 setDirection(DIRECTION_COAST);
tkstreet 0:a0435a630c5d 125 return SUCCESS;
tkstreet 4:c36159701cde 126 }
tkstreet 4:c36159701cde 127
tkstreet 4:c36159701cde 128 bool AP1017::isMotorOn(void)
tkstreet 4:c36159701cde 129 {
tkstreet 4:c36159701cde 130 return motorOn;
tkstreet 0:a0435a630c5d 131 }