Dear All,
I’ve been trying to get to grips with latching a momentry button in code but I’ve not yet managed to understand it. I’ve been looking in to debouncing etc but I cannot quite relate what I’ve read in to my particular issue.
I’ve a stepper motor and a button (which seems to have been wired N/C as opposed to N/O) hence why my code (below) refers to LOW in place of HIGH etc.
What I want to do is to press the button, write its state in to a variable and run my stepper motor (using the AccelStepper library). Until the button is pressed again and then it will stop the motor and save a new button state, then if it is pressed again, start the motor again…
You get the idea.
My code below currently works but only if the button is held down. I know I’m missing bits of code but I can’t quite work it out.
P.S. This is not a school project!
//Control 1 stepper motor connected to a driver, run it as a DC motor running at 120 RPM.
#include <AccelStepper.h>
const int buttonPin = 2; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
int motorSpeed = 6400; //120 RPM at 200 steps per rev (notated in microsteps)
int motorAccel = 3200; //microsteps/second/second to accelerate
int motorDirPin = 8; //digital pin 8 < ===THIS IS A DIRECTION PIN
int motorStepPin = 9; //digital pin 9
//set up the accelStepper intance
//the "1" tells it we are using a driver
AccelStepper stepper(1, motorStepPin, motorDirPin);
void setup()
{
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
//bits for the stepper motor speed and acceleration:
stepper.setMaxSpeed(motorSpeed);
stepper.setSpeed(motorSpeed);
stepper.setAcceleration(motorAccel);
//stepper.move(-192000); //move 192000 microsteps (should be 1 minute but currently seems to be 46 seconds)
stepper.move(-1252175); // should be 5 minute
}
void loop()
{
/*The code in this loop will detect if a button is pressed and if so, it will run the motor
if it is pressed again it will turn off the motor.
*/
//read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is LOW:
if (buttonState == LOW) {
// turn stepper motor on:
stepper.enableOutputs();
stepper.run();
} else {
// turn stpper motor off:
stepper.disableOutputs();
}
}