48 float sign = (degrees < 0 || (degrees == 0 && (minutes < 0 || seconds < 0))) ? -1.0f : 1.0f;
49 return sign * (abs(degrees) + minutes / 60.0f + seconds / 3600.0f);
55 inline float dmsToRadians(
int degrees,
int minutes,
float seconds = 0.0f)
79 if (
mag.x == 0.0f &&
mag.y == 0.0f) {
85 float heading = atan2f(
mag.y,
mag.x);
94 heading += declination;
97 if (heading > 2 *
M_PI) {
99 }
else if (heading < 0) {
118 if (
mag.x == 0.0f &&
mag.y == 0.0f) {
121 float heading_deg = atan2f(
mag.y,
mag.x) * 180.0f /
M_PI;
122 if (heading_deg < 0) {
123 heading_deg += 360.0f;
125 heading_deg += declination_deg;
126 if (heading_deg >= 360.0f) {
127 heading_deg -= 360.0f;
128 }
else if (heading_deg < 0) {
129 heading_deg += 360.0f;
159 return gauss * 100.0f;
MagFullScaleRange
Enumeration defining full-scale range settings for the sensor.
SensorMagnetometer mag(bhy)
float calculateHeadingDegrees(const MagnetometerData &data, float declination_deg=0.0f)
Calculate heading (yaw) angle from magnetometer data in degrees.
float dmsToDecimalDegrees(int degrees, int minutes, float seconds=0.0f)
Convert degrees-minutes-seconds to decimal degrees.
float dmsToRadians(int degrees, int minutes, float seconds=0.0f)
Convert degrees-minutes-seconds to radians.
float microTeslaToGauss(float ut)
Converts microTesla to Gauss.
float calculateMagneticStrength(const MagnetometerData &data)
Calculate total magnetic field strength.
float rangeToGauss(MagFullScaleRange range)
float gaussToMicroTesla(float gauss)
Converts Gauss to microTesla.
float calculateHeading(const MagnetometerData &data, float declination=0.0f)
Calculate heading (yaw) angle from magnetometer data in radians.
Structure representing magnetometer data.
SensorVector magnetic_field
magnetic field strength (Gauss)