¿Calculando el ángulo de una brújula?

0

Obtengo datos de la brújula ( hmC5883L ) y trato de detectar el ángulo.

Bueno, realmente no me importan las compensaciones, solo quiero comprobar que si está plano en la mesa y hago una ronda de 90 grados, obtendré los números x-> 90+x

En lugar de para un giro de 90 grados obtengo valores como estos: (a partir de 13 grados)

13->180, jump right to 0, 0->180, 180->13

código para manipular datos:

                float gScale = .92;  // Scale factor for +1.3Ga setting

                float adjx = x - xOffset; //set to 0 for testing
                float adjy = y - yOffset;//set to 0 for testing

                xs = adjx * gScale; 
                ys = adjy * gScale;
                zs = z * gScale;    

                float heading = atan2(ys, xs);
                heading += declination / 1000; // Declination for geo area

                   if (heading < 0);
                     heading += 2*PI;

                   if (heading > 2*PI)
                     heading -= 2*PI;

                  float angle = heading * 180/M_PI;

¿Qué estoy haciendo mal?

    
pregunta Curnelious

1 respuesta

1
            float gScale = .92;  // Scale factor for +1.3Ga setting

            float adjx = x - xOffset; //set to 0 for testing
            float adjy = y - yOffset;//set to 0 for testing

            xs = adjx * gScale; 
            ys = adjy * gScale;
            zs = z * gScale;    

            float heading = atan2(ys, xs);
           if (heading < 0)
            heading += 2*PI; // translate result atan2() from [-PI,PI] to [0, 2*PI]  

            heading += declination / 1000; // Declination for geo area
            if (heading < 0) heading += 2*PI;;

            if (heading > 2*PI) heading -= 2*PI;

            float angle = heading * 180/PI;
    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas