diff --git a/.clang-format b/.clang-format old mode 100644 new mode 100755 diff --git a/.github/workflows/githubci.yml b/.github/workflows/githubci.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/Adafruit_QMC5883P.cpp b/Adafruit_QMC5883P.cpp old mode 100644 new mode 100755 index a0e109f..81d33dd --- a/Adafruit_QMC5883P.cpp +++ b/Adafruit_QMC5883P.cpp @@ -29,7 +29,9 @@ /*! * @brief Instantiates a new QMC5883P class */ -Adafruit_QMC5883P::Adafruit_QMC5883P(void) { i2c_dev = NULL; } +Adafruit_QMC5883P::Adafruit_QMC5883P(void) { + i2c_dev = NULL; +} /*! * @brief Cleans up the QMC5883P @@ -48,7 +50,7 @@ Adafruit_QMC5883P::~Adafruit_QMC5883P(void) { * The Wire object to be used for I2C connections. * @return True if initialization was successful, otherwise false. */ -bool Adafruit_QMC5883P::begin(uint8_t i2c_addr, TwoWire *wire) { +bool Adafruit_QMC5883P::begin(uint8_t i2c_addr, TwoWire* wire) { if (i2c_dev) { delete i2c_dev; } @@ -60,7 +62,8 @@ bool Adafruit_QMC5883P::begin(uint8_t i2c_addr, TwoWire *wire) { } // Check chip ID - Adafruit_BusIO_Register chip_id_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CHIPID); + Adafruit_BusIO_Register chip_id_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CHIPID); uint8_t chip_id = chip_id_reg.read(); if (chip_id != 0x80) { return false; @@ -79,20 +82,21 @@ bool Adafruit_QMC5883P::begin(uint8_t i2c_addr, TwoWire *wire) { * Pointer to store Z-axis raw data (2's complement) * @return True if read was successful, otherwise false. */ -bool Adafruit_QMC5883P::getRawMagnetic(int16_t *x, int16_t *y, int16_t *z) { +bool Adafruit_QMC5883P::getRawMagnetic(int16_t* x, int16_t* y, int16_t* z) { uint8_t buffer[6]; - + // Read all 6 bytes (X,Y,Z LSB+MSB) starting from X LSB register - Adafruit_BusIO_Register data_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_XOUT_LSB, 6); + Adafruit_BusIO_Register data_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_XOUT_LSB, 6); if (!data_reg.read(buffer, 6)) { return false; } - + // Combine LSB and MSB for each axis (2's complement) - *x = (int16_t)((buffer[1] << 8) | buffer[0]); // X = MSB[1] | LSB[0] - *y = (int16_t)((buffer[3] << 8) | buffer[2]); // Y = MSB[3] | LSB[2] - *z = (int16_t)((buffer[5] << 8) | buffer[4]); // Z = MSB[5] | LSB[4] - + *x = (int16_t)((buffer[1] << 8) | buffer[0]); // X = MSB[1] | LSB[0] + *y = (int16_t)((buffer[3] << 8) | buffer[2]); // Y = MSB[3] | LSB[2] + *z = (int16_t)((buffer[5] << 8) | buffer[4]); // Z = MSB[5] | LSB[4] + return true; } @@ -106,19 +110,19 @@ bool Adafruit_QMC5883P::getRawMagnetic(int16_t *x, int16_t *y, int16_t *z) { * Pointer to store Z-axis field in Gauss * @return True if read was successful, otherwise false. */ -bool Adafruit_QMC5883P::getGaussField(float *x, float *y, float *z) { +bool Adafruit_QMC5883P::getGaussField(float* x, float* y, float* z) { int16_t raw_x, raw_y, raw_z; - + // Get raw magnetic data if (!getRawMagnetic(&raw_x, &raw_y, &raw_z)) { return false; } - + // Get current range to determine conversion factor qmc5883p_range_t range = getRange(); float lsb_per_gauss; - - switch(range) { + + switch (range) { case QMC5883P_RANGE_30G: lsb_per_gauss = 1000.0; break; @@ -134,12 +138,12 @@ bool Adafruit_QMC5883P::getGaussField(float *x, float *y, float *z) { default: return false; } - + // Convert to Gauss *x = (float)raw_x / lsb_per_gauss; *y = (float)raw_y / lsb_per_gauss; *z = (float)raw_z / lsb_per_gauss; - + return true; } @@ -148,8 +152,10 @@ bool Adafruit_QMC5883P::getGaussField(float *x, float *y, float *z) { * @return True if new data is ready, false otherwise */ bool Adafruit_QMC5883P::isDataReady() { - Adafruit_BusIO_Register status_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_STATUS); - Adafruit_BusIO_RegisterBits drdy_bit = Adafruit_BusIO_RegisterBits(&status_reg, 1, 0); + Adafruit_BusIO_Register status_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_STATUS); + Adafruit_BusIO_RegisterBits drdy_bit = + Adafruit_BusIO_RegisterBits(&status_reg, 1, 0); return drdy_bit.read(); } @@ -158,8 +164,10 @@ bool Adafruit_QMC5883P::isDataReady() { * @return True if overflow occurred, false otherwise */ bool Adafruit_QMC5883P::isOverflow() { - Adafruit_BusIO_Register status_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_STATUS); - Adafruit_BusIO_RegisterBits ovfl_bit = Adafruit_BusIO_RegisterBits(&status_reg, 1, 1); + Adafruit_BusIO_Register status_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_STATUS); + Adafruit_BusIO_RegisterBits ovfl_bit = + Adafruit_BusIO_RegisterBits(&status_reg, 1, 1); return ovfl_bit.read(); } @@ -169,8 +177,10 @@ bool Adafruit_QMC5883P::isOverflow() { * The operating mode to set */ void Adafruit_QMC5883P::setMode(qmc5883p_mode_t mode) { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits mode_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 0); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits mode_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 0); mode_bits.write(mode); } @@ -179,8 +189,10 @@ void Adafruit_QMC5883P::setMode(qmc5883p_mode_t mode) { * @return The current operating mode */ qmc5883p_mode_t Adafruit_QMC5883P::getMode() { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits mode_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 0); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits mode_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 0); return (qmc5883p_mode_t)mode_bits.read(); } @@ -190,8 +202,10 @@ qmc5883p_mode_t Adafruit_QMC5883P::getMode() { * The output data rate to set */ void Adafruit_QMC5883P::setODR(qmc5883p_odr_t odr) { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits odr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 2); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits odr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 2); odr_bits.write(odr); } @@ -200,8 +214,10 @@ void Adafruit_QMC5883P::setODR(qmc5883p_odr_t odr) { * @return The current output data rate */ qmc5883p_odr_t Adafruit_QMC5883P::getODR() { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits odr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 2); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits odr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 2); return (qmc5883p_odr_t)odr_bits.read(); } @@ -211,8 +227,10 @@ qmc5883p_odr_t Adafruit_QMC5883P::getODR() { * The over sample ratio to set */ void Adafruit_QMC5883P::setOSR(qmc5883p_osr_t osr) { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits osr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 4); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits osr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 4); osr_bits.write(osr); } @@ -221,8 +239,10 @@ void Adafruit_QMC5883P::setOSR(qmc5883p_osr_t osr) { * @return The current over sample ratio */ qmc5883p_osr_t Adafruit_QMC5883P::getOSR() { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits osr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 4); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits osr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 4); return (qmc5883p_osr_t)osr_bits.read(); } @@ -232,8 +252,10 @@ qmc5883p_osr_t Adafruit_QMC5883P::getOSR() { * The downsample ratio to set */ void Adafruit_QMC5883P::setDSR(qmc5883p_dsr_t dsr) { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits dsr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 6); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits dsr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 6); dsr_bits.write(dsr); } @@ -242,8 +264,10 @@ void Adafruit_QMC5883P::setDSR(qmc5883p_dsr_t dsr) { * @return The current downsample ratio */ qmc5883p_dsr_t Adafruit_QMC5883P::getDSR() { - Adafruit_BusIO_Register ctrl1_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); - Adafruit_BusIO_RegisterBits dsr_bits = Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 6); + Adafruit_BusIO_Register ctrl1_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL1); + Adafruit_BusIO_RegisterBits dsr_bits = + Adafruit_BusIO_RegisterBits(&ctrl1_reg, 2, 6); return (qmc5883p_dsr_t)dsr_bits.read(); } @@ -252,17 +276,20 @@ qmc5883p_dsr_t Adafruit_QMC5883P::getDSR() { * @return True if reset was successful, false otherwise */ bool Adafruit_QMC5883P::softReset() { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits reset_bit = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 1, 7); - + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits reset_bit = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 1, 7); + // Set reset bit reset_bit.write(1); - + // Wait for reset to complete (datasheet doesn't specify time, use 50ms) delay(50); - + // Check if chip ID is still valid after reset - Adafruit_BusIO_Register chip_id_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CHIPID); + Adafruit_BusIO_Register chip_id_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CHIPID); uint8_t chip_id = chip_id_reg.read(); return (chip_id == 0x80); } @@ -272,15 +299,17 @@ bool Adafruit_QMC5883P::softReset() { * @return True if self-test passed, false otherwise */ bool Adafruit_QMC5883P::selfTest() { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits test_bit = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 1, 6); - + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits test_bit = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 1, 6); + // Set self-test bit test_bit.write(1); - + // Wait for self-test to complete (datasheet suggests 5ms) delay(5); - + // Check if self-test bit auto-cleared (indicates completion) uint8_t test_status = test_bit.read(); return (test_status == 0); @@ -292,8 +321,10 @@ bool Adafruit_QMC5883P::selfTest() { * The magnetic field range to set */ void Adafruit_QMC5883P::setRange(qmc5883p_range_t range) { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits range_bits = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 2); + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits range_bits = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 2); range_bits.write(range); } @@ -302,8 +333,10 @@ void Adafruit_QMC5883P::setRange(qmc5883p_range_t range) { * @return The current magnetic field range */ qmc5883p_range_t Adafruit_QMC5883P::getRange() { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits range_bits = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 2); + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits range_bits = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 2); return (qmc5883p_range_t)range_bits.read(); } @@ -313,8 +346,10 @@ qmc5883p_range_t Adafruit_QMC5883P::getRange() { * The set/reset mode to set */ void Adafruit_QMC5883P::setSetResetMode(qmc5883p_setreset_t mode) { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits setreset_bits = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 0); + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits setreset_bits = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 0); setreset_bits.write(mode); } @@ -323,7 +358,9 @@ void Adafruit_QMC5883P::setSetResetMode(qmc5883p_setreset_t mode) { * @return The current set/reset mode */ qmc5883p_setreset_t Adafruit_QMC5883P::getSetResetMode() { - Adafruit_BusIO_Register ctrl2_reg = Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); - Adafruit_BusIO_RegisterBits setreset_bits = Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 0); + Adafruit_BusIO_Register ctrl2_reg = + Adafruit_BusIO_Register(i2c_dev, QMC5883P_REG_CONTROL2); + Adafruit_BusIO_RegisterBits setreset_bits = + Adafruit_BusIO_RegisterBits(&ctrl2_reg, 2, 0); return (qmc5883p_setreset_t)setreset_bits.read(); } \ No newline at end of file diff --git a/Adafruit_QMC5883P.h b/Adafruit_QMC5883P.h old mode 100644 new mode 100755 index 6996410..4f5f766 --- a/Adafruit_QMC5883P.h +++ b/Adafruit_QMC5883P.h @@ -19,10 +19,11 @@ #ifndef _ADAFRUIT_QMC5883P_H_ #define _ADAFRUIT_QMC5883P_H_ -#include "Arduino.h" #include #include +#include "Arduino.h" + /*========================================================================= I2C ADDRESS/BITS -----------------------------------------------------------------------*/ @@ -32,16 +33,16 @@ /*========================================================================= REGISTERS -----------------------------------------------------------------------*/ -#define QMC5883P_REG_CHIPID 0x00 ///< Chip ID register -#define QMC5883P_REG_XOUT_LSB 0x01 ///< X-axis output LSB register -#define QMC5883P_REG_XOUT_MSB 0x02 ///< X-axis output MSB register -#define QMC5883P_REG_YOUT_LSB 0x03 ///< Y-axis output LSB register -#define QMC5883P_REG_YOUT_MSB 0x04 ///< Y-axis output MSB register -#define QMC5883P_REG_ZOUT_LSB 0x05 ///< Z-axis output LSB register -#define QMC5883P_REG_ZOUT_MSB 0x06 ///< Z-axis output MSB register -#define QMC5883P_REG_STATUS 0x09 ///< Status register -#define QMC5883P_REG_CONTROL1 0x0A ///< Control register 1 -#define QMC5883P_REG_CONTROL2 0x0B ///< Control register 2 +#define QMC5883P_REG_CHIPID 0x00 ///< Chip ID register +#define QMC5883P_REG_XOUT_LSB 0x01 ///< X-axis output LSB register +#define QMC5883P_REG_XOUT_MSB 0x02 ///< X-axis output MSB register +#define QMC5883P_REG_YOUT_LSB 0x03 ///< Y-axis output LSB register +#define QMC5883P_REG_YOUT_MSB 0x04 ///< Y-axis output MSB register +#define QMC5883P_REG_ZOUT_LSB 0x05 ///< Z-axis output LSB register +#define QMC5883P_REG_ZOUT_MSB 0x06 ///< Z-axis output MSB register +#define QMC5883P_REG_STATUS 0x09 ///< Status register +#define QMC5883P_REG_CONTROL1 0x0A ///< Control register 1 +#define QMC5883P_REG_CONTROL2 0x0B ///< Control register 2 /*=========================================================================*/ /*========================================================================= @@ -51,40 +52,40 @@ * @brief Operating mode options */ typedef enum { - QMC5883P_MODE_SUSPEND = 0x00, ///< Suspend mode - QMC5883P_MODE_NORMAL = 0x01, ///< Normal mode - QMC5883P_MODE_SINGLE = 0x02, ///< Single measurement mode - QMC5883P_MODE_CONTINUOUS = 0x03 ///< Continuous mode + QMC5883P_MODE_SUSPEND = 0x00, ///< Suspend mode + QMC5883P_MODE_NORMAL = 0x01, ///< Normal mode + QMC5883P_MODE_SINGLE = 0x02, ///< Single measurement mode + QMC5883P_MODE_CONTINUOUS = 0x03 ///< Continuous mode } qmc5883p_mode_t; /*! * @brief Output data rate options */ typedef enum { - QMC5883P_ODR_10HZ = 0x00, ///< 10 Hz output data rate - QMC5883P_ODR_50HZ = 0x01, ///< 50 Hz output data rate - QMC5883P_ODR_100HZ = 0x02, ///< 100 Hz output data rate - QMC5883P_ODR_200HZ = 0x03 ///< 200 Hz output data rate + QMC5883P_ODR_10HZ = 0x00, ///< 10 Hz output data rate + QMC5883P_ODR_50HZ = 0x01, ///< 50 Hz output data rate + QMC5883P_ODR_100HZ = 0x02, ///< 100 Hz output data rate + QMC5883P_ODR_200HZ = 0x03 ///< 200 Hz output data rate } qmc5883p_odr_t; /*! * @brief Over sample ratio options */ typedef enum { - QMC5883P_OSR_8 = 0x00, ///< Over sample ratio = 8 - QMC5883P_OSR_4 = 0x01, ///< Over sample ratio = 4 - QMC5883P_OSR_2 = 0x02, ///< Over sample ratio = 2 - QMC5883P_OSR_1 = 0x03 ///< Over sample ratio = 1 + QMC5883P_OSR_8 = 0x00, ///< Over sample ratio = 8 + QMC5883P_OSR_4 = 0x01, ///< Over sample ratio = 4 + QMC5883P_OSR_2 = 0x02, ///< Over sample ratio = 2 + QMC5883P_OSR_1 = 0x03 ///< Over sample ratio = 1 } qmc5883p_osr_t; /*! * @brief Downsample ratio options */ typedef enum { - QMC5883P_DSR_1 = 0x00, ///< Downsample ratio = 1 - QMC5883P_DSR_2 = 0x01, ///< Downsample ratio = 2 - QMC5883P_DSR_4 = 0x02, ///< Downsample ratio = 4 - QMC5883P_DSR_8 = 0x03 ///< Downsample ratio = 8 + QMC5883P_DSR_1 = 0x00, ///< Downsample ratio = 1 + QMC5883P_DSR_2 = 0x01, ///< Downsample ratio = 2 + QMC5883P_DSR_4 = 0x02, ///< Downsample ratio = 4 + QMC5883P_DSR_8 = 0x03 ///< Downsample ratio = 8 } qmc5883p_dsr_t; /*=========================================================================*/ @@ -95,19 +96,19 @@ typedef enum { * @brief Field range options */ typedef enum { - QMC5883P_RANGE_30G = 0x00, ///< ±30 Gauss range - QMC5883P_RANGE_12G = 0x01, ///< ±12 Gauss range - QMC5883P_RANGE_8G = 0x02, ///< ±8 Gauss range - QMC5883P_RANGE_2G = 0x03 ///< ±2 Gauss range + QMC5883P_RANGE_30G = 0x00, ///< ±30 Gauss range + QMC5883P_RANGE_12G = 0x01, ///< ±12 Gauss range + QMC5883P_RANGE_8G = 0x02, ///< ±8 Gauss range + QMC5883P_RANGE_2G = 0x03 ///< ±2 Gauss range } qmc5883p_range_t; /*! * @brief Set/Reset mode options */ typedef enum { - QMC5883P_SETRESET_ON = 0x00, ///< Set and reset on + QMC5883P_SETRESET_ON = 0x00, ///< Set and reset on QMC5883P_SETRESET_SETONLY = 0x01, ///< Set only on - QMC5883P_SETRESET_OFF = 0x02 ///< Set and reset off + QMC5883P_SETRESET_OFF = 0x02 ///< Set and reset off } qmc5883p_setreset_t; /*=========================================================================*/ @@ -115,13 +116,13 @@ typedef enum { * @brief Class for hardware interfacing with the QMC5883P 3-axis magnetometer */ class Adafruit_QMC5883P { -public: + public: Adafruit_QMC5883P(void); ~Adafruit_QMC5883P(void); - bool begin(uint8_t i2c_addr = QMC5883P_DEFAULT_ADDR, TwoWire *wire = &Wire); - bool getRawMagnetic(int16_t *x, int16_t *y, int16_t *z); - bool getGaussField(float *x, float *y, float *z); + bool begin(uint8_t i2c_addr = QMC5883P_DEFAULT_ADDR, TwoWire* wire = &Wire); + bool getRawMagnetic(int16_t* x, int16_t* y, int16_t* z); + bool getGaussField(float* x, float* y, float* z); bool isDataReady(); bool isOverflow(); void setMode(qmc5883p_mode_t mode); @@ -139,8 +140,8 @@ public: void setSetResetMode(qmc5883p_setreset_t mode); qmc5883p_setreset_t getSetResetMode(); -private: - Adafruit_I2CDevice *i2c_dev; ///< Pointer to I2C bus interface + private: + Adafruit_I2CDevice* i2c_dev; ///< Pointer to I2C bus interface }; #endif \ No newline at end of file diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/examples/test_QMC5883P/test_QMC5883P.ino b/examples/test_QMC5883P/test_QMC5883P.ino old mode 100644 new mode 100755 index 5d8af5a..99c070e --- a/examples/test_QMC5883P/test_QMC5883P.ino +++ b/examples/test_QMC5883P/test_QMC5883P.ino @@ -1,6 +1,6 @@ /* * QMC5883P Test Sketch - * + * * Basic test for the QMC5883P 3-axis magnetometer */ @@ -10,23 +10,25 @@ Adafruit_QMC5883P qmc; void setup() { Serial.begin(115200); - while (!Serial) delay(10); - + while (!Serial) + delay(10); + Serial.println("QMC5883P Test"); - + if (!qmc.begin()) { Serial.println("Failed to find QMC5883P chip"); - while (1) delay(10); + while (1) + delay(10); } - + Serial.println("QMC5883P Found!"); - + // Set to normal mode qmc.setMode(QMC5883P_MODE_NORMAL); - + qmc5883p_mode_t currentMode = qmc.getMode(); Serial.print("Mode: "); - switch(currentMode) { + switch (currentMode) { case QMC5883P_MODE_SUSPEND: Serial.println("Suspend"); break; @@ -43,12 +45,12 @@ void setup() { Serial.println("Unknown"); break; } - + // Set ODR (Output Data Rate) to 50Hz qmc.setODR(QMC5883P_ODR_50HZ); qmc5883p_odr_t currentODR = qmc.getODR(); Serial.print("ODR (Output Data Rate): "); - switch(currentODR) { + switch (currentODR) { case QMC5883P_ODR_10HZ: Serial.println("10Hz"); break; @@ -65,12 +67,12 @@ void setup() { Serial.println("Unknown"); break; } - + // Set OSR (Over Sample Ratio) to 4 qmc.setOSR(QMC5883P_OSR_4); qmc5883p_osr_t currentOSR = qmc.getOSR(); Serial.print("OSR (Over Sample Ratio): "); - switch(currentOSR) { + switch (currentOSR) { case QMC5883P_OSR_8: Serial.println("8"); break; @@ -87,12 +89,12 @@ void setup() { Serial.println("Unknown"); break; } - + // Set DSR (Downsample Ratio) to 2 qmc.setDSR(QMC5883P_DSR_2); qmc5883p_dsr_t currentDSR = qmc.getDSR(); Serial.print("DSR (Downsample Ratio): "); - switch(currentDSR) { + switch (currentDSR) { case QMC5883P_DSR_1: Serial.println("1"); break; @@ -109,12 +111,12 @@ void setup() { Serial.println("Unknown"); break; } - + // Set Range to 8G qmc.setRange(QMC5883P_RANGE_8G); qmc5883p_range_t currentRange = qmc.getRange(); Serial.print("Range: "); - switch(currentRange) { + switch (currentRange) { case QMC5883P_RANGE_30G: Serial.println("±30G"); break; @@ -131,12 +133,12 @@ void setup() { Serial.println("Unknown"); break; } - + // Set SetReset mode to On qmc.setSetResetMode(QMC5883P_SETRESET_ON); qmc5883p_setreset_t currentSetReset = qmc.getSetResetMode(); Serial.print("Set/Reset Mode: "); - switch(currentSetReset) { + switch (currentSetReset) { case QMC5883P_SETRESET_ON: Serial.println("Set and Reset On"); break; @@ -155,38 +157,45 @@ void setup() { void loop() { static int range_counter = 0; static unsigned long last_range_change = 0; - + // Change range every 3 seconds if (millis() - last_range_change > 3000) { - qmc5883p_range_t ranges[] = {QMC5883P_RANGE_2G, QMC5883P_RANGE_8G, QMC5883P_RANGE_12G, QMC5883P_RANGE_30G}; + qmc5883p_range_t ranges[] = {QMC5883P_RANGE_2G, QMC5883P_RANGE_8G, + QMC5883P_RANGE_12G, QMC5883P_RANGE_30G}; const char* range_names[] = {"±2G", "±8G", "±12G", "±30G"}; - + qmc.setRange(ranges[range_counter]); Serial.print("*** Changed to range: "); Serial.println(range_names[range_counter]); - + range_counter = (range_counter + 1) % 4; last_range_change = millis(); delay(100); // Let range change settle } - + if (qmc.isDataReady()) { int16_t x, y, z; float gx, gy, gz; - + if (qmc.getRawMagnetic(&x, &y, &z)) { - Serial.print("Raw - X: "); Serial.print(x); - Serial.print(" Y: "); Serial.print(y); - Serial.print(" Z: "); Serial.print(z); - + Serial.print("Raw - X: "); + Serial.print(x); + Serial.print(" Y: "); + Serial.print(y); + Serial.print(" Z: "); + Serial.print(z); + if (qmc.getGaussField(&gx, &gy, &gz)) { - Serial.print(" | Gauss - X: "); Serial.print(gx, 3); - Serial.print(" Y: "); Serial.print(gy, 3); - Serial.print(" Z: "); Serial.println(gz, 3); + Serial.print(" | Gauss - X: "); + Serial.print(gx, 3); + Serial.print(" Y: "); + Serial.print(gy, 3); + Serial.print(" Z: "); + Serial.println(gz, 3); } else { Serial.println(" | Failed to convert to Gauss"); } - + if (qmc.isOverflow()) { Serial.println("WARNING: Data overflow detected!"); } @@ -194,6 +203,6 @@ void loop() { Serial.println("Failed to read magnetic data"); } } - + delay(200); } \ No newline at end of file