MOTOR PASO A PASO

Hola muy buenas,
tengo la siguiente duda (dejo el trozo de código adjunto):

#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Stepper.h>

#define OLED 0x3C
Adafruit_SSD1306 display(-1);
LiquidCrystal_I2C LCD(0x27, 16, 2); 
#define STEPS 200
Stepper MOTOR ( STEPS, 4,5,6,7);

#define  WHITE_1 8
#define  WHITE_2 9
#define  WHITE_3 10
#define YELLOW_1 11
#define YELLOW_2 12

#define GREEN 13
#define BLUE 1
#define RED 0

void setup() {
  //SET DISPLAYS
  display.begin(SSD1306_SWITCHCAPVCC, OLED);
  display.clearDisplay();
  display.display();
  LCD.init();
  LCD.clear();
  LCD.backlight();

//MOTOR
MOTOR.setSpeed(0);
MOTOR.step(0);

  //PINMODE
pinMode( WHITE_1, OUTPUT);
pinMode( WHITE_2, OUTPUT);
pinMode( WHITE_3, OUTPUT);
pinMode( YELLOW_1, OUTPUT);
pinMode( YELLOW_2, OUTPUT);

pinMode( GREEN, INPUT);
pinMode( BLUE, INPUT);
pinMode( RED, INPUT);

//OLED

display.setTextSize (1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("PRESS GREEN: RESET");
display.setCursor(0,24);
display.print("PRESS RED: INCREASE");
display.display();

  LCD.setCursor(0,0);
  LCD.print("MOTOR LEVEL");
  LCD.setCursor(0,1);
  LCD.print("LEVEL MIN");

digitalWrite(WHITE_1, LOW);
digitalWrite(WHITE_2, LOW);
digitalWrite(WHITE_3, LOW);
digitalWrite(YELLOW_1, LOW);
digitalWrite(YELLOW_2, LOW);

}

void loop() {

// LEVEL ONE //-------------------------------------------------------------------------//
if ( digitalRead (RED)==LOW && digitalRead(WHITE_1)==LOW){
   //DISPLAYS
  
  display.clearDisplay();
  
 
  LCD.clear();
  LCD.backlight();
  
  display.setTextSize (1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("PRESS GREEN: RESET");
display.setCursor(0,24);
display.print("PRESS RED: INCREASE");
display.setCursor(0,48);
display.print("PRESS BLUE: DECREASE");
display.display();

  LCD.setCursor(0,0);
  LCD.print("MOTOR LEVEL");
  LCD.setCursor(0,1);
  LCD.print("LEVEL 1");

  

digitalWrite(WHITE_1, HIGH);
digitalWrite(WHITE_2, LOW);
digitalWrite(WHITE_3, LOW);
digitalWrite(YELLOW_1, LOW);
digitalWrite(YELLOW_2, LOW);
  delay(500);

  MOTOR.setSpeed(50);
MOTOR.step(2000);
 
}


//-------------------------------------------------------------------------//

if ( digitalRead (BLUE)==LOW && digitalRead(WHITE_1)==HIGH && digitalRead(WHITE_2)==LOW){
   //SET DISPLAYS
  
  display.clearDisplay();
  
 
  LCD.clear();
  LCD.backlight();
  
  display.setTextSize (1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("PRESS GREEN: RESET");
display.setCursor(0,24);
display.print("PRESS RED: INCREASE");

display.display();

  LCD.setCursor(0,0);
  LCD.print("MOTOR LEVEL");
  LCD.setCursor(0,1);
  LCD.print("LEVEL MIN");



digitalWrite(WHITE_1, LOW);
digitalWrite(WHITE_2, LOW);
digitalWrite(WHITE_3, LOW);
digitalWrite(YELLOW_1, LOW);
digitalWrite(YELLOW_2, LOW);

  MOTOR.setSpeed(0);
MOTOR.step(0);
}}

mi duda es la siguiente:

a la hora de introducir el motor a pasos, dentro de la sentencia if( digitalRead(RED)==…) el motor solo gira un paso, pero me gustaría saber si hubiera alguna forma de dejar el motor paso a paso en bucle.

El problema es que si utilizo un bucle for se queda funcionando en bucle y no puedo utilizar ningun otro pulsador ( RED, GREEN y BLUE) y quiero que cuando yo vuelva a pulsar otro pulsador el motor deje de funcionar.

Gracias!!!

Hola muy buenas a todos, tengo un motor paso a paso desde no hace mucho y me gustaría saber porque el motor solo va en la dirección de las agujas del reloj.

Antes de todo se supone que el motor debería ir en ambas direcciones ( antihoraria y horaria)

Gracias!

Hola, este codigo es de la libreria Stepper deberias tenerlo, no se si lo has probado.
Estaran bien hechas las conexiones?
Saludos.

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

la libreria stepper es bloqueante ,si le dices que se mueva x pasos ,hasta que no acabe no va a seguir con la ejecucion del sketch.mira la libreria accelstepper.