AP1017 library for the Rev.E hardware with expanded capabilities.
Fork of AP1017 by
AP1017.cpp
- Committer:
- tkstreet
- Date:
- 2018-05-01
- Revision:
- 11:ac867fa4aa10
- Parent:
- 10:16d45e3f4be3
- Child:
- 12:bebb667c182f
File content as of revision 11:ac867fa4aa10:
#include "AP1017.h" /******************** Constructors & Destructors ****************************/ // Default constructor AP1017::AP1017(DigitalOut* InputA, DigitalOut* InputB, DigitalOut* Enable) : motorOn(false), dutyCycle(0.0) { inA = InputA; inB = InputB; en = Enable; // Initialize RSV as output en->write(0); // Turn motor off } // Default destructor AP1017::~AP1017(void) { stop(); delete inA, inB, en; } /*********************** Member Functions ***********************************/ AP1017::Status AP1017::setDirection(AP1017::Rotation dir) { direction = dir; switch(direction){ case DIRECTION_CW: // direction = 0x00 if(isMotorOn()) { MSG("#Error: Cannot change direction while motor is running.\r\n"); return ERROR_MOTORON; }else { inA->write(1); inB->write(0); MSG("#Direction: CCW\r\n"); } break; case DIRECTION_CCW: // direction = 0x01 if(isMotorOn()) { MSG("#Error: Cannot change direction while motor is running.\r\n"); return ERROR_MOTORON; }else { inA->write(0); inB->write(1); MSG("#Direction: CW\r\n"); } break; case DIRECTION_BRAKE: // direction = 0x03 inA->write(1); inB->write(1); MSG("#Direction: Brake\r\n"); break; case DIRECTION_COAST: // direction = 0x04 inA->write(0); inB->write(0); motorOn = false; MSG("#Direction: Coast\r\n"); break; default: return ERROR_DIRECTION; } return SUCCESS; } AP1017::Rotation AP1017::getDirection(void) { MSG("#Direction: "); switch(direction){ case DIRECTION_CW: MSG("CW\r\n"); break; case DIRECTION_CCW: MSG("CCW\r\n"); break; case DIRECTION_COAST: MSG("Coast\r\n"); break; case DIRECTION_BRAKE: MSG("Brake\r\n"); break; default: MSG("Error: Invalid direction\r\n"); } return direction; } AP1017::Status AP1017::setSpeed(double dc) { if((dc <= 100.0) && (dc >= 0.0)) { dutyCycle = dc/100.0; if(motorOn == true){ MSG("Speed setting not yet implemented.\r\n"); //MSG("#Changed running motor speed: %.1f%%.\r\n", dc); } } else { dutyCycle = 0.0; return ERROR_DUTY_CYCLE; } return SUCCESS; } double AP1017::getSpeed(void) { MSG("Speed: %.1f%%\r\n.", dutyCycle*100.0); return dutyCycle*100.0; } AP1017::Status AP1017::start(void) { en->write(1); motorOn = true; // Set ON flag return SUCCESS; } AP1017::Status AP1017::stop(void) { en->write(0); // set RSV low motorOn = false; // Set OFF flag return SUCCESS; } AP1017::Status AP1017::brake(void) { setDirection(DIRECTION_BRAKE); return SUCCESS; } AP1017::Status AP1017::coast(void) { setDirection(DIRECTION_COAST); return SUCCESS; } bool AP1017::isMotorOn(void) { return motorOn; }