mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
hmc5883l: changed to standard heading and added declination
Signed-off-by: Mihai Tudor Panu <mihai.t.panu@intel.com>
This commit is contained in:
parent
03318b3c4d
commit
ea7b7a23fa
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
||||||
|
* Contributions: Mihai Tudor Panu <mihai.t.panu@intel.com>
|
||||||
* Copyright (c) 2014 Intel Corporation.
|
* Copyright (c) 2014 Intel Corporation.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -22,6 +23,7 @@
|
|||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
#include "hmc5883l.h"
|
#include "hmc5883l.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -29,7 +31,17 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
upm::Hmc5883l* compass = new upm::Hmc5883l(0);
|
upm::Hmc5883l* compass = new upm::Hmc5883l(0);
|
||||||
fprintf(stdout, "heading: %f\n", compass->heading());
|
int *pos;
|
||||||
|
|
||||||
|
compass->set_declination(0.2749); // Set your declination from true north in radians
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
compass->update(); // Update the coordinates
|
||||||
|
pos = compass->coordinates();
|
||||||
|
fprintf(stdout, "coor: %5d %5d %5d ", pos[0], pos[1], pos[2]);
|
||||||
|
fprintf(stdout, "heading: %5.2f direction: %3.2f\n", compass->heading(), compass->direction());
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
//! [Interesting]
|
//! [Interesting]
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
||||||
|
* Contributions: Mihai Tudor Panu <mihai.t.panu@intel.com>
|
||||||
* Copyright (c) 2014 Intel Corporation.
|
* Copyright (c) 2014 Intel Corporation.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -94,7 +95,7 @@ Hmc5883l::Hmc5883l(int bus)
|
|||||||
Hmc5883l::update();
|
Hmc5883l::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
mraa_result_t
|
||||||
Hmc5883l::update(void)
|
Hmc5883l::update(void)
|
||||||
{
|
{
|
||||||
mraa_i2c_address(m_i2c, HMC5883L_I2C_ADDR);
|
mraa_i2c_address(m_i2c, HMC5883L_I2C_ADDR);
|
||||||
@ -116,13 +117,17 @@ Hmc5883l::update(void)
|
|||||||
float
|
float
|
||||||
Hmc5883l::direction(void)
|
Hmc5883l::direction(void)
|
||||||
{
|
{
|
||||||
return atan2(m_coor[1] * SCALE_0_92_MG, m_coor[0] * SCALE_0_92_MG);
|
return atan2(m_coor[1] * SCALE_0_92_MG, m_coor[0] * SCALE_0_92_MG) + m_declination;
|
||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
Hmc5883l::heading(void)
|
Hmc5883l::heading(void)
|
||||||
{
|
{
|
||||||
return Hmc5883l::direction() * 180/M_PI;
|
float dir = Hmc5883l::direction() * 180/M_PI;
|
||||||
|
if(dir < 0){
|
||||||
|
dir += 360.0;
|
||||||
|
}
|
||||||
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
int*
|
int*
|
||||||
@ -130,3 +135,15 @@ Hmc5883l::coordinates(void)
|
|||||||
{
|
{
|
||||||
return &m_coor[0];
|
return &m_coor[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Hmc5883l::set_declination(float dec)
|
||||||
|
{
|
||||||
|
m_declination = dec;
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
Hmc5883l::get_declination()
|
||||||
|
{
|
||||||
|
return m_declination;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
||||||
|
* Contributions: Mihai Tudor Panu <mihai.t.panu@intel.com>
|
||||||
* Copyright (c) 2014 Intel Corporation.
|
* Copyright (c) 2014 Intel Corporation.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||||||
@ -78,9 +79,22 @@ public:
|
|||||||
*
|
*
|
||||||
* @return 0 for success
|
* @return 0 for success
|
||||||
*/
|
*/
|
||||||
int update();
|
mraa_result_t update();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the magnetic declination for better calibration
|
||||||
|
*/
|
||||||
|
void set_declination(float dec);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current magnetic declination value
|
||||||
|
*
|
||||||
|
* @return magnetic declination as a float
|
||||||
|
*/
|
||||||
|
float get_declination();
|
||||||
private:
|
private:
|
||||||
int m_coor[3];
|
int m_coor[3];
|
||||||
|
float m_declination;
|
||||||
uint8_t m_rx_tx_buf[MAX_BUFFER_LENGTH];
|
uint8_t m_rx_tx_buf[MAX_BUFFER_LENGTH];
|
||||||
mraa_i2c_context m_i2c;
|
mraa_i2c_context m_i2c;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user