StepperDriver modification
Diff: StepperDriver.cpp
- Revision:
- 0:12be56dc6182
- Child:
- 1:9888802e71b9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/StepperDriver.cpp Thu Dec 01 13:35:45 2016 +0000 @@ -0,0 +1,52 @@ +#include "mbed.h" +#include "StepperDriver.h" + +StepperDriver::StepperDriver(PinName outputPin, PinName directionPin) : output(outputPin), direction(directionPin) { + currentPosition = previousPosition = desiredPosition = 0; + maxPosition = 500; + minPosition = 0; + homePosition = (maxPosition - minPosition) / 2; +} + +void StepperDriver::setPosition(uint32_t position) { + if (position >= minPosition && position <= maxPosition) { + desiredPosition = position; + } + if (desiredPosition != currentPosition && !isTickerAttached) { + attachTicker(); + } +} + +void StepperDriver::update() { + if (desiredPosition > currentPosition) { + direction = 1; + currentPosition++; + generateImpulse(); + } else if (desiredPosition < currentPosition) { + direction = 0; + currentPosition--; + generateImpulse(); + } else { + detachTicker(); + } + previousPosition = currentPosition; +} + +void StepperDriver::attachTicker() { + ticker.attach(this, &StepperDriver::update, 4e-3); + isTickerAttached = true; +} + +void StepperDriver::detachTicker() { + ticker.detach(); + isTickerAttached = false; +} + +void StepperDriver::generateImpulse() { + output = 1; + timeout.attach(this, &StepperDriver::turnOutputOff, 100e-6); +} + +void StepperDriver::turnOutputOff() { + output = 0; +} \ No newline at end of file