Added header comments in both files, improved the temperature reading function and refactored the calibrated magnetic fields reading function
This commit is contained in:
parent
fe40710b7e
commit
f0a6562c99
@ -1,3 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @file QMC5883L.c
|
||||||
|
* @author Anatole SCHRAMM-HENRY
|
||||||
|
* @brief QMC5883L magnetometer functions implementation source file.
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2025-03-17
|
||||||
|
*
|
||||||
|
* @copyright MIT
|
||||||
|
*/
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include "QMC5883L.h"
|
#include "QMC5883L.h"
|
||||||
@ -45,18 +55,17 @@ bool QMC5883L_software_reset(void)
|
|||||||
|
|
||||||
float QMC5883L_get_temperature(void)
|
float QMC5883L_get_temperature(void)
|
||||||
{
|
{
|
||||||
uint8_t data;
|
uint8_t data[2];
|
||||||
int16_t raw_temp;
|
int16_t raw_temp;
|
||||||
|
float temperature = 0.0F;
|
||||||
|
|
||||||
i2c_read_reg(QMC5883L_I2C_ADDR, QMC5883L_TEMP_MSB_REG, &data);
|
if(i2c_read(QMC5883L_I2C_ADDR, QMC5883L_TEMP_LSB_REG, data, sizeof data))
|
||||||
|
{
|
||||||
|
raw_temp = (data[1] << 8) | data[0];
|
||||||
|
temperature = (float)raw_temp / 100.0F + _calibration_data.temperature_offset;
|
||||||
|
}
|
||||||
|
|
||||||
raw_temp = data << 8;
|
return temperature;
|
||||||
|
|
||||||
i2c_read_reg(QMC5883L_I2C_ADDR, QMC5883L_TEMP_LSB_REG, &data);
|
|
||||||
|
|
||||||
raw_temp |= data;
|
|
||||||
|
|
||||||
return (float) raw_temp / 100.0 + _calibration_data.temperature_offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QMC5883L_is_data_available(void)
|
bool QMC5883L_is_data_available(void)
|
||||||
@ -96,15 +105,10 @@ QMC5883L_MData_t QMC5883L_get_MFields_raw(void)
|
|||||||
|
|
||||||
QMC5883L_MData_calibrated_t QMC5883L_get_MFields_calibrated(void)
|
QMC5883L_MData_calibrated_t QMC5883L_get_MFields_calibrated(void)
|
||||||
{
|
{
|
||||||
uint8_t data[6];
|
/* Read the raw magnetic field values first */
|
||||||
QMC5883L_MData_calibrated_t Mdata = {.MFieldX = -1, .MFieldY = -1, .MFieldZ = -1};
|
QMC5883L_MData_t raw_data = QMC5883L_get_MFields_raw();
|
||||||
|
|
||||||
if(i2c_read(QMC5883L_I2C_ADDR, QMC5883L_DATA_X_LSB_REG, data, sizeof data))
|
QMC5883L_MData_calibrated_t Mdata = {.MFieldX = raw_data.MFieldX, .MFieldY = raw_data.MFieldY, .MFieldZ = raw_data.MFieldZ};
|
||||||
{
|
|
||||||
Mdata.MFieldX = (data[1] << 8) | data[0];
|
|
||||||
Mdata.MFieldY = (data[3] << 8) | data[2];
|
|
||||||
Mdata.MFieldZ = (data[5] << 8) | data[4];
|
|
||||||
}
|
|
||||||
|
|
||||||
int x_offset = (_calibration_data.x_min + _calibration_data.x_max) / 2;
|
int x_offset = (_calibration_data.x_min + _calibration_data.x_max) / 2;
|
||||||
int y_offset = (_calibration_data.y_min + _calibration_data.y_max) / 2;
|
int y_offset = (_calibration_data.y_min + _calibration_data.y_max) / 2;
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @file QMC5883L.h
|
||||||
|
* @author Anatole SCHRAMM-HENRY
|
||||||
|
* @brief QMC5883L magnetometer functions API header file.
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2025-03-17
|
||||||
|
*
|
||||||
|
* @copyright MIT
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef QMC5883L_H
|
#ifndef QMC5883L_H
|
||||||
#define QMC5883L_H
|
#define QMC5883L_H
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user