Du solltest lieber den gesamten Code ansehen und nicht nur einen Bruchteil, denn genau 2 Zeilen davor steht:
diffl=data[0]-data[1];
diffr=data[1]-data[0];
Das heisst es wird immer nur die DIFFERENZ vom linken zum rechten Sensor als Referenz genommen.
Und ausserdem, der Sensor wird nicht von einer Sekunde auf die andere von schwarz auf weiß kommen, sondern die "Beleuchtungsstärke" nimmt kontinuierlich leicht ab/zu. Beispielsweise bei einer leichten Linkskurve, fährt der Asuro gerade aus. Nun wird der Wert des linken Fototransistors niedriger, weil die Led ja (links) auf die schwarze Bahn kommt und weniger Licht reflektiert wird. Der Wert des rechten Fototransistors nimmt zu, weil er langsam auf die weiße Fläche kommt. Somit ist die Änderung der beiden Transistoren PRO Schleifendurchlauf nur äußerst gering. (Vergiss nicht wie oft die Schleife pro Sekunde durchlaufen wird). Ich schätze auf einen maximalen Änderungswert von 10-20. Sagen wir beide Transistorwerte ändern sich um 10 (also der linke um 10 dünkler, der rechte um 10 heller), bei einem Ausgangswert von 100 bei beiden, dank gleichmäßiger Beleuchtung auf einer geraden Strecke. Dann wäre "diffl" gleich 90-110=-20, "diffr" wäre 110-90=20.
Und nun gehts weiter mit:
links=120-(diffr*3);
rechts=120-(diffl*3);
links wäre demnach 120-(20*3)=60
rechts wäre 120-(-20*3)=120 (eigentlich 180)
Daraus resultiert, der linke Motor dreht sich halb so schnell wie der rechte und korrigiert somit die Abdriftung nach RECHTS.
Muss auch so sein, denn immerhin wurde der Wert des linken Transistors ja um den Wert 10 kleiner, was auf einen dunklen Untergrund schließen lässt.
So, hoffe es passt nun