AP1017 library for the Rev.E hardware with expanded capabilities.
Fork of AP1017 by
AP1017.cpp@12:bebb667c182f, 2018-05-04 (annotated)
- Committer:
- tkstreet
- Date:
- Fri May 04 19:01:41 2018 +0000
- Revision:
- 12:bebb667c182f
- Parent:
- 11:ac867fa4aa10
Removed AKDP-dependent debugging commands from library.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |