磁力计校准
方位角获取
驱动磁力计传感器获取到的只是原始数据,即磁场在磁力计芯片的X轴、Y轴以及Z轴的大小,水平放置时,可以通过反正切函数进行获取方位角,如下图的α角度:

α = arctan(y / x),(-π/2 ~ π/2)
(提示:假如以B水平为X轴建立坐标轴,那么α处于第四象限,即得到的角度值为负的,即下图所表达的意思。要使角度以“北多少度”提示,就需要使用到α的互周角,即360+α。简单来说,方位角的计算,还得根据x和y判断象限进行不同的计算)

校准
磁力计容易受到周围一些磁性材料影响,导致坐标圆心坐标偏移,如下图b所示:

若无干扰的情况下,就可以按照前面所述的获取方位角进行获取,但在现实中,会存在偏差,所以需要进行校准。
常用的校准方法有:平面校准法、立体八字校准法、十面校准法。
平面校准法
将开发板水平放置,针对XY轴进行校准,将开发板在XY平面内旋转一周,等价于将地球磁场矢量绕着点O(x0, y0)即圆心垂直于XY平面的法线旋转,这样子就可以得到圆心的位置,圆心就为旋转中X轴和Y轴测到的最大值和最小值,即圆心((x_max + x_min) / 2, (y_max + y_min) / 2)。

从上图就可以知道具体的偏移值就是偏移圆心与正圆心的差,即x轴的偏移为(x_max + x_min) / 2,而y轴的偏移为(y_max + y_min) / 2)。
当我们获取到磁力计的原始值时,再减去偏移值即可。这样的操作下,圆心即归为正中心,如下图所示。

由上可以算得校准后比较精确的值,但是由于arctan的值的范围为(-π/2 ~ π/2),所以想得到0~360°的表示,还得根据象限不同进行不同的运算。
具体区别如下:
当x>0且y>0,处于第一象限:angle = (atan(double)y / x) * 180) / 3.14159f
当x>0且y<0,处于第四象限:angle = 360 + (atan(double)y / x) * 180) / 3.14159f
当x<0,y>0或y<0,处于第二象限或第三现象,angle = 180 + (atan(double)y / x) * 180) / 3.14159f
当x=0且y>0,angle = 90
当x=0且y<0,angle = 270
以上情况,需结合所处象限下,(atan(double)y / x) * 180) / 3.14159f这个算式的值即可理解。
打个比方,处于第二象限,这时候x小于0,而y大于0,如下图情况。

通过(atan(double)y / x) * 180) / 3.14159f算式获取到的是γ的值且该值为负,而这里的0~360度的表示是γ的互补角即β,所以就需要加上180度即可。这样算出来的角度值即β,其意义就是北β度方向,要获得相对准确的地理位置,还得加上“地磁偏角”,与各地的地理位置相关。