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);
};