objc

Data Structures | Enumerations | Functions

Driver for the LSM303D 3-axis accelerometer and 3-axis magnetometer with integrated temperature sensor. More...

Collaboration diagram for LSM303D Driver:

Data Structures

struct  driver_lsm303_vec3_t
 3-axis vector data structure More...
 
struct  driver_lsm303_t
 LSM303D driver instance. More...
 

Enumerations

enum  driver_lsm303_accel_scale_t {
  DRIVER_LSM303_ACCEL_SCALE_2G = 0, DRIVER_LSM303_ACCEL_SCALE_4G, DRIVER_LSM303_ACCEL_SCALE_6G, DRIVER_LSM303_ACCEL_SCALE_8G,
  DRIVER_LSM303_ACCEL_SCALE_16G
}
 Accelerometer full scale range. More...
 
enum  driver_lsm303_mag_scale_t { DRIVER_LSM303_MAG_SCALE_2GAUSS = 0, DRIVER_LSM303_MAG_SCALE_4GAUSS, DRIVER_LSM303_MAG_SCALE_8GAUSS, DRIVER_LSM303_MAG_SCALE_12GAUSS }
 Magnetometer full scale range. More...
 

Functions

bool driver_lsm303_init (driver_lsm303_t *driver, hw_i2c_t *i2c)
 Initialize LSM303D with default settingsInitializes the sensor with: More...
 
bool driver_lsm303_init_with_config (driver_lsm303_t *driver, hw_i2c_t *i2c, driver_lsm303_accel_scale_t accel_scale, driver_lsm303_mag_scale_t mag_scale)
 Initialize LSM303D with custom scale settings. More...
 
void driver_lsm303_finalize (driver_lsm303_t *driver)
 Finalize and power down LSM303D. More...
 
bool driver_lsm303_read_accel (driver_lsm303_t *driver, driver_lsm303_vec3_t *data)
 Read accelerometer dataReturns acceleration in g (Earth gravity = 1g ≈ 9.81 m/s²) More...
 
bool driver_lsm303_read_mag (driver_lsm303_t *driver, driver_lsm303_vec3_t *data)
 Read magnetometer dataReturns magnetic field strength in gauss. More...
 
bool driver_lsm303_read_temp (driver_lsm303_t *driver, float *temp)
 Read temperature. More...
 
float driver_lsm303_get_heading (const driver_lsm303_vec3_t *mag)
 Calculate compass heading from magnetometer dataCalculates the compass heading (direction) from magnetometer readings. More...
 

Detailed Description

Driver for the LSM303D 3-axis accelerometer and 3-axis magnetometer with integrated temperature sensor.

Enumeration Type Documentation

◆ driver_lsm303_accel_scale_t

Accelerometer full scale range.

Enumerator
DRIVER_LSM303_ACCEL_SCALE_2G 

±2g (default)

DRIVER_LSM303_ACCEL_SCALE_4G 

±4g.

DRIVER_LSM303_ACCEL_SCALE_6G 

±6g.

DRIVER_LSM303_ACCEL_SCALE_8G 

±8g.

DRIVER_LSM303_ACCEL_SCALE_16G 

±16g.

Definition at line 22 of file drivers_lsm303.h.

◆ driver_lsm303_mag_scale_t

Magnetometer full scale range.

Enumerator
DRIVER_LSM303_MAG_SCALE_2GAUSS 

±2 gauss (default)

DRIVER_LSM303_MAG_SCALE_4GAUSS 

±4 gauss.

DRIVER_LSM303_MAG_SCALE_8GAUSS 

±8 gauss.

DRIVER_LSM303_MAG_SCALE_12GAUSS 

±12 gauss.

Definition at line 34 of file drivers_lsm303.h.

Function Documentation

◆ driver_lsm303_finalize()

void driver_lsm303_finalize ( driver_lsm303_t driver)

Finalize and power down LSM303D.

Parameters
driverPointer to driver structure

◆ driver_lsm303_get_heading()

float driver_lsm303_get_heading ( const driver_lsm303_vec3_t mag)

Calculate compass heading from magnetometer dataCalculates the compass heading (direction) from magnetometer readings.

Note: This assumes the sensor is held level (horizontal). For accurate readings when tilted, tilt compensation using accelerometer data is required.

Parameters
magPointer to magnetometer vector data in gauss
Returns
Heading in degrees (0-360, where 0=North, 90=East, 180=South, 270=West) Returns -1.0 if mag is NULL

◆ driver_lsm303_init()

bool driver_lsm303_init ( driver_lsm303_t driver,
hw_i2c_t i2c 
)

Initialize LSM303D with default settingsInitializes the sensor with:

  • Accelerometer: ±2g, 50Hz
  • Magnetometer: ±2 gauss, 50Hz, continuous mode
  • Temperature sensor enabled
Parameters
driverPointer to driver structure
i2cPointer to initialized I2C interface
Returns
true if initialization succeeded, false otherwise

◆ driver_lsm303_init_with_config()

bool driver_lsm303_init_with_config ( driver_lsm303_t driver,
hw_i2c_t i2c,
driver_lsm303_accel_scale_t  accel_scale,
driver_lsm303_mag_scale_t  mag_scale 
)

Initialize LSM303D with custom scale settings.

Parameters
driverPointer to driver structure
i2cPointer to initialized I2C interface
accel_scaleAccelerometer full-scale range
mag_scaleMagnetometer full-scale range
Returns
true if initialization succeeded, false otherwise

◆ driver_lsm303_read_accel()

bool driver_lsm303_read_accel ( driver_lsm303_t driver,
driver_lsm303_vec3_t data 
)

Read accelerometer dataReturns acceleration in g (Earth gravity = 1g ≈ 9.81 m/s²)

Parameters
driverPointer to driver structure
dataPointer to vector structure to receive x, y, z values in g
Returns
true if read succeeded, false otherwise

◆ driver_lsm303_read_mag()

bool driver_lsm303_read_mag ( driver_lsm303_t driver,
driver_lsm303_vec3_t data 
)

Read magnetometer dataReturns magnetic field strength in gauss.

Parameters
driverPointer to driver structure
dataPointer to vector structure to receive x, y, z values in gauss
Returns
true if read succeeded, false otherwise

◆ driver_lsm303_read_temp()

bool driver_lsm303_read_temp ( driver_lsm303_t driver,
float *  temp 
)

Read temperature.

Parameters
driverPointer to driver structure
tempPointer to float to receive temperature in degrees Celsius
Returns
true if read succeeded, false otherwise