Hallo

LEDs kann man nicht "schlagartig" ein- oder ausschalten. Sie brauchen etwas Zeit bis sie hell sind und sie leuchten nach dem Ausschalten nach. Deshalb sollte nach jedem Wechsel der FrontLED eine kurze Verzögerung eingebaut werden (ein paar sleep()s). Außerdem sollte man LineData() dann besser zweimal hintereinander aufrufen, denn gelegentlich stimmen die Werte beim ersten Aufruf nicht.

Wenn man dann noch diese Abfrage verwendet: "if (l<r)" dann klappt's auch mit dem Linienfolgen:
Code:
#include "asuro.h"
#define GESCHW   150

int main(void){

int lData[2];
int i, donl, doffl, donr, doffr, l, r;
   Init();
   MotorDir(FWD,FWD);
   while(1)
   {
   FrontLED(OFF);      // Umgebungslicht filtern
	Sleep(10);          // kurz warten bis LED aus
	LineData(lData);      //
   LineData(lData);      //
   doffl = (lData[0]);   //
   doffr = (lData[1]);   //
   FrontLED(ON);      //
	Sleep(10);         // kurz warten bis LED an
   LineData(lData);      //
   LineData(lData);      //
   donl = (lData[0]);   //
   donr = (lData[1]);   //
   l = donl - doffl;   //
   r = donr - doffr;   // r und l sind nun die werte von T9 und T10 mit gefiltertem Umgebungslicht
   i = (l+r)/2;

   if (l<r) // gegenlenken
   {
   MotorSpeed(GESCHW +i, GESCHW -i);
   }
   else
   {
   MotorSpeed(GESCHW -i, GESCHW +i);
   }

   }
   return 0;
}
Mein asuro hat eine stärkere FrontLED und eine kürzere Endübersetzung im Getriebe und folgt mit deinem Code der Linie vorbildlich. Glückwunsch zu diesem gelungenen Programmansatz:

Bild hier  
http://www.youtube.com/watch?v=gYAzFp7Hc4Y

btw: Mit "int main(void){" gibts keine Warnungen mehr.

Gruß

mic