diff --git a/libraries/Stepper/Stepper.h b/libraries/Stepper/Stepper.h index 4094aee9077..a52800a7fe8 100644 --- a/libraries/Stepper/Stepper.h +++ b/libraries/Stepper/Stepper.h @@ -1,10 +1,11 @@ /* - Stepper.h - - Stepper library for Wiring/Arduino - Version 0.4 + Stepper.h - - Stepper library for Wiring/Arduino - Version 0.5 Original library (0.1) by Tom Igoe. Two-wire modifications (0.2) by Sebastian Gassner Combination version (0.3) by Tom Igoe and David Mellis Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley + High-speed stepping mod and timer rollover fix (0.5) by Eugene Kozlenko Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires @@ -18,7 +19,8 @@ A slightly modified circuit around a Darlington transistor array or an L293 H-bridge connects to only 2 microcontroler pins, inverts the signals received, and delivers the 4 (2 plus 2 inverted ones) output signals required - for driving a stepper motor. + for driving a stepper motor. Similarly the Arduino motor shields 2 direction pins + may be used. The sequence of control signals for 4 control wires is as follows: @@ -65,7 +67,7 @@ class Stepper { int direction; // Direction of rotation int speed; // Speed in RPMs - unsigned long step_delay; // delay between steps, in ms, based on speed + unsigned long step_delay; // delay between steps, in us, based on speed int number_of_steps; // total number of steps this motor can take int pin_count; // whether you're driving the motor with 2 or 4 pins int step_number; // which step the motor is on @@ -76,7 +78,7 @@ class Stepper { int motor_pin_3; int motor_pin_4; - long last_step_time; // time stamp in ms of when the last step was taken + unsigned long last_step_time; // time stamp in us of when the last step was taken }; #endif diff --git a/libraries/Stepper/Stepper.cpp b/libraries/Stepper/stepper.cpp similarity index 91% rename from libraries/Stepper/Stepper.cpp rename to libraries/Stepper/stepper.cpp index 5d6b5e53664..e64cb1649a3 100644 --- a/libraries/Stepper/Stepper.cpp +++ b/libraries/Stepper/stepper.cpp @@ -1,10 +1,11 @@ /* - Stepper.cpp - - Stepper library for Wiring/Arduino - Version 0.4 + Stepper.cpp - - Stepper library for Wiring/Arduino - Version 0.5 Original library (0.1) by Tom Igoe. Two-wire modifications (0.2) by Sebastian Gassner Combination version (0.3) by Tom Igoe and David Mellis Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley + High-speed stepping mod and timer rollover fix (0.5) by Eugene Kozlenko Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires @@ -18,7 +19,8 @@ A slightly modified circuit around a Darlington transistor array or an L293 H-bridge connects to only 2 microcontroler pins, inverts the signals received, and delivers the 4 (2 plus 2 inverted ones) output signals required - for driving a stepper motor. + for driving a stepper motor. Similarly the Arduino motor shields 2 direction pins + may be used. The sequence of control signals for 4 control wires is as follows: @@ -57,7 +59,7 @@ Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2) this->step_number = 0; // which step the motor is on this->speed = 0; // the motor speed, in revolutions per minute this->direction = 0; // motor direction - this->last_step_time = 0; // time stamp in ms of the last step taken + this->last_step_time = 0; // time stamp in us of the last step taken this->number_of_steps = number_of_steps; // total number of steps for this motor // Arduino pins for the motor control connection: @@ -87,7 +89,7 @@ Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int moto this->step_number = 0; // which step the motor is on this->speed = 0; // the motor speed, in revolutions per minute this->direction = 0; // motor direction - this->last_step_time = 0; // time stamp in ms of the last step taken + this->last_step_time = 0; // time stamp in us of the last step taken this->number_of_steps = number_of_steps; // total number of steps for this motor // Arduino pins for the motor control connection: @@ -112,7 +114,7 @@ Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int moto */ void Stepper::setSpeed(long whatSpeed) { - this->step_delay = 60L * 1000L / this->number_of_steps / whatSpeed; + this->step_delay = 60L * 1000L * 1000L / this->number_of_steps / whatSpeed; } /* @@ -131,9 +133,9 @@ void Stepper::step(int steps_to_move) // decrement the number of steps, moving one step each time: while(steps_left > 0) { // move only if the appropriate delay has passed: - if (millis() - this->last_step_time >= this->step_delay) { + if (micros() - this->last_step_time >= this->step_delay || micros() < this->last_step_time) { // get the timeStamp of when you stepped: - this->last_step_time = millis(); + this->last_step_time = micros(); // increment or decrement the step number, // depending on direction: if (this->direction == 1) { @@ -216,5 +218,5 @@ void Stepper::stepMotor(int thisStep) */ int Stepper::version(void) { - return 4; + return 5; }