Ok, andiamo per gradi.
Intanto ti prego, cerca di indentare correttamente, è una cosa che se ti abitui a farlo sempre, aiuterà te quando farai programmi più complessi, ma anche noi a leggere più facilmente il tuo codice.
Sono poche e semplici regole, metti DUE spazi ad ogni indentazione, allinea le graffe tra apertura e chiusura, ed evita di aggiungere tante inutili righe vuote. Tra l'altro l'IDE ti può aiutare, almeno all'inizio, perché se premi Ctrl-T te lo fa lui (ma abituati a scrivere direttamente tu).
Il tuo primo codice ad esempio diventa:
#include <Stepper.h>
const int steps = 200;
Stepper myStepper(steps, 5,4);
void setup()
{
myStepper.setSpeed(1000);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
}
void loop()
{
for(int x=1; x<1000; x=2*x)
{
myStepper.step(x);
delay(1000);
}
}
Detto questo, noterai che se metti un delay di 1 secondo dentro al loop significa che prima fa solo 1 step (ossia un duecentesimo di giro, si e no 2 gradi) e poi aspetta 1 secondo, poi ne fa 2 (siamo sui 2 gradi e mezzo) ed un altro secondo, poi 4, poi 8, eccetera, insomma per avere un qualche movimento abbastanza visibile devi aspettare almeno 5 o 6 secondi!...
Poi con QUESTO codice tu dici "Niente da fare non funziona": beh dato che "qualcosa" lo fa (e quindi "funziona", anche se si tratta di movimenti mooolto lenti, non si tratta del problema iniziale che lamentavi), magari invece di dire solo "non funziona" è meglio se dici cosa fa, e cosa di diverso vorresti che faccia...
Nel secondo codice invece dici:
Ho bypassato il problema utilizzando il ciclo while prendendomi la liberta' di stoppare ad un certo punto.
Non è che hai "bypassato il problema", quel codice fa una cosa diversa (anzi due).
Primo, hai messo una variabile per smettere di muovere il servo dopo aver concluso il ciclo (mentre prima ricominciava ad ogni loop).
Secondo, il valore sello step parte da 500 per arrivare a 50.000 con passi da 500 (mentre prima andava con valori pari a potenze di 2 fino a superare 1.000)
Inoltre ci sono anche varie altre cosette poco logiche, ad esempio imposti a=1 all'interno del while e non alla fine, metti la if() con break a 50.000 quando la while() l'hai impostata a 100.000, e se una cosa vuoi farla eseguire solo una volta fai prima a metterla nel setup() invece che nel loop() dove sei costretto poi ad usare un flag...
In sostanza quel tuo codice abbastanza "originale" diciamo, corrisponde semplicemente a mettere questo nel setup() :
for(int val=500; val < 50000; val +=500)
{
myStepper.step(val);
delay(1000);
}