diff --git a/examples/c++/stepmotor.cxx b/examples/c++/stepmotor.cxx index 4986f438..9357d5da 100644 --- a/examples/c++/stepmotor.cxx +++ b/examples/c++/stepmotor.cxx @@ -51,24 +51,24 @@ main(int argc, char **argv) while (doWork) { cout << "1 Revolution forward and back at 60 rpm" << endl; - sensor->setSpeed (60); + sensor->setSpeed(60); sensor->stepForward(200); - usleep (1000000); - sensor->stepBackwards(200); - usleep (1000000); + usleep(1000000); + sensor->stepBackward(200); + usleep(1000000); cout << "1 Revolution forward and back at 150 rpm" << endl; - sensor->setSpeed (150); + sensor->setSpeed(150); sensor->stepForward(200); - usleep (1000000); - sensor->stepBackwards(200); - usleep (1000000); + usleep(1000000); + sensor->stepBackward(200); + usleep(1000000); cout << "1 Revolution forward and back at 300 rpm" << endl; - sensor->setSpeed (300); - sensor->stepForward (200); + sensor->setSpeed(300); + sensor->stepForward(200); usleep (1000000); - sensor->stepBackwards (200); + sensor->stepBackward(200); usleep (1000000); } diff --git a/examples/java/StepMotorSample.java b/examples/java/StepMotorSample.java index 166c04d3..88cbe5a0 100644 --- a/examples/java/StepMotorSample.java +++ b/examples/java/StepMotorSample.java @@ -34,21 +34,21 @@ public class StepMotorSample { sensor.setSpeed(60); sensor.stepForward(200); Thread.sleep(1000); - sensor.stepBackwards(200); + sensor.stepBackward(200); Thread.sleep(1000); System.out.println("One complete rotation forward and back at 150 rpm."); sensor.setSpeed(150); sensor.stepForward(200); Thread.sleep(1000); - sensor.stepBackwards(200); + sensor.stepBackward(200); Thread.sleep(1000); System.out.println("One complete rotation forward and back at 300 rpm."); sensor.setSpeed(300); sensor.stepForward(200); Thread.sleep(1000); - sensor.stepBackwards(200); + sensor.stepBackward(200); Thread.sleep(1000); } // ! [Interesting] diff --git a/examples/javascript/stepmotor.js b/examples/javascript/stepmotor.js index c0de642a..51842a59 100644 --- a/examples/javascript/stepmotor.js +++ b/examples/javascript/stepmotor.js @@ -48,21 +48,21 @@ console.log("Rotating 1 revolution forward and back at 60 rpm."); stepper.setSpeed(60); stepper.stepForward(200); delay(1000); -stepper.stepBackwards(200); +stepper.stepBackward(200); delay(1000); console.log("Rotating 1 revolution forward and back at 150 rpm."); stepper.setSpeed(150); stepper.stepForward(200); delay(1000); -stepper.stepBackwards(200); +stepper.stepBackward(200); delay(1000); console.log("Rotating 1 revolution forward and back at 300 rpm."); stepper.setSpeed(300); stepper.stepForward(200); delay(1000); -stepper.stepBackwards(200); +stepper.stepBackward(200); delay(1000); stepper.quit(); diff --git a/examples/python/stepmotor.py b/examples/python/stepmotor.py index f32d9874..125ac711 100644 --- a/examples/python/stepmotor.py +++ b/examples/python/stepmotor.py @@ -46,19 +46,19 @@ print "Rotating 1 revolution forward and back at 60 rpm." stepper.setSpeed(60) stepper.stepForward(200) time.sleep(1) -stepper.stepBackwards(200) +stepper.stepBackward(200) time.sleep(1) print "Rotating 1 revolution forward and back at 150 rpm." stepper.setSpeed(150) stepper.stepForward(200) time.sleep(1) -stepper.stepBackwards(200) +stepper.stepBackward(200) time.sleep(1) print "Rotating 1 revolution forward and back at 300 rpm." stepper.setSpeed(300) stepper.stepForward(200) time.sleep(1) -stepper.stepBackwards(200) +stepper.stepBackward(200) time.sleep(1) diff --git a/src/stepmotor/stepmotor.cxx b/src/stepmotor/stepmotor.cxx index a84bcd66..574c5361 100644 --- a/src/stepmotor/stepmotor.cxx +++ b/src/stepmotor/stepmotor.cxx @@ -34,10 +34,13 @@ using namespace upm; using namespace std; StepMotor::StepMotor (int dirPin, int stePin, int steps, int enPin) - : m_dirPinCtx(dirPin), m_stePinCtx(stePin), m_enPinCtx(0), m_steps(steps) { + : m_dirPinCtx(dirPin), + m_stePinCtx(stePin), + m_enPinCtx(0), + m_steps(steps) { m_name = "StepMotor"; setSpeed(60); - setStep(0); + setPosition(0); if (m_dirPinCtx.dir(mraa::DIR_OUT) != mraa::SUCCESS) { throw std::runtime_error(string(__FUNCTION__) + @@ -95,7 +98,7 @@ StepMotor::setSpeed (int speed) { mraa::Result StepMotor::step (int ticks) { if (ticks < 0) { - return stepBackwards(abs(ticks)); + return stepBackward(abs(ticks)); } else { return stepForward(ticks); } @@ -106,37 +109,37 @@ StepMotor::stepForward (int ticks) { dirForward(); for (int i = 0; i < ticks; i++) { move(); - if (++m_position >= m_steps) { - m_position = 0; - } + m_position++; delayus(m_delay - MINPULSE_US - OVERHEAD_US); } return mraa::SUCCESS; } mraa::Result -StepMotor::stepBackwards (int ticks) { - dirBackwards(); +StepMotor::stepBackward (int ticks) { + dirBackward(); for (int i = 0; i < ticks; i++) { move(); - if (--m_position < 0) { - m_position = m_steps - 1; - } + m_position--; delayus(m_delay - MINPULSE_US - OVERHEAD_US); } return mraa::SUCCESS; } void -StepMotor::setStep (int step) { - if (step <= m_steps) { - m_position = step; - } +StepMotor::setPosition (int pos) { + m_position = pos; +} + +int +StepMotor::getPosition () { + return m_position; } int StepMotor::getStep () { - return m_position; + return m_position < 0 ? m_steps + m_position % m_steps : + m_position % m_steps; } void @@ -157,7 +160,7 @@ StepMotor::dirForward () { } mraa::Result -StepMotor::dirBackwards () { +StepMotor::dirBackward () { mraa::Result error = m_dirPinCtx.write(LOW); if (error != mraa::SUCCESS) { throw std::runtime_error(string(__FUNCTION__) + diff --git a/src/stepmotor/stepmotor.h b/src/stepmotor/stepmotor.h index c77ed658..1d996d91 100644 --- a/src/stepmotor/stepmotor.h +++ b/src/stepmotor/stepmotor.h @@ -69,7 +69,7 @@ namespace upm { * and/or microstepping on stepper drivers that support such features. * * @image html stepmotor.jpg - *
ECS1030 Sensor image provided by SparkFun* under + *
EasyDriver Sensor image provided by SparkFun* under * * CC BY-NC-SA-3.0. * @@ -128,20 +128,28 @@ class StepMotor { * * @param ticks Number of steps the motor moves */ - mraa::Result stepBackwards (int ticks); + mraa::Result stepBackward (int ticks); /** - * Sets the current step. Useful if the motor is not at 0 when the + * Sets the current position. Useful if the motor is not at 0 when the * driver is initialized. * - * @param step Current shaft position + * @param step Current position */ - void setStep (int step); + void setPosition (int pos); /** - * Gets the current step. + * Gets the current position. This is cumulative and the result of all + * the step commands sent to the motor. * - * @return Current shaft position. + * @return Stepper's position. + */ + int getPosition (); + + /** + * Gets the current step. This is relative to one revolution. + * + * @return Current step, ranges from 0 to number of steps per revolution. */ int getStep (); @@ -157,7 +165,7 @@ class StepMotor { int m_position; mraa::Result dirForward (); - mraa::Result dirBackwards (); + mraa::Result dirBackward (); void move (); void delayus (int us); };