hallo sternthaler

danke für deine ausführliche antwort!
ich werde mich sofort daran machen alles in meine funktion ein zu bauen und zu testen.

ehrlich gesagt, auf die idee mit den verlorenen ticks wäre ich selber nie gekommen. mal schauen obs daran lag und melde mich wieder so bald ich etwas weiß

edit:
ich habe bei mir noch einen fehler gefunden:
bei der berücksichtigung des teilers habe ich *teiler gerechnet, anstatt zu dividieren.
nun sieht meine funktion so aus:
Code:
#define BREITE 103    //spurbreite in mm
#define PI 3.141592



void kurve(int radius, int winkel, int speed)
{
     unsigned long count_a_soll,count_i_soll;
              int count_a=0, count_i=0;
              int speed_a, speed_i;
              int radius_a, radius_i;
              float quot, teiler;

     MotorSpeed(0,0);
     MotorDir(FWD,FWD);

     radius_a=radius+BREITE/2;
     radius_i=radius-BREITE/2;

     teiler=(float)360/winkel;  //Bruchteil des Kreises
     quot=((float)radius_a)/((float)radius_i);


     //berechnen der notwendigen tics am außen- und innenrad
     count_a_soll=2*radius_a*(PI*10000L/teiler);
     count_a_soll/=MY_GO_ENC_COUNT_VALUE;
     count_i_soll=count_a_soll/quot;

     //anfangsgeschwindigkeiten berechnen
     speed_a=speed;
     speed_i=speed/quot;
     //speed_i=speed;

     //Motoren starten
     MotorSpeed(speed_i,speed_a);

     while(count_a<count_a_soll || count_i<count_i_soll)
     {
               count_a=encoder[RIGHT];
               count_i=encoder[LEFT];

               if(count_a<(count_i*quot)) speed_a+=10;   //zu großer radius
               if(count_a>(count_i*quot)) speed_a-=10;   //zu kleiner radius


               //reset encoder
               //EncoderSet(0,0);

               MotorSpeed(speed_i,speed_a);
               Msleep(1);
     }
     MotorDir(BREAK,BREAK);
     Msleep(200);
}
jetzt bleibt er zwar stehen, aber erst nach dem doppelten winkel, aber dem halben radius

ich könnte es zwar vor der berechnung der tiks korrigiern, aber trotzdem wüsste ich zu gerne woher das kommt