float maxVoltage = 13;
float voltage = 2.5;
float value = 0;
int i = 50;
int buttonPin = 2;
int potPin = A0;
int steps = 0;
int ST;
//DEBOUNCE VARIABLES
int antiReboundTime = 100;
int counter = 0;  //Variable to increment the counter
boolean lastState = LOW;    // Last state of the button
boolean currentState = LOW; // Current state of the button


void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  Serial.begin(9600);
}
boolean debounce(boolean last) // Call anti-rebound function
{
  boolean current = digitalRead(buttonPin);

  if (last != current)
  {
    current = digitalRead(buttonPin);
  }

  return current;
}
void loop() {
  //VOLTAGE CONVERSION
  value = (voltage * 255) / maxVoltage;
  //VELOCITY
  ST = analogRead(potPin);
  ST = map(ST,0,1023,10,300);
  Serial.println(ST);
  //DEBOUNCE / SET DIRECTION
  currentState = debounce(lastState); // Eliminates rebound

  if ( lastState == LOW && currentState == HIGH)
  {
    counter = counter + 1;           //Increments counter
    Serial.println(counter); //Prints the value on Serial monitor
  }

  lastState = currentState; // Update the state

  if (counter == 0) {
    stepperVoltageControlClockWise(value, ST, 9, 6, 5, 3);
  }
  else if (counter == 1) {
    stepperVoltageControlAntiClockWise(value, ST, 9, 6, 5, 3);
  }
  
  if (counter > 1) {
    counter = 0;
  }
  
}

void stepperVoltageControlClockWise(float value,int ST , int motorPin1, int motorPin2,
                                    int motorPin3, int motorPin4) {

  analogWrite(motorPin1, value);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, value);
  analogWrite(motorPin4, 0);
  delay(ST);
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, value);
  analogWrite(motorPin3, value);
  analogWrite(motorPin4, 0);
  delay(ST);
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, value);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, value);
  delay(ST);
  analogWrite(motorPin1, value);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, value);
  delay(ST);
}

void stepperVoltageControlAntiClockWise(float value,int ST , int motorPin1, int motorPin2,
                                        int motorPin3, int motorPin4) {

  analogWrite(motorPin1, value);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, value);
  delay(ST);
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, value);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, value);
  delay(ST);
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, value);
  analogWrite(motorPin3, value);
  analogWrite(motorPin4, 0);
  delay(ST);
  analogWrite(motorPin1, value);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, value);
  analogWrite(motorPin4, 0);
  delay(ST);
}