Documentation ¶
Overview ¶
Package lsm303agr implements a driver for the LSM303AGR, a 3 axis accelerometer/magnetic sensor which is included on BBC micro:bits v1.5.
Datasheet: https://www.st.com/resource/en/datasheet/lsm303agr.pdf
Index ¶
- Constants
- type Configuration
- type Device
- func (d *Device) Configure(cfg Configuration) (err error)
- func (d *Device) Connected() bool
- func (d *Device) ReadAcceleration() (x, y, z int32, err error)
- func (d *Device) ReadCompass() (h int32, err error)
- func (d *Device) ReadMagneticField() (x, y, z int32, err error)
- func (d *Device) ReadPitchRoll() (pitch, roll int32, err error)
- func (d *Device) ReadTemperature() (t int32, err error)
Constants ¶
const ( // Constants/addresses used for I2C. ACCEL_ADDRESS = 0x19 MAG_ADDRESS = 0x1E // i2C 8-bit subaddress (SUB): the 7 LSb represent the actual register address // while the MSB enables address auto increment. // If the MSb of the SUB field is 1, the SUB (register address) is // automatically increased to allow multiple data read/writes. ADDR_AUTO_INC_MASK = 0x80 // accelerometer registers. ACCEL_WHO_AM_I = 0x0F ACCEL_CTRL_REG1_A = 0x20 ACCEL_CTRL_REG4_A = 0x23 ACCEL_OUT_X_L_A = 0x28 ACCEL_OUT_X_H_A = 0x29 ACCEL_OUT_Y_L_A = 0x2A ACCEL_OUT_Y_H_A = 0x2B ACCEL_OUT_Z_L_A = 0x2C ACCEL_OUT_Z_H_A = 0x2D ACCEL_OUT_AUTO_INC = ACCEL_OUT_X_L_A | ADDR_AUTO_INC_MASK // magnetic sensor registers. MAG_WHO_AM_I = 0x4F MAG_MR_REG_M = 0x60 MAG_OUT_X_L_M = 0x68 MAG_OUT_X_H_M = 0x69 MAG_OUT_Y_L_M = 0x6A MAG_OUT_Y_H_M = 0x6B MAG_OUT_Z_L_M = 0x6C MAG_OUT_Z_H_M = 0x6D MAG_OUT_AUTO_INC = MAG_OUT_X_L_M | ADDR_AUTO_INC_MASK // temperature sensor registers. TEMP_CFG_REG_A = 0x1F OUT_TEMP_L_A = 0x0C OUT_TEMP_H_A = 0x0D OUT_TEMP_AUTO_INC = OUT_TEMP_L_A | ADDR_AUTO_INC_MASK // accelerometer power mode. ACCEL_POWER_NORMAL = 0x00 // default ACCEL_POWER_LOW = 0x08 // accelerometer range. ACCEL_RANGE_2G = 0x00 // default ACCEL_RANGE_4G = 0x01 ACCEL_RANGE_8G = 0x02 ACCEL_RANGE_16G = 0x03 // accelerometer data rate. ACCEL_DATARATE_1HZ = 0x01 ACCEL_DATARATE_10HZ = 0x02 ACCEL_DATARATE_25HZ = 0x03 ACCEL_DATARATE_50HZ = 0x04 ACCEL_DATARATE_100HZ = 0x05 // default ACCEL_DATARATE_200HZ = 0x06 ACCEL_DATARATE_400HZ = 0x07 ACCEL_DATARATE_1344HZ = 0x09 // 5376Hz in low-power mode // magnetic sensor power mode. MAG_POWER_NORMAL = 0x00 // default MAG_POWER_LOW = 0x01 // magnetic sensor operate mode. MAG_SYSTEM_CONTINUOUS = 0x00 // default MAG_SYSTEM_SINGLE = 0x01 // magnetic sensor data rate MAG_DATARATE_10HZ = 0x00 // default MAG_DATARATE_20HZ = 0x01 MAG_DATARATE_50HZ = 0x02 MAG_DATARATE_100HZ = 0x03 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Configuration ¶
type Configuration struct { AccelPowerMode uint8 AccelRange uint8 AccelDataRate uint8 MagPowerMode uint8 MagSystemMode uint8 MagDataRate uint8 }
Configuration for LSM303AGR device.
type Device ¶
type Device struct { AccelAddress uint8 MagAddress uint8 AccelPowerMode uint8 AccelRange uint8 AccelDataRate uint8 MagPowerMode uint8 MagSystemMode uint8 MagDataRate uint8 // contains filtered or unexported fields }
Device wraps an I2C connection to a LSM303AGR device.
func New ¶
New creates a new LSM303AGR connection. The I2C bus must already be configured.
This function only creates the Device object, it does not touch the device.
func (*Device) Configure ¶
func (d *Device) Configure(cfg Configuration) (err error)
Configure sets up the LSM303AGR device for communication.
func (*Device) Connected ¶
Connected returns whether both sensor on LSM303AGR has been found. It does two "who am I" requests and checks the responses.
func (*Device) ReadAcceleration ¶
ReadAcceleration reads the current acceleration from the device and returns it in µg (micro-gravity). When one of the axes is pointing straight to Earth and the sensor is not moving the returned value will be around 1000000 or -1000000.
func (*Device) ReadCompass ¶
ReadCompass reads the current compass heading from the device and returns it in micro-degrees. When the z axis is pointing straight to Earth and the y axis is pointing to North, the heading would be zero.
However, the heading may be off due to electronic compasses would be effected by strong magnetic fields and require constant calibration.
func (*Device) ReadMagneticField ¶
ReadMagneticField reads the current magnetic field from the device and returns it in mG (milligauss). 1 mG = 0.1 µT (microtesla).
func (*Device) ReadPitchRoll ¶
ReadPitchRoll reads the current pitch and roll angles from the device and returns it in micro-degrees. When the z axis is pointing straight to Earth the returned values of pitch and roll would be zero.
func (*Device) ReadTemperature ¶
ReadTemperature returns the temperature in Celsius milli degrees (°C/1000)