I need to change this code so that it uses 2 buttons (forward and reverse) instead of the pot. I tried to just connect to switches to A1 and 5v and A1 and gnd. but that doesn't work. The pot is for one axis of a joystick so the center position is off. This is the only code I found that works but I have another motor that I need buttons instead of the pot. Anyone know how to change the code to make it work?
Code:
#include <AccelStepper.h> // accelstepper library
AccelStepper stepper(1, 8, 9); // direction Digital 9 (CCW), pulses Digital 8 (CLK)
//Pins
const byte Analog_X_pin = A1; // x-axis readings
const byte enablePin = 7;
//Variables
int Analog_X = 0; //x-axis value
int Analog_X_AVG = 0; //x-axis value average
//----------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
//----------------------------------------------------------------------------
//PINS
pinMode(Analog_X_pin, INPUT);
pinMode(enablePin, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
//----------------------------------------------------------------------------
InitialValues(); // averaging the values of analog pin 0 (value from potmeter)
//----------------------------------------------------------------------------
// Stepper parameters
// setting up some default values for maximum speed and maximum acceleration
stepper.setMaxSpeed(2000); //SPEED = Steps / second
stepper.setAcceleration(1000); //ACCELERATION = Steps /(second)^2
stepper.setSpeed(1000);
delay(1000);
}
void loop()
{
ReadAnalog();
ReadLimits();
stepper.runSpeed(); //step the motor (this will step the motor by 1 step at each loop indefinitely)
}
void ReadLimits()
{
if( digitalRead(2)==LOW && stepper.speed()>0 )//read input, assuming they have pull-up resistors.
{
stepper.setSpeed(0);
}
if( digitalRead(3)==LOW && stepper.speed()<0 )//read input, assuming they have pull-up resistors.
{
stepper.setSpeed(0);
}
}
void ReadAnalog() {
if (abs(Analog_X-Analog_X_AVG) > 50) {
digitalWrite(enablePin, HIGH); // enable the driver
stepper.setSpeed(5*(Analog_X-Analog_X_AVG));
} else {
digitalWrite(enablePin, LOW); // disable the driver
stepper.setSpeed(0);
}
// Reading the potentiometer in the joystick:
Analog_X = analogRead(Analog_X_pin);
// if the value is 25 "value away" from the average (midpoint), we allow the update of the speed
// This is a sort of a filter for the inaccuracy of the reading
if (abs(Analog_X-Analog_X_AVG) > 50) {
stepper.setSpeed(5 * (Analog_X-Analog_X_AVG));
} else {
stepper.setSpeed(0);
}
}
void InitialValues() {
//Set the values to zero before averaging
float tempX = 0;
//----------------------------------------------------------------------------
// read the analog 50x, then calculate an average.
// they will be the reference values
for (int i = 0; i<50; i++) {
tempX += analogRead(Analog_X_pin);
delay(10); //allowing a little time between two readings
}
//----------------------------------------------------------------------------
Analog_X_AVG = tempX/50;
//----------------------------------------------------------------------------
Serial.print("AVG_X: ");
Serial.println(Analog_X_AVG);
Serial.println("Calibration finished");
}