StepperDriver modification
StepperDriver.cpp
- Committer:
- tbjazic
- Date:
- 2016-12-01
- Revision:
- 0:12be56dc6182
- Child:
- 1:9888802e71b9
File content as of revision 0:12be56dc6182:
#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; }