Stopping a stepper motor

Hi guys,

For my project i have to push a button once to activate a stepper motor. If the button is pushed the stepper motor have to spin for around 5-10 seconds. Now i achieved that if i push the button the stepper spins and doesn't stop anymore. Can somebody help me to get the stepper motor to stop after 5-10 seconds. This is the code i have for now

int bluepin = 4;
int pinkpin = 5;
int yellowpin = 6;
int orangepin = 7;
int bluepin2 = 8;
int pinkpin2 = 9;
int yellowpin2 = 10;
int orangepin2 = 11;
int currentStep = 0;

int buttonpin = 2;
int buttonState = 0;
int buttonpin2 = 3;
int x = -1 ;

void setup() {
  // put your setup code here, to run once:
  pinMode (bluepin, OUTPUT);
  pinMode (pinkpin, OUTPUT);
  pinMode (yellowpin, OUTPUT);
  pinMode (orangepin, OUTPUT);
  pinMode(buttonpin, INPUT);
  digitalWrite(bluepin, LOW);
  digitalWrite(pinkpin, LOW);
  digitalWrite(yellowpin, LOW);
  digitalWrite(orangepin, LOW);
  pinMode (bluepin2, OUTPUT);
  pinMode (pinkpin2, OUTPUT);
  pinMode (yellowpin2, OUTPUT);
  pinMode (orangepin2, OUTPUT);
  pinMode(buttonpin2, INPUT);
  digitalWrite(bluepin2, LOW);
  digitalWrite(pinkpin2, LOW);
  digitalWrite(yellowpin2, LOW);
  digitalWrite(orangepin2, LOW);
  Serial.begin(9600);
}
void loop() {
  buttonState = digitalRead(buttonpin);

  if ((buttonState == HIGH) && (x < 0)) {
    x = --x;
  }
  if ( x  > 0) {

    // turn Motor on:
    switch (currentStep) {
      case 0:
        digitalWrite(bluepin, HIGH);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, LOW);
        break;
      case 1:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, HIGH);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, LOW);
        break;
      case 2:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, HIGH);
        digitalWrite(orangepin, LOW);
        break;
      case 3:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, HIGH);
        break;
    }
    currentStep = (++currentStep < 4) ? currentStep : 0;

    delay(2);
  }
}

Hi mariodenotter,
next time you post code (and every time you develop code) hit CTRL T to autoformat. It makes it much easier to read. :slight_smile:

int bluepin = 4;
int pinkpin = 5;
int yellowpin = 6;
int orangepin = 7;
int bluepin2 = 8;
int pinkpin2 = 9;
int yellowpin2 = 10;
int orangepin2 = 11;
int currentStep = 0;

int buttonpin = 2;
int buttonState = 0;
int buttonpin2 = 3;
int x = -1 ;

void setup() {
  // put your setup code here, to run once:
  pinMode (bluepin, OUTPUT);
  pinMode (pinkpin, OUTPUT);
  pinMode (yellowpin, OUTPUT);
  pinMode (orangepin, OUTPUT);
  pinMode(buttonpin, INPUT);
  digitalWrite(bluepin, LOW);
  digitalWrite(pinkpin, LOW);
  digitalWrite(yellowpin, LOW);
  digitalWrite(orangepin, LOW);
  pinMode (bluepin2, OUTPUT);
  pinMode (pinkpin2, OUTPUT);
  pinMode (yellowpin2, OUTPUT);
  pinMode (orangepin2, OUTPUT);
  pinMode(buttonpin2, INPUT);
  digitalWrite(bluepin2, LOW);
  digitalWrite(pinkpin2, LOW);
  digitalWrite(yellowpin2, LOW);
  digitalWrite(orangepin2, LOW);
  Serial.begin(9600);
}
void loop() {
  buttonState = digitalRead(buttonpin);

  if ((buttonState == HIGH) && (x < 0)) {
    x = --x;
  }
  if ( x  > 0) {

    // turn Motor on:
    switch (currentStep) {
      case 0:
        digitalWrite(bluepin, HIGH);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, LOW);
        break;
      case 1:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, HIGH);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, LOW);
        break;
      case 2:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, HIGH);
        digitalWrite(orangepin, LOW);
        break;
      case 3:
        digitalWrite(bluepin, LOW);
        digitalWrite(pinkpin, LOW);
        digitalWrite(yellowpin, LOW);
        digitalWrite(orangepin, HIGH);
        break;
    }
    currentStep = (++currentStep < 4) ? currentStep : 0;

    delay(2);
  }
}

If you want the motor to stop after a period of time then save the value of millis() when you press the start button and then check if the time has expired - probably like this

if (millis() - buttonStartMillis >= 5000 && x == 1) {
   x = -1;
}

...R
Stepper Motor Basics
Simple Stepper Code

Looks like the obfuscated C competition here:

  if ((buttonState == HIGH) && (x < 0)) {
    x = --x;
  }
  if ( x  > 0) {

Can this be made readable?