#define Ap 10
#define Am 11
#define Bp 9
#define Bm 8
int stepCount = 0;
int stepsPerMove = 200; // steps in one direction 400 steps for 360 rotation
int dir = 1; // 1 = CW, -1 = CCW
void setup() {
pinMode(Ap, OUTPUT);
pinMode(Am, OUTPUT);
pinMode(Bp, OUTPUT);
pinMode(Bm, OUTPUT);
}
void loop() {
int step = stepCount % 4;
if(dir == 1)
stepWave(step); // CW
else
stepWave(3 - step); // CCW (reverse order)
stepCount++;
delay(50); // adjust speed
if(stepCount >= stepsPerMove) {
stepCount = 0; // reset counter
dir = -dir; // reverse direction
}
}
// Full-step wave drive (one coil at a time)
void stepWave(int step) {
switch(step) {
case 0: digitalWrite(Ap,HIGH); digitalWrite(Am,LOW); digitalWrite(Bp,LOW); digitalWrite(Bm,LOW); break;
case 1: digitalWrite(Ap,LOW); digitalWrite(Am,LOW); digitalWrite(Bp,HIGH); digitalWrite(Bm,LOW); break;
case 2: digitalWrite(Ap,LOW); digitalWrite(Am,HIGH); digitalWrite(Bp,LOW); digitalWrite(Bm,LOW); break;
case 3: digitalWrite(Ap,LOW); digitalWrite(Am,LOW); digitalWrite(Bp,LOW); digitalWrite(Bm,HIGH); break;
}
}