Hallo

Na, nun sieht's doch schon prima aus. Immerhin scheint er etwas zu regeln. So wie ich das erkennen kann, wird der rechte Motor immer langsamer bis der Wert für MotorSpeed() unter null sinkt. Weil die Werte aber nur einen Bereich von 0-255 haben, wird der nächste Wert unter 0 wieder als Vollgas interpretiert und der Motor dreht wieder voll auf. Möglicherweise sind die Seiten bzw. die Logik der Abfrage vertauscht. Deshalb wird auch die StatusLED nie mehr Grün. Die solltest du vor beginn der 50er-Schleife vielleicht auf Yellow setzen

Ach, nun hab ich's mit der MotorSpeed() auch gecheckt, du verwendest static bei den Deklarationen. Aber die Auswertung der ODO-Daten durchschaue ich immer noch nicht. Du prüfst auf einen Wertesprung von Faktor 0,4 (oder so ähnlich), beachtest aber nicht, das die Werte stetig und nicht sprunghaft geändert werden. Soweit ich noch weiß bewegen sich die Werte zwischen 150 und 650. Eine gute Strategie ist deshalb zu prüfen, ob der Wert z.B. unter 300 oder über 500 ist. Jeder Wechsel zwischen diesen Grenze bedeutet einen Wechsel zwischen den Codesegmenten. Ein anderer Ansatz, der bei mir auch wunderbar funktionierte: Man speichert ca. 4-7 aufeinanderfolgende Werte. Wenn sie alle aufsteigend bzw. abfallend sind, hat man die Mitte eines Codesegments überschritten. Viele Wege führen zum Ziel...


Gruß

mic