/* Webpage: http://www.bristolwatch.com/L298N/L298N_arduino.htm Lewis Loflin lewis@bvu.net This demo uses a L298N dual H-bridge to operate a bi-polar stepper motor. The colors are the actual color of the wires on several units removed from junk printers. Numbers such as Pm425-048 and Pm35s-048. This also worked on a unipolar stepper such as a Portescape s6mo48 from Ebay leaving the red/green wires that went to +12 disconnected and operating at 24 volts. */ #define CW 2 #define CCW 3 #define ENA 8 #define ENB 13 #define black 9 // In1 #define brown 10 // In2 #define orange 11 // In3 #define yellow 12 // In4 void setup() { DDRB = 0x3f; // Digital pins 8-13 output PORTB = 0x00; // all outputs Dp8-13 set to off pinMode(CW, INPUT); pinMode(CCW, INPUT); digitalWrite(CW, 1); // pullup on digitalWrite(CCW,1); // pullup on } void loop() { if (!digitalRead(CW)) forward(480, 0); if (!digitalRead(CCW)) reverse(480, 0); } // end loop void reverse(int i, int j) { // Pin 8 Enable A Pin 13 Enable B on digitalWrite(ENA, HIGH); digitalWrite(ENB, HIGH); j = j + 10; while (1) { 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; digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 1); digitalWrite(yellow, 0); delay(j); i--; if (i < 1) break; } // all outputs to stepper off digitalWrite(ENA, LOW); digitalWrite(ENB, LOW); } // end reverse() void forward(int i, int j) { // Pin 8 Enable A Pin 13 Enable B on digitalWrite(ENA, HIGH); digitalWrite(ENB, HIGH); j = j + 10; while (1) { digitalWrite(black, 1); digitalWrite(brown, 0); digitalWrite(orange, 1); digitalWrite(yellow, 0); 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; 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; } // all outputs to stepper off digitalWrite(ENA, LOW); digitalWrite(ENB, LOW); } // end forward()