I had a similar problem using the 28BYJ-48 5V motor, it would only travel clockwise.
I have modified the library as well as the sketch to overcome the direction issue and to add a new feature.
The new feature is Half step mode which has 8 steps rather than 4
I also adjusted the 4 wire step sequence which I believe solved the direction issue
Only just joined the forum so not sure how best to share this info, so i have added the details into this post
There are 2 files below, the stepper.cpp updated file will have to be posted separately owing to size limits.
You will probably want to make copies of your existing stepper.h and stepper.cpp for safety at this point.
Then copy the text between the scissor marks and save the first as stepper.h in your library folder
The last file is the sketch.
-------------- start of stepper.h ------------------------------------------------------------>
/*
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
Add Half Step mode (0.5) by D Traynor
Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires
When wiring multiple stepper motors to a microcontroller,
you quickly run out of output pins, with each motor requiring 4 connections.
By making use of the fact that at any time two of the four motor
coils are the inverse of the other two, the number of
control connections can be reduced from 4 to 2.
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.
The sequence of for fullstep control signals for 4 control wires is as follows:
Modified from the original 1010, 0110, 0101, 1001 - since my motor would not reverse
Step C0 C1 C2 C3
1 0 0 1 1
2 1 0 0 1
3 1 1 0 0
4 0 1 1 0
Added this 8 step sequence for halfstep control for 4 control wires as follows:
Step C0 C1 C2 C3
1 1 0 0 1
2 1 0 0 0
3 1 1 0 0
4 0 1 0 0
5 0 1 1 0
6 0 0 1 0
7 0 0 1 1
8 0 0 0 1
The sequence of controls signals for 2 control wires is as follows
(columns C1 and C2 from above):
Step C0 C1
1 0 1
2 1 1
3 1 0
4 0 0
The circuits can be found at
*/
// ensure this library description is only included once
#ifndef Stepper_h
#define Stepper_h
// library interface description
class Stepper {
public:
// constructors:
// Additional parameter for the modulo count
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int mod_count);
Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4, int mod_count);
// speed setter method:
void setSpeed(long whatSpeed);
// mover method:
void step(int number_of_steps);
int version(void);
private:
void stepMotor(int this_step);
int direction; // Direction of rotation
int speed; // Speed in RPMs
unsigned long step_delay; // delay between steps, in ms, 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
// motor pin numbers:
int motor_pin_1;
int motor_pin_2;
int motor_pin_3;
int motor_pin_4;
// Used to indicate the number of steps in each sequence
int mod_count;
long last_step_time; // time stamp in ms of when the last step was taken
};
#endif
<------------------------ End of stepper.h ------------------------------------
------------------------- Start of Sketch -------------------------------------->
/*
Stepper Motor Control - one revolution
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor should revolve one revolution in one direction, then
one revolution in the other direction.
Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe
Modified 19 Jan 2013
by D Traynor
*/
#include <Stepper.h>
int step_mode = 8; // 4 = full, 8 = half
int stepsPerRevolution = 2048 * (step_mode/4) ; // change this to fit the number of steps per revolution for your motor [DT use 2048]
// twice as many SPR for halfstep mode
int mysteps = 1 * stepsPerRevolution;
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution,8,9,10,11,step_mode);
int coords[] = {-512,1024,256,-2048,512,256};
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
// This from the original example, used this to get things going (v0.5)
// Either uncomment the top half or the bottom depending on desired function
//Serial.println("clockwise");
//myStepper.step(mysteps);
//delay(500);
// step one revolution in the other direction:
//Serial.println("counterclockwise");
//myStepper.step(-mysteps);
//delay(500);
// 2nd Example -> motor steps to the named points in the coords array
int i;
for (i = 0; i<6; i++) {
int point = coords*;*
- Serial.println("Next point ");*
- Serial.println(point);*
- myStepper.step(point);*
- delay(500);*
- }*
}
<------------------------------- End of Sketch -------------------------