微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > (5)mbed实战——HMC5883地磁传感器(指南针)

(5)mbed实战——HMC5883地磁传感器(指南针)

时间:10-02 整理:3721RD 点击:

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


亮着绿色LED的板子专门应对IIC总线接多个设备用的,可以接8个设备。
HMC5883L模块也就是电子指南针罗盘模块,也叫三轴磁场传感器


通信方式: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显示的同时,串口上也发送着同样的数据



大神,有原理图么?学习学习下!感谢!

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top