i want to try calibrate my sensor compass but the code has an error
this is the error message: 'class HMC5883L' has no member named 'begin'. then i try to command the syntax, but there still has an error for other class.
anybody know? please help me.. Thank You
this is the code
/*
HMC5883L Triple Axis Digital Compass. Compass Example.
Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-hmc5883l.html
GIT: https://github.com/jarzebski/Arduino-HMC5883L
Web: http://www.jarzebski.pl
(c) 2014 by Korneliusz Jarzebski
*/
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
void setup()
{
Serial.begin(9600);
// Initialize Initialize HMC5883L
Serial.println("Initialize HMC5883L");
while (!compass.begin())
{
Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
delay(500);
}
// Set measurement range
compass.setRange(HMC5883L_RANGE_1_3GA);
// Set measurement mode
compass.setMeasurementMode(HMC5883L_CONTINOUS);
// Set data rate
compass.setDataRate(HMC5883L_DATARATE_30HZ);
// Set number of samples averaged
compass.setSamples(HMC5883L_SAMPLES_8);
// Set calibration offset. See HMC5883L_calibration.ino
compass.setOffset(0, 0);
}
void loop()
{
Vector norm = compass.readNormalize();
// Calculate heading
float heading = atan2(norm.YAxis, norm.XAxis);
// Set declination angle on your location and fix heading
// You can find your declination on: http://magnetic-declination.com/
// (+) Positive or (-) for negative
// For Bytom / Poland declination angle is 4'26E (positive)
// Formula: (deg + (min / 60.0)) / (180 / M_PI);
float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
heading += declinationAngle;
// Correct for heading < 0deg and heading > 360deg
if (heading < 0)
{
heading += 2 * PI;
}
if (heading > 2 * PI)
{
heading -= 2 * PI;
}
// Convert to degrees
float headingDegrees = heading * 180/M_PI;
// Output
Serial.print(" Heading = ");
Serial.print(heading);
Serial.print(" Degress = ");
Serial.print(headingDegrees);
Serial.println();
delay(100);
}
and this is the library code
/*
HMC5883L.h - Header file for the HMC5883L Triple Axis Digital Compass Arduino Library.
Version: 1.1.0
(c) 2014 Korneliusz Jarzebski
www.jarzebski.pl
This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef HMC5883L_h
#define HMC5883L_h
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#define HMC5883L_ADDRESS (0x1E)
#define HMC5883L_REG_CONFIG_A (0x00)
#define HMC5883L_REG_CONFIG_B (0x01)
#define HMC5883L_REG_MODE (0x02)
#define HMC5883L_REG_OUT_X_M (0x03)
#define HMC5883L_REG_OUT_X_L (0x04)
#define HMC5883L_REG_OUT_Z_M (0x05)
#define HMC5883L_REG_OUT_Z_L (0x06)
#define HMC5883L_REG_OUT_Y_M (0x07)
#define HMC5883L_REG_OUT_Y_L (0x08)
#define HMC5883L_REG_STATUS (0x09)
#define HMC5883L_REG_IDENT_A (0x0A)
#define HMC5883L_REG_IDENT_B (0x0B)
#define HMC5883L_REG_IDENT_C (0x0C)
typedef enum
{
HMC5883L_SAMPLES_8 = 0b11,
HMC5883L_SAMPLES_4 = 0b10,
HMC5883L_SAMPLES_2 = 0b01,
HMC5883L_SAMPLES_1 = 0b00
} hmc5883l_samples_t;
typedef enum
{
HMC5883L_DATARATE_75HZ = 0b110,
HMC5883L_DATARATE_30HZ = 0b101,
HMC5883L_DATARATE_15HZ = 0b100,
HMC5883L_DATARATE_7_5HZ = 0b011,
HMC5883L_DATARATE_3HZ = 0b010,
HMC5883L_DATARATE_1_5HZ = 0b001,
HMC5883L_DATARATE_0_75_HZ = 0b000
} hmc5883l_dataRate_t;
typedef enum
{
HMC5883L_RANGE_8_1GA = 0b111,
HMC5883L_RANGE_5_6GA = 0b110,
HMC5883L_RANGE_4_7GA = 0b101,
HMC5883L_RANGE_4GA = 0b100,
HMC5883L_RANGE_2_5GA = 0b011,
HMC5883L_RANGE_1_9GA = 0b010,
HMC5883L_RANGE_1_3GA = 0b001,
HMC5883L_RANGE_0_88GA = 0b000
} hmc5883l_range_t;
typedef enum
{
HMC5883L_IDLE = 0b10,
HMC5883L_SINGLE = 0b01,
HMC5883L_CONTINOUS = 0b00
} hmc5883l_mode_t;
#ifndef VECTOR_STRUCT_H
#define VECTOR_STRUCT_H
struct Vector
{
float XAxis;
float YAxis;
float ZAxis;
};
#endif
class HMC5883L
{
public:
bool begin(void);
Vector readRaw(void);
Vector readNormalize(void);
void setOffset(int xo, int yo);
void setRange(hmc5883l_range_t range);
hmc5883l_range_t getRange(void);
void setMeasurementMode(hmc5883l_mode_t mode);
hmc5883l_mode_t getMeasurementMode(void);
void setDataRate(hmc5883l_dataRate_t dataRate);
hmc5883l_dataRate_t getDataRate(void);
void setSamples(hmc5883l_samples_t samples);
hmc5883l_samples_t getSamples(void);
private:
float mgPerDigit;
Vector v;
int xOffset, yOffset;
void writeRegister8(uint8_t reg, uint8_t value);
uint8_t readRegister8(uint8_t reg);
uint8_t fastRegister8(uint8_t reg);
int16_t readRegister16(uint8_t reg);
};
#endif
library source : GitHub - jarzebski/Arduino-HMC5883L: HMC5883L Triple Axis Digital Compass Arduino Library
Compass_Calibrate.ino (2.04 KB)
HMC5883L.h (3.21 KB)