hallo sternthaler und natülich auch alle anderen, die sich dafür interessieren oder mir helfen wollen

die werte in MY_GO_ENC_COUNT_VALUE habe ich schon an meinen Asuro angepasst (ich habe extra noch mit Go() geteste, alles so wie es sein sollte)
trotzdem zur info: ich habe scheiben mit 6 schwarz- weiß-flächen montiert


bei mir hat zwar noch nicht alles gepasst, trotzdem habe ich die geschwindigkeitsanpassung ähnlich der von GoTurn umgeändert, da ich mir dachte, dass es vl an der geschwindigkeitsbegrenzung bei 255 liegen kann. leider hat es auch nichts geholfen.
zusätzlich habe ich noch die zweite richtung ein zu bauen versucht ( positives vorzeichen beim winkel sollte eine kurve im gegenuhrzeigersinn sein)

wenn ich jetzt meine fkt wie folgt aufrufe
Code:
kurve(300,180,150)
passten zwar radius und winkel nicht, aber die richtung.

wenn ich jetzt aber schreibe
Code:
kurve(300,180,200)
, also eine geschwindigkeitsänderung, dann fährt mein asuro auf einmal in die falsche richtung. ich habe aber keine ahnung woher das kommen könnte.

hier einmal meine funktion:
Code:
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/abs(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;

     //mindestgeschwindigkeit=70
     if(speed<70) speed=70;

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

     //Motoren starten
     if(winkel>0)
               MotorSpeed(speed_i,speed_a);
     else
               MotorSpeed(speed_a,speed_i);

     EncoderSet(0,0);

     while (count_a<count_a_soll)
     {
           //Odometrie einlesen
           if(winkel>0)
           {
               count_a=encoder[RIGHT];
               count_i=encoder[LEFT];
           }
           else
           {
               count_a=encoder[LEFT];
               count_i=encoder[RIGHT];
           }


           //Geschwindigkeiten anpassen
           if (count_a <(count_i*quot))
           { /*außen zu langsam */
                if ((speed_a > speed) || (speed_a > 244))
                   speed_i -= 10;
                else
                   speed_a += 10;
           }

           if (count_a >(count_i*quot))
           { /* außen zu schnell */
                if ((speed_a > speed))
                   speed_a -= 10;
                else
                   speed_i += 10;
           }

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

           if(winkel>0)
               MotorSpeed(speed_i,speed_a);
           else
               MotorSpeed(speed_a,speed_i);

           //Msleep (1);
     }

ich bedanke mich jetzt schon für jeden tipp