|
|
说是3轴,磁场强度啥的,菜鸟完全两眼一抹黑~~~
好在,这丫就是一个罗盘对吧,罗盘的唯一作用就是指北对吧~~~
那这玩意就一个值有用,那就是航向Degrees(度)
所以这玩意就这样最清爽了:
库文件在这里
http://forum.arduino.cc/index.php?topic=104811.0
的6楼
- #include <Wire.h>//引用了I2C库
- #include <HMC5883L.h>//引用HMC5883L罗盘库
- HMC5883L compass;//保存我们的指南针作为一个变量。
- void setup()
- {
-
- Serial.begin(9600);// 初始化串口。
- Wire.begin(); // 启动I2C接口。
- compass = HMC5883L(); // 构造一个新的HMC5883罗盘。
- }
-
- void loop()
- {
- //其实俺啥都不知道,这丫就是定义了 scaled ,这个换算比例?难道Y轴数据就用在了这里,计划通啊~~
- MagnetometerScaled scaled = compass.ReadScaledAxis();
-
- //计算航向时,磁力计是水平的,我去,你咋知道是水平的,就是因为scaled换算过了吗?
- float heading = atan2(scaled.YAxis, scaled.XAxis);
- /*
- 科普时间:
- atan2
- atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。
- 当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;
- 而当y<0时,射线与x轴正方向所得的角的角度指的是x轴正方向绕顺时针方向达到射线旋转的角的角度。
- [url]http://zh.wikipedia.org/wiki/Atan2[/url]
- 提问时间:
- 那啥,既然x,y轴就算出了航向,那Y轴是干嘛的??有高手知道吗?还是库自己就用了,是计算scaled的时候用的吗?
- */
-
- //磁偏角纠偏(没有正确的磁偏角,越纠越偏T_T
- float declinationAngle = -0.0273;
- heading += declinationAngle;
-
- // 讨论方向大于为负的弧度,即小于0度的情况
- if(heading < 0)
- heading += 2*PI;
-
- // 讨论方向大于2pi弧度,即360度的情况
- if(heading > 2*PI)
- heading -= 2*PI;
-
- //弧度转换为度,以提高可读性,必须转啊,因为只输出度
- float headingDegrees = heading * 180/M_PI;
- Serial.print(" \tHeading:\t");
- Serial.print(headingDegrees);
- Serial.println(" Degrees \t");
- delay(500);
- }
复制代码 |
|