/* Stepper Motor Controller by Kevin Filteau 2010-05-29 Playwithmyled.com */ // Motor controller pins. #define pinMotorCtrlA 4 #define pinMotorCtrlB 7 #define pinMotorEnA 5 #define pinMotorEnB 6 // Direction constants. #define GOLEFT 0 #define GORIGHT 1 // Motor states and position. boolean motorRunning = false; int motorMax = 700; int motorPos = 0; /********************************************** MOTOR **********************************************/ // Setup the motor. void motorSetup() { pinMode(pinMotorCtrlA, OUTPUT); pinMode(pinMotorCtrlB, OUTPUT); pinMode(pinMotorEnA, OUTPUT); pinMode(pinMotorEnB, OUTPUT); // Everybody to LOW. digitalWrite(pinMotorCtrlA, LOW); digitalWrite(pinMotorCtrlB, LOW); digitalWrite(pinMotorEnA, LOW); digitalWrite(pinMotorEnB, LOW); } // Free the motor. void motorFree() { digitalWrite(pinMotorEnA, LOW); digitalWrite(pinMotorEnB, LOW); } // Make the motor spin one step in the direction specified. void motorSpin(boolean dir) { static int pos = 0; // Starting step pos. int stepsSeq[] = {0xC0,0x30,0x40,0x20}; // Registry value. int st; // Timing static unsigned long previousMillis; long interval = 3; if(millis() - previousMillis > interval) { previousMillis = millis(); st = stepsSeq[pos]; if( dir == GOLEFT ) { pos++; if(pos>3) pos=0; motorPos++; } else { pos--; if(pos<0) pos=3; motorPos--; } PORTD &= 0xF; PORTD |= st; } } /********************************************** MAIN FUNCTIONS. **********************************************/ void setup() { motorSetup(); motorReset(); } void loop() { motorSpin(GOLEFT); // motorSpin(GORIGHT); }