aiuto problema semplice con if

ciao non è che mi potete aiutare ? sono fermo da qualche ora su questo problema …avrei bisogno che i valore di (VEL) partano da 0 arrivino a 1000 rimangono a mille per un tempo x poi ritornano da 1000 a zero e così finisce la subroutine…mi serve per i motori passo passo dove utilizzo solo 3 fili di comando , un clock un enable e un sensoorario/antiorario. in ogni caso questo codice non funziona perchè quando decremento poi i valori vanno sotto lo zero … se non mi sono spiegato bene sono felice di darvi chiarimenti grazie in anticipo questo è il codice parzialmente funzionante.

int Stepf=0;
int vel=1;
int enable=9;
int CW=10;
int ck=11;
int stato=0;
long i=0;

int Step=2500;

void setup(){
 Serial.begin(9600);
pinMode(enable,OUTPUT);
pinMode(CW,OUTPUT);
pinMode(ck,OUTPUT);
digitalWrite(enable,LOW);//piedino 14 del 6208N oppure diag ! senza r in serie u.u
digitalWrite(CW,LOW);
}

void loop()
{
Serial.println(vel);
  digitalWrite(enable,HIGH);
  spostamento();
  asd();
     digitalWrite(enable,LOW); 
     if (stato == LOW)
      stato = HIGH;
    else
      stato = LOW;
     digitalWrite(CW,stato);
}

void spostamento(){
  long i=10;
int  acelerazione=1000;
int decelerazione=Step-1000;
 
  while(i<=acelerazione){
    i++;
    vel=i;
    tone(ck,vel);
Serial.println(vel);}

 while(i>acelerazione&&i<decelerazione){               
   i++;
  Serial.println(vel);
}

  while(i>=decelerazione&&i<Step){
    vel--;
    tone(ck,vel);
Serial.println(vel);
}

}
void asd(){
  noTone(ck);
  vel=0;
}

edit by mod: per favore includi il codice usando gli appositi tag

Spero che nel tuo programma originale non ci sia l’indentazione che vedo qui.
Lascia stare gli esempi in giro, le parentesi graffe non sono inutili, MEGLIO evidenziarle.
Se guardi come ho riscritto il codice vedrai che ogni graffa aperta trova sulla stessa colonna la sua graffa chiusa.

void spostamento()
{ long i=10;
  int accelerazione=1000;
  int decelerazione=Step-1000;
  while(i<=accelerazione)
  { i++;
    vel=i;
    tone(ck,vel);
    Serial.println(vel);
  }
  while(i>accelerazione && i<decelerazione)
  { i++;
    Serial.println(vel);
  }
  while(i>=decelerazione && i<Step)
  { vel--;
    tone(ck,vel);
    Serial.println(vel);
  }
}

Comunque, il tuo programma azzera vel e poi fai tutto nella spostamento().
Il problema mi sembra l’ultimo while()
Hai una condizione che non è mai falsa, perciò vel continua a diminuire di continuo. Non si ferma mai.
Il test sembrerebbe dipendere da una variabile i che non viene più toccata.