Arduino读取HMC5883L电子罗盘数据问题
最近看到论坛的大神写的HMC5883L模块的程序,一时心血来潮,使用HMC5883L.h库写了一个电子罗盘程序出现问题:初始值稳定,用手移动模块数据发生变化,有时数据读取卡住不动不再变化,如下图:
http://www.geek-workshop.com/forum.php?mod=image&aid=32106&size=300x300&key=0fd29be4721320cb&nocache=yes&type=fixnone
请问有碰到这种情况的吗?怎样解决?
代码如下:
#include<Wire.h>
#include<HMC5883L.h>
HMC5883L compass;
void setup()
{
Serial.begin(9600);
Serial.println("HMC5883L Initialize...");
delay(500);
while(!compass.begin())
{
Serial.println("Initialize Faulse");
delay(500);
}
compass.setRange(HMC5883L_RANGE_1_3GA);
compass.setMeasurementMode(HMC5883L_CONTINOUS);
compass.setDataRate(HMC5883L_DATARATE_15HZ);
compass.setSamples(HMC5883L_SAMPLES_1);
checksettings();
}
void checksettings()
{
Serial.print("HMC5883L Range: ");
switch(compass.getRange())
{
case HMC5883L_RANGE_0_88GA:
Serial.println("0.88Ga");
break;
case HMC5883L_RANGE_1_3GA:
Serial.println("1.3Ga");
break;
case HMC5883L_RANGE_1_9GA:
Serial.println("1.9Ga");
break;
case HMC5883L_RANGE_2_5GA:
Serial.println("2.5Ga");
break;
case HMC5883L_RANGE_4GA:
Serial.println("4Ga");
break;
case HMC5883L_RANGE_4_7GA:
Serial.println("4.7Ga");
break;
case HMC5883L_RANGE_5_6GA:
Serial.println("5.6Ga");
break;
case HMC5883L_RANGE_8_1GA:
Serial.println("8.1Ga");
break;
default:Serial.println("ERROR RANGE");
break;
}
Serial.print("HMC5883L Measurement Mode: ");
switch(compass.getMeasurementMode())
{
case HMC5883L_IDLE:
Serial.println("Idle Mode");
break;
case HMC5883L_SINGLE:
Serial.println("Single Mode");
break;
case HMC5883L_CONTINOUS:
Serial.println("Continous Mode");
break;
default:Serial.println("ERROR MODE");
break;
}
Serial.print("HMC5883L Data Rate: ");
switch(compass.getDataRate())
{
case HMC5883L_DATARATE_75HZ:
Serial.println("75Hz");
break;
case HMC5883L_DATARATE_30HZ:
Serial.println("30Hz");
break;
case HMC5883L_DATARATE_15HZ:
Serial.println("15Hz");
break;
case HMC5883L_DATARATE_7_5HZ:
Serial.println("7.5Hz");
break;
case HMC5883L_DATARATE_3HZ:
Serial.println("3Hz");
break;
case HMC5883L_DATARATE_1_5HZ:
Serial.println("1.5Hz");
break;
case HMC5883L_DATARATE_0_75_HZ:
Serial.println("0.75Hz");
break;
default:Serial.println("ERROR DATARATE");
break;
}
Serial.print("HMC5883L Sample: ");
switch(compass.getSamples())
{
case HMC5883L_SAMPLES_8:
Serial.println("8");
break;
case HMC5883L_SAMPLES_4:
Serial.println("4");
break;
case HMC5883L_SAMPLES_2:
Serial.println("2");
break;
case HMC5883L_SAMPLES_1:
Serial.println("1");
break;
default:Serial.println("ERROR SAMPLE");
break;
}
}
void loop()
{
Vector norm=compass.readNormalize();
Serial.print("X Normalize: ");
Serial.print(norm.XAxis);
Serial.print("Y Normalize: ");
Serial.print(norm.YAxis);
Serial.print("Z Normalize: ");
Serial.println(norm.ZAxis);
delay(500);
}
以前用32读地磁的时候也会经常出现卡死的情况,后来也没解决就放弃用它了/ 木森林的年轮 发表于 2016-9-11 11:59
以前用32读地磁的时候也会经常出现卡死的情况,后来也没解决就放弃用它了/
同感,有时莫名的卡死 我也试过卡住,不过是因为电路接触问题,软件没问题。 arduino板无法识别HMC5883L感应器怎么解决,无法访问寄存,求大神解答 SCL和SDA上拉了吗 弘毅 发表于 2017-5-9 11:10
SCL和SDA上拉了吗
没有 ,不会连上拉电阻,这个是必须的吗?那需要多大的电阻啊?怎么连,可以上传连接图吗 zcp冰淼 发表于 2017-5-9 19:01
没有 ,不会连上拉电阻,这个是必须的吗?那需要多大的电阻啊?怎么连,可以上传连接图吗
SCL或者SDA,接一个10K电阻到VCC,上拉是必须的。
页:
[1]