Danke für die vielen Hinweise.
Besonderen Dank an Peter666, das war die Lösung!
Der Wertebereich von 0-360 stimmte schon mit der Funktion, die Richtung war nur um 90 Grad verschoben.
Eventuell waren die Konstanten für andere Magnetfeld-Sensoren.
Ich habe nur die Konstanten um 90 geändert und die Himmelsrichtung war ok.
Die Deklination kann man falls gewünscht glaube ich mit den Tilt-Werten des Sensors berechnen und berücksichtigen.
Das werde ich mal probieren und das Ergebnis hier posten.
Hier die entsprechend geänderte Funktion von Peter666, die ursptünglichen Zeilen habe ich belassen und auskommentiert:
Code:
function Heading: single;
begin
if (OrientationSensor1.Sensor.HeadingY > 0) then
//result := 90.0 - arcTan(OrientationSensor1.Sensor.HeadingX / OrientationSensor1.Sensor.HeadingY) * 180 / PI
result := arcTan(OrientationSensor1.Sensor.HeadingX / OrientationSensor1.Sensor.HeadingY) * 180 / PI
else if (OrientationSensor1.Sensor.HeadingY < 0) then
//result := 270 - arcTan(OrientationSensor1.Sensor.HeadingX / OrientationSensor1.Sensor.HeadingY) * 180 / PI
result := 180 - arcTan(OrientationSensor1.Sensor.HeadingX / OrientationSensor1.Sensor.HeadingY) * 180 / PI
else if (OrientationSensor1.Sensor.HeadingY = 0) and (OrientationSensor1.Sensor.HeadingX < 0) then
result := 180
else if (OrientationSensor1.Sensor.HeadingY = 0) and (OrientationSensor1.Sensor.HeadingX > 0) then
result := 0;
end;