极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11526|回复: 1

菜鸟看 HMC5883L

[复制链接]
发表于 2014-9-23 23:48:56 | 显示全部楼层 |阅读模式
说是3轴,磁场强度啥的,菜鸟完全两眼一抹黑~~~

好在,这丫就是一个罗盘对吧,罗盘的唯一作用就是指北对吧~~~

那这玩意就一个值有用,那就是航向Degrees(度)

所以这玩意就这样最清爽了:

库文件在这里
http://forum.arduino.cc/index.php?topic=104811.0
的6楼





  1. #include <Wire.h>//引用了I2C库
  2. #include <HMC5883L.h>//引用HMC5883L罗盘库
  3. HMC5883L compass;//保存我们的指南针作为一个变量。

  4. void setup()
  5. {
  6.   
  7.   Serial.begin(9600);// 初始化串口。
  8.   Wire.begin(); // 启动I2C接口。
  9.   compass = HMC5883L(); // 构造一个新的HMC5883罗盘。

  10.         }

  11.        
  12. void loop()
  13. {


  14. //其实俺啥都不知道,这丫就是定义了 scaled ,这个换算比例?难道Y轴数据就用在了这里,计划通啊~~
  15.   MagnetometerScaled scaled = compass.ReadScaledAxis();

  16.   
  17.   //计算航向时,磁力计是水平的,我去,你咋知道是水平的,就是因为scaled换算过了吗?
  18.   float heading = atan2(scaled.YAxis, scaled.XAxis);
  19. /*
  20. 科普时间:
  21. atan2
  22. atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。
  23. 当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;
  24. 而当y<0时,射线与x轴正方向所得的角的角度指的是x轴正方向绕顺时针方向达到射线旋转的角的角度。
  25. [url]http://zh.wikipedia.org/wiki/Atan2[/url]

  26. 提问时间:
  27. 那啥,既然x,y轴就算出了航向,那Y轴是干嘛的??有高手知道吗?还是库自己就用了,是计算scaled的时候用的吗?
  28. */
  29.   

  30.   //磁偏角纠偏(没有正确的磁偏角,越纠越偏T_T
  31.   float declinationAngle = -0.0273;
  32.   heading += declinationAngle;
  33.   
  34.   // 讨论方向大于为负的弧度,即小于0度的情况
  35.   if(heading < 0)
  36.     heading += 2*PI;
  37.    
  38.   // 讨论方向大于2pi弧度,即360度的情况
  39.   if(heading > 2*PI)
  40.     heading -= 2*PI;
  41.    
  42.   //弧度转换为度,以提高可读性,必须转啊,因为只输出度
  43.   float headingDegrees = heading * 180/M_PI;

  44.    Serial.print("   \tHeading:\t");

  45.    Serial.print(headingDegrees);
  46.    Serial.println(" Degrees   \t");
  47.      delay(500);     

  48. }
复制代码
回复

使用道具 举报

发表于 2014-9-24 09:49:13 | 显示全部楼层
不错,收藏!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 20:48 , Processed in 0.032950 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表