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
Lesezeichen