Also so hab ich mir das vorgestellt. Bitte nicht auf die Feinheiten achen

Code:
#include "asuro.h"
 
int RefLinks(LineData);  //Funktion für Differenzwert Links
FrontLED(ON);
LineData(Data);
a=data[0];
FrontLED(OFF);
LineData(Data);
c=data[0];
LRef=a-c;
return LREF;

int RefRechts(LineData);	//Funktion für Differenzwert Rechts
FrontLED(ON);
LineData(Data);
b=data[1];
FrontLED(OFF);
LineData(Data);
d=data[1];
RRef=b-d;
return RRef;

int main(void)
{

unsigned int data[2]; //data[0]->links, data[1]->rechts
unsigned char speed=150;
unsigned char taste;

Init();

FrontLED(ON);
LineData(Data);
a=data[0];
b=data[1];
FrontLED(OFF);
LineData(Data);
c=data[0];
d=data[1];
LRef=a-c;	//Aktueller Referenzwert Links
RRef=b-d;	//Aktueller Referenzwert Rechts

if ((data[0]<450)&&(data[1]>550)) { // links schwarz rechts weiß
while (1){
LREF = RefLinks(LineData);		//Aufrufen der Funktion
RRef = RefRechts(LineData);		//Aufrufen der Funktion
if (LRefakt > LRef );{			//zu weit rechts->links weniger speed
speed=speed-10;
}
if (RRefakt < RRef );{			//zu weit links->links mehr speed
speed=speed+10;
}
MotorSpeed(speed,150);
taste=PollSwitch();
if (taste>0){
MotorSpeed(0,0);
StatusLED(RED);
}
.... für linksweissrechtsschwarz genauso
Bitte kommentieren was ihr dazu sagt, wäre das so in der Art möglich?
Könnt ihr mir eine andere Möglichkeit nennen? Oder mir etwas zeigen?

EDIT: Wie ich meine "Umgebungslichtkompensation" in die erste Abfrage, also bei der Entscheidung wo nun schwarz und weiß sind, einbaue, habe ich noch keinen Schimmer. Eigentlich ist das ja sinnlos, weil ich nicht zuordnen kann, was für ein Wert für schwarz und was für ein wert für weiß steht!
Ich dreh mich im Kreis