hi hai1991,

hab mal Deine letzte Version getestet,
mit folgenden Änderungen:
Motorstarten hinter Anfang der while ( count_a ... ) Schleife gesetzt,
anschliessnde EncoderSet(0,0);
dann mal 10 ms warten: Msleep (10);



am Ende der Schleife das Setzen von MotorSpeed eliminiert.

Bis auf die 10ms warten wohl nur formale Änderungen.

Ich denke, Du musst dem Encoderzähler mehr Zeit lassen,
das Rad braucht ein paar ms zum zählen.

Die Übergabeparameter könnte/sollte man auch irgendwo prüfen (Radius gösser halber Spurweite ?, Winkel(basolut) < 360 ? ,speed < 255 ?)
Ich hab's mit einem Rückkgabeparameter (char anstelle von void) gemacht, den ich im aufrufenden Programm auswerten kann.

Vielleicht irre ich mich ja, aber zumindest hat mein ASURO
im Test je nach Winkel und Durchmesser Links- bzw. Rechtskurven
ausgeführt.

Ich hab dabei aber Deinen Wert (MY_GO_ENC.. 21240L ) übernommen .
Ich komme aber, bei den Werten , bei meinem ASURO nicht aus der
while-Schleife raus, da count_a bzw. encoder[0] bzw. [1] auch bei 10 ms deulich unter count_a_soll liegt.
Im Asuro Original-Programm (GoTurn in encoder.c ) geht der Schleifen-Abbruch über tot_count, das pro Schleifendurchlauf um encoder[LEFT] erhöht wird.

Am besten baust Du mal ein paar PrintInt ein, um dir die Encoder, speed und count-Werte anzusehen.

Auch dei 10 ms für den Encoder müsste man mal überprüfen.

Vielleicht hast Du aber ein anders Problem

Gruss

mausi_mick