Hallo

Mit etwas Glück und gleichmässiger Raumbeleuchtung fährt mein asuro nun mit deinem leicht geänderten Programm nach dunklen Fliesenfugen:

Code:
#include "asuro.h"
#define SPEED  200 
int speedLeft,speedRight; 
unsigned int lineData[2]; 
int ADOffset; 
void LineLeft (void) //fahre nach rechts zu linie 
{ 
   speedRight  -=2; //rechts bremsen 
   if (speedRight < 100) speedRight = 100; //min speed rechts 
} 
void LineRight (void) //fahre nach links zu linie 
{ 
   speedLeft  -=2; //links bremsen 
   if (speedLeft < 100) speedLeft = 100; //min speed links 
} 
void LineDemo(void) 
{ 
int i; 

unsigned char j;
   FrontLED(ON);
   // Die folgende Mehrfachabrage der LineDatas ist völlig sinnfrei! 
   for (j = 0; j < 255; j++) LineData(lineData); //differenzberechnung li-re 
   //  Hier beginnt der Ernst des asurolebens
   LineData(lineData);
   // bei data[0]=data[1] ist adoffset=0 d.H. der Unterschied wird einmalig 
   // berechnet und als adoffset gespeichert das gibt Probleme bei
   // Helligkeitsänderungen von der Seite bei der Fahrt.
   // Es wird dann später auf grösser/kleiner null geprüft.
   ADOffset = lineData[0] - lineData[1];
   speedLeft = speedRight = SPEED;
   MotorSpeed(speedLeft,speedRight);
   for(;;) {
      LineData(lineData);
      i = (lineData[0] - lineData[1]) - ADOffset;
     SerWrite("\n\r  i: ",9);
     PrintInt(i);

/*  dadurch muss auch darauf geprüft werden, also i<0 oder i>0
     aber bei i==0 darf nichts passieren, sonst ewige Kurve!
     deshalb vorsichtshalber 3 vollwertige ifs
*/
      if ( i > 0 ) {
         //StatusLED(GREEN);
       BackLED(OFF,ON); //blinker rechts 
         LineLeft(); //fahre nach rechts zu linie 
      }
      if ( i < 0) {
         //StatusLED(RED); 
       BackLED(ON,OFF); //blinker links 
         LineRight(); //fahre nach links zu linie 
      } 
      if ( i == 0) {
         StatusLED(YELLOW); 
         speedLeft = speedRight = SPEED; 
      } 
      MotorSpeed(speedLeft,speedRight); 
   } 
} 
int main(void) 
{ 
   Init(); 
   LineDemo (); 
   while(1); 
   return 0; 
}
Nachtrag: Mit einer Geschw. Korrektur von +-5 macht er's etwas besser! Ich setze den asuro beim Start ungefähr mittig in Fahrtrichtung auf die Linie.

Gruß

mic