Hallo

So scheint es halbwegs zu funktionieren. Allerdings dürften ein paar Segmentwechsel verlorengehen, weil wir die Seiten nacheinander prüfen(f-Schleife):
Code:
#include "asuro.h"      // Konfigurationsdateien laden

/* Funktionen definieren */

/* Geradeausfahren */

void GeradeAus(void)
{
unsigned char e,f,i,j;        // Zähler
unsigned int OdoData[2];      // Array für Odo Werte
unsigned int save[5];         // Zwischenspeicher für Odo Wertereihe
unsigned int wahr[2];         // Zähler
unsigned int richtung[2];     // letze Flanke auf- oder absteigend?
static unsigned int spd0=170; // Geschwindigkeit
static unsigned int spd1=170; // Geschwindigkeit
unsigned int n[2];         // Zähler

for(e=0; e<10; e++)       // Anzahl der Messungen die durchgeführt werden
{
   for(f=0; f<2; f++)     // Messung für links/rechts
   {
      	wahr[f]=0; // Löschen nicht vergessen
      	for(i=0; i<5; i++) // Fünf mal messen pro Variable
         {
            OdometrieData(OdoData);
            save[i]=OdoData[f];
            if(i==4)        // Wenn Array voll: Checken ob Ab oder Auf
            {
              for(j=0; j<4; j++)
               {
                  if(richtung[f] && (save[i]<save[i+1])) // Werte aufsteigend?
                  {
                     wahr[f]++;
                  }
                  else if(!richtung[f] && (save[i]>save[i+1])) // Werte Abfallend?
                  {
                     wahr[f]++;
                  } // if richtung
               } //j
            } // if i==4
         } //i
	      if(wahr[f]==5) // richtungwechsel fand statt wenn alle Werte auf/absteigend!
         {
				n[f]++;
            richtung[f]=!richtung[f];  //letzte Werterichtung merken
         }
   } //f
} //e
if (n[0] == n[1]) // bei Zählergleichstand
{
	spd0=spd1=170; // starten wir neu
	n[0]=n[1]=0;
}
else if(n[0]<n[1]) // gleiches Spiel wie immer!
{
   if(spd0<255)
   {
      spd0++;
   }
   else if(spd1>1) // aber nun vorsichtshalber mit Begrenzung
   {
      spd1--;
   }
} else
{
   if(spd1<255)
   {
      spd1++;
   }
   else if(spd0>1)
   {
      spd0--;
   }
}
   MotorDir(FWD,FWD);
   MotorSpeed(spd0,spd1);
}

/* Beginn des Hauptprogramms */

int main (void){
Init();            //Prozessor initialisieren

while(1)         // Endlosschleife
{

  GeradeAus();

}

/* Schluss ! */

return 0;
}
Die Warnungen sind nun auch weg, die Indexe waren char, unsigned char war richtig.

Gruß und gute Nacht

mic