Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of HMC5883L by
Revision 5:5104b90e3f0f, committed 2014-05-02
- Comitter:
- pHysiX
- Date:
- Fri May 02 17:01:15 2014 +0000
- Parent:
- 4:bc4e1201e092
- Commit message:
- Fixed and tidied code. Need to add in features from Teensy/Tilty library
Changed in this revision
HMC5883L.cpp | Show annotated file Show diff for this revision Revisions of this file |
HMC5883L.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/HMC5883L.cpp Tue Nov 06 17:35:51 2012 +0000 +++ b/HMC5883L.cpp Fri May 02 17:01:15 2014 +0000 @@ -36,7 +36,7 @@ { // Placement new to avoid additional heap memory allocation. new(i2cRaw) I2C(sda, scl); - + i2c_.frequency(400000); init(); } @@ -51,7 +51,7 @@ { // init - configure your setup here setConfigurationA(AVG8_SAMPLES | OUTPUT_RATE_15); // 8 sample average, 15Hz, normal mode - setConfigurationB(0x20); // default + setConfigurationB(0x20); // default // TILTY USES 0x00 setMode(CONTINUOUS_MODE); // continuous sample mode } @@ -129,6 +129,29 @@ output[i] = int16_t(((unsigned char)data[i*2] << 8) | (unsigned char)data[i*2+1]); } +/** +*@param[in] x X magnetometer value. +*@param[in] y Y magnetometer value. +*@param[in] z Z magnetometer value. +*@param[in] pitch Pitch angle in degrees. +*@param[in] roll Y Roll angle in degrees. +*/ +float HMC5883L::getTiltCompensatedHeading(int x, int y, int z, float pitch, float roll) +{ + /* + float pitch_rad = pitch * (M_PI / 180); + float roll_rad = roll * (M_PI / 180); + + int xH = x * cos(pitch_rad) + z * sin(pitch_rad); + int yH = x * sin(roll_rad) * sin(pitch_rad) + y * cos(roll_rad) - z * sin(roll_rad) * cos(pitch_rad); + + float temp = atan2(yH, xH);//(atan2(yH, xH) + M_PI) * 180/M_PI; + + return temp; + */ + return 0.0; +} + double HMC5883L::getHeadingXY() { int16_t raw_data[3]; @@ -144,4 +167,20 @@ heading -= PI2; return heading; +} + +/** \brief undocumented function + + \param[in] param description of parameter + \param[out] param description of parameter + + \return return description of return value +**/ +bool HMC5883L::getDataReady() +{ + char cmd[2]; + cmd[0] = 0x09; // status register + i2c_.write(I2C_ADDRESS, cmd, 1, true); + i2c_.read(I2C_ADDRESS, &cmd[1], 1, false); + return cmd[1] == 0x17; } \ No newline at end of file
--- a/HMC5883L.h Tue Nov 06 17:35:51 2012 +0000 +++ b/HMC5883L.h Fri May 02 17:01:15 2014 +0000 @@ -219,6 +219,8 @@ */ double getHeadingXY(); + float getTiltCompensatedHeading(int x, int y, int z, float pitch, float roll); + /** * Function for getting degree heading using 2-dimensional calculation. * @@ -233,6 +235,8 @@ return (getHeadingXY() * RAD_TO_DEG); } + bool getDataReady(); + private: I2C &i2c_;