Setear y modificar pasos por vuelta "accelstepper"

La idea es poder setear el Valor máximo de pasos por vuelta para poder calibrar el rango en el que me puedo mover con el potenciometro.

Si A0 (el potenciometro) esta en 0
y mantengo 3s presionado el boton SET entonces entro en el programa de calibración.

Puedo mover el motor paso a paso con los pulsadores "FF"y “REV”, por cada pulso que envié al pololu, se le sumara +1 a la variable CON y una vez calibrado el rango de movimiento se mantiene presionado otra vez por tres segundos el botón SET y se reemplaza el valor VMAX (200 por defecto) por el valor de “CON”.

Me logro explicar?
Mi duda es:
Estoy siguiendo bien la logica en la programación?

Les dejo el codigo.

PD: Algo que me falta en el código es que cuando se termina de setear el motor vuelve al punto inicial.

#include "AccelStepper.h" 
// Library created by Mike McCauley at http://www.airspayce.com/mikem/arduino/AccelStepper/

// AccelStepper Setup
AccelStepper stepper(1, 8, 5);  // 1 = Easy Driver interface
                                  // Nano Pin 8 connected to STEP pin of Easy Driver
                                  // Nano Pin 5 connected to DIR pin of Easy Driver

// Variables to store current, previous and move position
int val = 0;
int previous = 0;
int long newval = 0;    
int VMIN = 0;
int VMAX = 200;
int CONT = 0;
int SETPIN = 1;
int FFPIN = 2;
int REVPIN = 6;
unsigned long tiempo; //Variable para el control
unsigned long tiempo_max= 3000; //Variable para el control
boolean estado= false;
void setup() {
  Serial.begin(9600); 
  pinMode(SETPIN,INPUT);
  pinMode(FFPIN,INPUT);
  pinMode(2,OUTPUT);
  digitalWrite (2, HIGH);
  stepper.setMaxSpeed(4800);  // Set speed fast enough to follow pot rotation
  stepper.setAcceleration(4800);  //  High Acceleration to follow pot rotation
   digitalWrite(SETPIN,HIGH); //Activa PullUp resistor
  digitalWrite(FFPIN,HIGH);
}


void loop() {

while(digitalRead(SETPIN)==LOW){
  if(millis()-tiempo >= tiempo_max){
      estado = true;
     }
  }
  if (estado == true){analog();} 
  digitalWrite(SETPIN,HIGH); //Activa PullUp resistor
  tiempo= millis();
}

void calibracion(){
while(digitalRead(FFPIN)==HIGH){
digitalWrite(8, HIGH);
delay(50);
digitalWrite(8, LOW);
int cont = (cont+1);
}

while(digitalRead(SETPIN)==LOW){
  if(millis()-tiempo >= tiempo_max){
      estado = true;
     }
  }
  if (estado == true)
  { int cont = VMAX;  
  digitalWrite(SETPIN,HIGH); //Activa PullUp resistor
  tiempo= millis();
  {giro();}
  }


}
void analog(){


  Serial.println(A0);
    val = analogRead(A0);  //  Read Potentiometer current value

 if (val = 0) {calibracion();}
}
void giro () {
  
Serial.println(A0);
  val = analogRead(A0);  //  Read Potentiometer current value
  if ((val > previous+6) || (val < previous-6)) {  // Check that a move of the pot is at least > or < than 6
    newval = map(val, 0, 1023, VMIN, VMAX);  // Map value (1600 = 1 stepper shaft rotation)
    stepper.runToNewPosition(newval);  // Move stepper to new position
    previous = val;  // save current value into variable previous
  }
}

Por favor, no doble postees el mismo tema. Es una clara falta a las normas del foro, si vuelves a hacerlo eres pasible de sanciones disciplinarias.
Te recomiendo que leas las Normas del foro.
Por favor, no digas que no lo sabías porque es responsabilidad de todo forero leer las normas del lugar donde postea, sea este o cualquier otro foro.

 if (val = 0) {calibracion();}

Change to:

 if (val == 0) {calibracion();}

@surbyte
Mil disculpas

@johnwasser

Muchas gracias por la corrección, una consulta, respecto a la estructura de la programación, ¿es correcta?

La verdad es que la ultima vez que programe fue en la secundaria, hace ya 5 años, y me esta costando un poco retomar y volver a este lindo mundo.

Hola Bruno.
Te recomiendo que vayas a Documentación (la sección) y veas el Indice de temas tutoriales => Libros.

Hay varias opciones de descarga gratuita y otros para poder comprar via internet que te serían de ayuda.
Ponerse a programar no es fácil.
Y si tienes fallas como la indicada por @johnwasser es aconsejable detenerse y ponerse a estudiar/repasar programación.
También puedes buscar algún curso de los cientos que hay en Youtube. Hay muchos y muy completos que te serán de ayuda.

esto

int SETPIN               = 1;

y mas tarde esto

pinMode(SETPIN,INPUT);

y en el loop

while(digitalRead(SETPIN)==LOW){

obliga a que desconectes cualquier cosa entre PC y Arduino ya que estas usando el Pin 1 o sea el TX del Arduino normalmente asignado a la comunicación serie

Seria aconsejable que uses otro pin ya que estan todos disponibles y parece un capricho usar 0 y 1 como he visto en el código.

0 no se usa

int CONT                 = 0;
int SETPIN               = 1;

porque ni lo defines pero e pin 1 esta definido como entrada.

surbyte:
Hola Bruno.
Te recomiendo que vayas a Documentación (la sección) y veas el Indice de temas tutoriales => Libros.

Hay varias opciones de descarga gratuita y otros para poder comprar via internet que te serían de ayuda.
Ponerse a programar no es fácil.
Y si tienes fallas como la indicada por @johnwasser es aconsejable detenerse y ponerse a estudiar/repasar programación.
También puedes buscar algún curso de los cientos que hay en Youtube. Hay muchos y muy completos que te serán de ayuda.

esto

int SETPIN               = 1;

y mas tarde esto

pinMode(SETPIN,INPUT);

y en el loop

while(digitalRead(SETPIN)==LOW){

obliga a que desconectes cualquier cosa entre PC y Arduino ya que estas usando el Pin 1 o sea el TX del Arduino normalmente asignado a la comunicación serie

Seria aconsejable que uses otro pin ya que estan todos disponibles y parece un capricho usar 0 y 1 como he visto en el código.

0 no se usa

int CONT                 = 0;

int SETPIN              = 1;




porque ni lo defines pero e pin 1 esta definido como entrada.

surbyte:
Hola Bruno.
Te recomiendo que vayas a Documentación (la sección) y veas el Indice de temas tutoriales => Libros.

Hay varias opciones de descarga gratuita y otros para poder comprar via internet que te serían de ayuda.
Ponerse a programar no es fácil.
Y si tienes fallas como la indicada por @johnwasser es aconsejable detenerse y ponerse a estudiar/repasar programación.
También puedes buscar algún curso de los cientos que hay en Youtube. Hay muchos y muy completos que te serán de ayuda.

esto

int SETPIN               = 1;

y mas tarde esto

pinMode(SETPIN,INPUT);

y en el loop

while(digitalRead(SETPIN)==LOW){

obliga a que desconectes cualquier cosa entre PC y Arduino ya que estas usando el Pin 1 o sea el TX del Arduino normalmente asignado a la comunicación serie

Seria aconsejable que uses otro pin ya que estan todos disponibles y parece un capricho usar 0 y 1 como he visto en el código.

0 no se usa

int CONT                 = 0;

int SETPIN              = 1;




porque ni lo defines pero e pin 1 esta definido como entrada.

Perfecto, son cosas que no recordaba, y por suerte no lo testee. Voy a hacerte caso y a re-estudiar las nociones básicas.
Como dice mi viejo "No es soplar y hacer botellas"

Muchas Gracias