Conflitto passo-passo, attuatore & stop loop

Ciao a tutti,
il mio codice deve:

Se la velocità del vento è minore di tot, accendere led verde e posizionare il motore passo-passo in base al risultato di alcuni calcoli (che variano a seconda di altre variabili).
Se la velocità del vento invece è maggiore, spegnere il led verde, accenderei il led rosso, posizionare il passo-passo a 90 gradi ed eccitare il relè per far scendere l'attuatore (che sale nel setup), e interrompere definitivamente il loop.

Così come l'ho scritto, se la velocità del vento è minore, esegue normalmente, se invece la velocità del vento supera la soglia, l'attuatore scende ma il passo-passo non si posiziona a 90 gradi, rimane dov'é. Commentando la parte che dà all'attuatore il comando di abbassarsi, il motore passo-passo funziona, e si posiziona come deve a 90 gradi; ovviamente al calare del vento la regolazione basata sui calcoli ricomincia.
Come posso far conciliare le due cose, con l'aggiunta di bloccare definitivamente il codice quando l'attuatore è sceso?

Grazie.

if(AWS < 9) {
  digitalWrite(green_led, HIGH);
  digitalWrite(red_led, LOW);

  myStepper.run();
  angle = AngleOfAttack*gear_ratio;
  myStepper.moveTo(-angle/stepPerAngle);
      
} else {
  digitalWrite(green_led, LOW);
  digitalWrite(red_led, HIGH);

  myStepper.run();
  angle = 90*gear_ratio;
  myStepper.moveTo(-angle/stepPerAngle);
      
  retractActuator();
 }

Leggendo la documentazione, il metodo run() esegue un passo alla volta, per compiere tutto il movimento necessario deve essere chiamato più volte. Adesso nel tuo codice abbiamo una successione di istruzioni, prima run() che fa un passo, poi viene chiamata la funzione retractActuator();, devi campire che per tutta l'esecuzione della funzione retractActuator(); run() non viene eseguito e il motore non si muove se poi dopo aver mosso l'attuatore la condizione cambia, run non viene più eseguito.
C'è un altro metodo runToPosition(), questo metodo è bloccante e muove il motore alla posizione voluta, deve essere chiamato una sola volta, e bene che prima scrivi moveTo() e poi run.

Per quanto interrompere la funzione loop() questo non è possibile, loop() viene ripetuta in continuazione e non è possibile arrestarla. Si può usare una variabile che cambia valore e con un if() eseguire o meno una parte di codice.