发 帖  
原厂入驻New
[经验]

【NUCLEO-F412ZG试用体验】(5)mbed实战——HMC5883地磁传感器(指南针)

2016-12-12 19:25:25  3412
分享
0
本帖最后由 zpzdd 于 2016-12-13 08:56 编辑

mbed实战——HMC5883地磁传感器(指南针)还是先上效果图:
IMG_20161211_153756_1.jpg

亮着绿色LED的板子专门应对IIC总线接多个设备用的,可以接8个设备。
HMC5883L模块也就是电子指南针罗盘模块,也叫三轴磁场传感器
QQ截图20161211152753.png
通信方式:IIC通信协议
测量范围:±1.3-8 高斯
对于数据量不太大的场合,IIC非常方便。
下面是程序:




  1. #include "mbed.h"
  2. #include "1602_iic_sw.h"
  3. #include "HMC5883L.h"

  4. #define GREEN_LED PB_0
  5. #define BLUE_LED PB_7
  6. #define RED_LED PB_14
  7. //DigitalOut myled1(GREEN_LED);
  8. //DigitalOut myled2(BLUE_LED);
  9. //DigitalOut myled3(RED_LED);

  10. PwmOut PWM1(GREEN_LED);
  11. PwmOut PWM2(BLUE_LED);
  12. PwmOut PWM3(RED_LED);

  13. //    I2C_SCL     = PB_8,
  14. //    I2C_SDA     = PB_9,
  15. IIC_1602 my1602(I2C_SDA, I2C_SCL);
  16. HMC5883L myHMC5883L(I2C_SDA, I2C_SCL);

  17. float gValue = 0;
  18. char data = 0;

  19. int xdata[3] = {0};

  20. Serial pc(PA_2,PA_3);

  21. int main() {        
  22.         PWM1.period(0.01);
  23.         PWM2.period(0.01);
  24.         PWM3.period(0.01);
  25.         
  26.         myHMC5883L.setOpMode(HMC5883L_CONtiNUOUS, HMC5883L_1HZ_NORMAL, HMC5883L_0_7GA);

  27.     while(1) {
  28.                 PWM1 = gValue;
  29.                 PWM2 = 1 - gValue;
  30.                 PWM3 = gValue;

  31.         gValue = gValue + 0.001;
  32.         wait(0.001); // 1 sec

  33.         if(gValue >= 1)
  34.         {
  35.                 gValue = 0;
  36.                         myHMC5883L.readData(xdata);
  37.                         my1602.setCursor(0, 0);
  38.                         my1602.lcdPrint("x:");
  39.                         my1602.lcdPrint_int(xdata[0]);
  40.                         
  41.                         my1602.setCursor(8, 0);
  42.                         my1602.lcdPrint("y:");
  43.                         my1602.lcdPrint_int(xdata[1]);
  44.                         
  45.                         my1602.setCursor(0, 1);
  46.                         my1602.lcdPrint("z:");
  47.                         my1602.lcdPrint_int(xdata[2]);
  48.                         
  49.                         printf("xdata[0] = %d ", xdata[0]);        
  50.                         printf("xdata[1] = %d ", xdata[1]);
  51.                         printf("xdata[2] = %d\n", xdata[2]);                        
  52.         }
  53.     }
  54. }


复制代码

1602显示的同时,串口上也发送着同样的数据
QQ截图20161211155640.png


王震 2017-5-16 16:23:10
大神,有原理图么?学习学习下!感谢!!!!!!
回复

举报

zpzdd 2017-5-19 08:46:14


luoyu323 发表于 2017-5-16 16:23
大神,有原理图么?学习学习下!感谢!!!!!!



IIC总线的,看程序接上去就好了
回复

举报

1923903031 2018-3-29 13:48:31
为什么我读的数据一直是0   我看了程序跟你的也差不多啊……
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
快速回复 返回顶部 返回列表