Hai hai1991,

wie ich dass sehe, wird dein speed_i immer kleiner als speed_a

Über:
-- radius_a=radius+BREITE/2;
-- radius_i=radius-BREITE/2;
bekommst du also .._a ist immer größer als .._i , und dann mit:
-- quot=((float)radius_a)/((float)radius_i);
immer einen Wert in quot > 1, und dann mit:
-- speed_i=speed/quot;
immer speed_i = speed / (größer 1) also speed_i < speed.

So weit so gut.
Auch count_a_soll ist scheinbar auf dem richtig Weg berechnet.

Nun brichst du deine While()-Loop aber nur bzw. schon dann ab, wenn count_a den count_a_soll-Wert erreicht hat.

Du macht keine Prüfung, ob ein count_i_soll-Wert erreicht wurde.

Ich würde vorschlagen, dass du auch diesen count_i_soll-Wert berechnest, und dann deine while()-Loop so umbaust, dass sie erst dann abbricht, wenn beide Soll-Werte erreicht wurden.


Ich selber nutze einen etwas anderen Ansatz.
So wie du, berechne ich auch das Verhältnis zwischen Innen und Außen.
Allerdings nutze ich die vorher ermittelten Tik’s als Verhältnis. Um sowohl Rechtskurve, als auch Linkskurve zu berücksichtigen, dividiere ich in meine quote-Variable so, dass immer ein Wert > 1 berechnet wird. (Also immer Außen-Soll-Tick's / Innen-Soll-Tik's)
Dann aber nutze ich beide gezählten Tik’s aus der Variablen encoder[] und berechne aus dem inneren encoder[]-Wert mit dem quot multipliziert einen 'getürkten' Wert. Da mein quote ja auch immer größer 1 ist, wird es als eine größere Tik-Anzahl vom Innenweg berechnet.
Dieser getürkte Wert stellt nun den Weg dar, den die Innenseite gefahren wäre, wenn sie genau so weit wie die Außenseite gefahren wäre.
Also müssen beide Werte, Außen-Soll-Tik und Innen-Türk-Tik, einfach nur gleich viele Tiks haben.
Das erledigt dann die bekannte GoTurn-Funktionalität beim Go-Teil.

Viel Erfolg
Gruß Sternthaler

P.S.: Ich habe dein Programm nicht getestet, da ich sicher bin, dass eben die Berücksichtigung/Kontrolle der Innen-Seite fehlt.