Also den ersten Teil mit dem umrechen auf 0°-360° habe ich ja immer noch drin.
Hier mal der komplette Weg:

Der Winkel kommt vom Sensor im Format 0-180°, springt dann auf -180° und geht zurück nach -0°
Meine Formel behandelt nur den Bereich von -180° bis -0°. Also auf einen Kreis bezogen den Bereich 180° bis 360°

Beispiel:
-175° (wäre in echt ja 185°)
Eingesetzt in die Formel:
180+(180-(-175*-1))=185

Code:
ist_angle=ToDeg(yaw); //HIER DEN KOMPASSWERT AUSLESEN
  if (ist_angle<0){
  ist_angle=180+(180-(ist_angle*-1));
  }
Ich erhalte also Winkel von 0°-360°

Im zweiten Schritt berechne ich die differenz zwischen Ist_Winkel und Soll_Winkel.
Das mache ich um den kürzesten Weg "zum Ziel" zu ermitteln (Bezogen auf einen Kreis)
Ein Voller Kreis besteht also aus ERG+X. X interessiert mich aber nicht, da ich weiß wenn ERG>180 ist, muss X kleiner sein.

Also:
Code:
ERG = Soll_Winkel - Ist_Winkel
Der kürzeste Weg ist der, wenn ERG < 180 ist.
Außerdem muss die Verfahrrichtung immer von Ist_Winkel nach Soll_Winkel sein.

Dazu habe ich die vier Abfragen, welche "den kürzesten Weg" filtern:

erg>=180 bedeutet das der Rest vom Kreis kürzer ist -> GUZ
(erg<180) && (erg>0) bedeutet das ERG der kürzeste Weg ist -> UZ
(erg<0) && (erg>-180) bedeutet das ERG der kürzeste Weg ist -> GUZ
erg<=-180 bedeutet das der Rest vom Kreis kürzer ist -> UZ

Zwei Abfragen reichen übrigens nicht, da erg negativ wird, wenn Ist_Winkel und Soll_Winkel
entsprechend ungünstig auf dem Kreis plaziert sind.
Beispiel:
Soll_Winkel=45°
Ist_Winkel=315°
erg=45-315=-270
Wäre also die 4te Abfrage, also UZ