How to Include Release() Function in Stepper Motor Control

I have successfully built a simple stepper motor control circuit to operate a bipolar stepper motor using an Arduino UNO R3, and an Adafruit Motor Stepper Shield V2.3 The circuit is exactly as described by
Brian Schmalz with 3 momentary push buttons for Forward / Backward / Stop and a potentiometer for varying motor speed.

I have the circuit working as published but I would like to modify the sketch slightly to implement the "Release()" function to de-energize the stepper motor after the STOP pushbutton is depressed. Obviously, I am not a programmer and need some help in modifying the code. I would like for the forwardstep and backwardstep functions to still be available for subsequent moves after depressing the STOP pushbutton and releasing the motor.

Sorry about my programming ignorance, but I know that someone out there can point me in the right direction with this simple modification to the attached code.

Thanks in advance.

Rick Reeve

// Example6 code for Brian Schmalz's Easy Driver Example page
// http://www.schmalzhaus.com/EasyDriver/EasyDriverExamples.html

#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>

// Define the stepper and the pins it will use
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *motor1 = AFMS.getStepper(200, 2);


// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
void forwardstep() { 
  motor1->onestep(FORWARD, MICROSTEP);
}
void backwardstep() { 
  motor1->onestep(BACKWARD, MICROSTEP);
}

AccelStepper stepper1(forwardstep, backwardstep); // use functions to step

// Define our three input button pins
#define  LEFT_PIN  2
#define  STOP_PIN  3
#define  RIGHT_PIN 4

// Define our analog pot input pin
#define  SPEED_PIN A0

// Define our maximum and minimum speed in steps per second (scale pot to these)
#define  MAX_SPEED 400
#define  MIN_SPEED 0.1

void setup() {
  AFMS.begin();
 
  // The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go
  stepper1.setMaxSpeed(400.0);
 
 
  // Set up the three button inputs, with pullups
  pinMode(LEFT_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(RIGHT_PIN, INPUT_PULLUP);
}

void loop() {
  static float current_speed = 0.0;         // Holds current motor speed in steps/second
  static int analog_read_counter = 1000;    // Counts down to 0 to fire analog read
  static char sign = 0;                     // Holds -1, 1 or 0 to turn the motor on/off and control direction
  static int analog_value = 0;              // Holds raw analog value.
 
  // If a switch is pushed down (low), set the sign value appropriately
  if (digitalRead(LEFT_PIN) == 0) {
    sign = 1;
  }
  if (digitalRead(RIGHT_PIN) == 0) {   
    sign = -1;
  }
  if (digitalRead(STOP_PIN) == 0) {
    sign = 0;
    
  
  }

  // We only want to read the pot every so often (because it takes a long time we don't
  // want to do it every time through the main loop). 
  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  else {
    analog_read_counter = 3000;
    // Now read the pot (from 0 to 1023)
    analog_value = analogRead(SPEED_PIN);
    // Give the stepper a chance to step if it needs to
    stepper1.runSpeed();
    //  And scale the pot's value from min to max speeds
    current_speed = sign * ((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED;
    // Update the stepper to run at this new speed
    stepper1.setSpeed(current_speed);
  }

  // This will run the stepper at a constant speed
 stepper1.runSpeed();
}

I am not aware of any function called release(). But, assuming one exists, you need to add something like

if (sign == 0) {
   release();
}
else {
   // the opposite of release() - whatever that is
}

These lines should probably go after the line

stepper1.setSpeed(current_speed);

...R
Stepper Motor Basics