Hallo zusammen,
im main() ist die von damaltor angesprochene Schleife über die Funktion LineData() um die Variable ADOffset zu füllen.

Diese Variable wird in der Funktion FollowLine () (Der Ursprung ist im übrigen wohl von waste nicht wahr?) dazu benutzt, um nun die Helligkeitsdifferenz auf der Linie beim 'wackeln' zu korrigieren.

Steht der Asuro beim Starten des Programm nun nicht genau mittig auf der Linie, holen wir uns beim Start vom main() diese falsche Position in den Regler.
Die Variable ADOffset sollte nicht benutzt werden! Ohne sie sucht sich der Asuro die Mitte der Linie selber und kann dann an dieser Position den besten Konrast, und damit die kleinste Abweichung vom Idealwert, sehen.
Dann funktionieren die PID-Vorgaben, die waste mühevoll in diesem Thread ermittelt hat, eigendlich extrem gut.

P.S.: Der original Code von waste, mit Kommentar, ist hier zu finden. Die PID-Parameter hatte waste ursprünglich mit: kp = 3; ki = 10; kd = 70; angegeben.
Hatt da jemand ki und kp vertauscht?
Allerdings gibt es von waste (für seinen Asuro) auch noch: kp=5; ki=5; kd=70; Damit läuft mein Asuro allerdings nicht so gut.
Diese Änderung, mit einer Codeverbesserung, hat waste hier abgelegt.
Somit hat ehenkes Recht, wenn er schreibt, dass da gedreht werden kann/soll.