kp = 3; ki = 10; kd = 70; <-- deine
kp = 10; ki = 4; kd = 70; <-- waste-Original
ist genau umgekehrt.
FrontLED(OFF);
LineData(lineData); // Messung mit LED OFF
doff = (lineData[0] - lineData[1]); // zur Kompensation des Umgebungslicht
FrontLED(ON);
LineData(lineData); // Messung mit LED ON
don = (lineData[0] - lineData[1]);
x = don - doff; // Regelabweichung
Das hat bei mir einfach nicht funktioniert, keine Ahnung warum, daher habe ich auf ein funktionierendes Prinzip zurück gegriffen. Vielleicht ein Vorzeichenproblem mit LEFT/RIGHT bzw. 0/1, werde das nochmal probieren. Die Ableitung der Werte von waste habe ich verstanden.