/* Program 2 http://www.bristolwatch.com/arduino/arduino_unipolar_stepper.htm Lewis Loflin lewis@bvu.net This program works much the way program 1 does. In this case we send the delay time between steps to the subroutine and not read the analog in every time. Thus we can program an unlimited combinations for speed, steps, and direction. Stepper motor demo for pf35t-48 and 55mod48 and Airpax This particular stepper motor is 7.5 degrees per step so it requires 48 steps for 360 degrees. Another motor this circuit/program was tested on was a Teac motor removed from a 5.25 inch floppy drive. At 1.8 degrees per step it required 200 steps for 360 degrees. All wire colors were brown. Compiled size 1756 bytes. */ #define black 8 // Q1 #define brown 9 // Q2 #define orange 10 //Q3 #define yellow 11 //Q4 #define CW 3 // Sw0 in schematic #define CCW 4 // Sw2 in schematic void setup() { pinMode(black, OUTPUT); pinMode(brown, OUTPUT); pinMode(orange, OUTPUT); pinMode(yellow, OUTPUT); pinMode(CW, INPUT); pinMode(CCW, INPUT); digitalWrite(CW, 1); // pull up on digitalWrite(CCW,1); // pull up on digitalWrite(black, 0); digitalWrite(brown, 0); digitalWrite(orange, 0); digitalWrite(yellow, 0); } void loop() { if (!digitalRead(CW)) { // this will speed up forward(200, 50); reverse(200, 40); forward(200, 30); reverse(200, 20); forward(200, 10); reverse(200, 5); all_coils_off(); } if (!digitalRead(CCW)) { // random reverse(28, 100); forward(100, 50); reverse(200, 5); reverse(75, 150); forward(50, 50); reverse(125, 20); all_coils_off(); } } // end loop void all_coils_off(void) { digitalWrite(black, 0); digitalWrite(brown, 0); digitalWrite(orange, 0); digitalWrite(yellow, 0); } void reverse(int i, int j) { while (1) { digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 1); digitalWrite(yellow, 0); delay(j); i--; if (i < 1) break; digitalWrite(black, 0); digitalWrite(brown, 1); digitalWrite(orange, 1); digitalWrite(yellow, 0); delay(j); i--; if (i < 1) break; digitalWrite(black, 0); digitalWrite(brown, 1); digitalWrite(orange, 0); digitalWrite(yellow, 1); delay(j); i--; if (i < 1) break; digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 0); digitalWrite(yellow, 1); delay(j); i--; if (i < 1) break; } } void forward(int i, int j) { while (1) { digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 0); digitalWrite(yellow, 1); delay(j); i--; if (i < 1) break; digitalWrite(black, 0); digitalWrite(brown, 1); digitalWrite(orange, 0); digitalWrite(yellow, 1); delay(j); i--; if (i < 1) break; digitalWrite(black, 0); digitalWrite(brown, 1); digitalWrite(orange, 1); digitalWrite(yellow, 0); delay(j); i--; if (i < 1) break; digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 1); digitalWrite(yellow, 0); delay(j); i--; if (i < 1) break; } }