Ist es richtig, dass die move-Methode die Servoposition über die serielle Schnittstelle ausgibt? Heisst das, dass Du einen externen Controller zur Ansteuerung der Servos benutzt? Wenn ja, wozu?

Egal, eigentlich sehe ich keine Probleme im Code (aber normalerweise programmiere ich die AVRs in Assembler). Die Effekte, die Du beobachtest, können natürlich durch die serielle Übertragung der Kommandos (Überholeffekte?) oder durch den Servocontroller selbst verursacht sein. Besser wäre es, wenn man im Servocontroller selbst einen Synchron-Modus programmieren könnte, aber das ist wohl eine Black Box.

Mit welcher Bitrate arbeitet die serielle Verbindung? Hab mal ausgerechnet: wenn es nur 2400 bit/s sind, dauert das Senden der 5 Servopositionen über UART 0.083 Sekunden, wogegen ein Timerinterrupt alle 0.032 Sekunden auftritt. Bei 9600 bit/s reicht das Timing.

Zur Geschwindigkeit: Du solltest zu Beginn einer synchronen Bewegung die Wege aller Servos ausrechnen. Der Servo mit dem längsten Weg gibt die Geschwindigkeit vor. Er macht pro Zyklus n Schritte, wobei n = Zykluszeit (z.B. 0.032s) * max Servogeschwindigkeit (z.B. 200/s) = z.B. 6.4. Die Steps der anderen Servos werden über das Verhältnis der Wege ausgerechnet. Hat z.B. Servo 3 einen Weg von 50, so macht er einen Step von 3.2 (6.4*50/100). Haben die verschiedenen Servos unterschiedliche Geschwindigkeiten, wird es allerdings komplizierter...

So, muss jetzt arbeiten.