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