LSD9DS1 library for TMS570LS12x
LSM9DS1 Class Reference

Public Member Functions

 LSM9DS1 (interface_mode interface, uint8_t xgAddr, uint8_t mAddr)
 
uint16_t begin ()
 
void calibrate (bool autoCalc=true)
 
void calibrateMag (bool loadIn=true)
 
void magOffset (uint8_t axis, int16_t offset)
 
uint8_t accelAvailable ()
 
uint8_t gyroAvailable ()
 
uint8_t tempAvailable ()
 
uint8_t magAvailable (lsm9ds1_axis axis=ALL_AXIS)
 
void readGyro ()
 
int16_t readGyro (lsm9ds1_axis axis)
 
void readAccel ()
 
int16_t readAccel (lsm9ds1_axis axis)
 
void readMag ()
 
int16_t readMag (lsm9ds1_axis axis)
 
void readTemp ()
 
float calcGyro (int16_t gyro)
 
float calcAccel (int16_t accel)
 
float calcMag (int16_t mag)
 
void setGyroScale (uint16_t gScl)
 
void setAccelScale (uint8_t aScl)
 
void setMagScale (uint8_t mScl)
 
void setGyroODR (uint8_t gRate)
 
void setAccelODR (uint8_t aRate)
 
void setMagODR (uint8_t mRate)
 
void configInactivity (uint8_t duration, uint8_t threshold, bool sleepOn)
 
void configAccelInt (uint8_t generator, bool andInterrupts=false)
 
void configAccelThs (uint8_t threshold, lsm9ds1_axis axis, uint8_t duration=0, bool wait=0)
 
void configGyroInt (uint8_t generator, bool aoi, bool latch)
 
void configGyroThs (int16_t threshold, lsm9ds1_axis axis, uint8_t duration, bool wait)
 
void configInt (interrupt_select interupt, uint8_t generator, h_lactive activeLow=INT_ACTIVE_LOW, pp_od pushPull=INT_PUSH_PULL)
 
void configMagInt (uint8_t generator, h_lactive activeLow, bool latch=true)
 
void configMagThs (uint16_t threshold)
 
uint8_t getGyroIntSrc ()
 
uint8_t getAccelIntSrc ()
 
uint8_t getMagIntSrc ()
 
uint8_t getInactivity ()
 
void sleepGyro (bool enable=true)
 
void enableFIFO (bool enable=true)
 
void setFIFO (fifoMode_type fifoMode, uint8_t fifoThs)
 
uint8_t getFIFOSamples ()
 

Public Attributes

IMUSettings settings
 
int16_t gx
 
int16_t gy
 
int16_t gz
 
int16_t ax
 
int16_t ay
 
int16_t az
 
int16_t mx
 
int16_t my
 
int16_t mz
 
int16_t temperature
 
float gBias [3]
 
float aBias [3]
 
float mBias [3]
 
int16_t gBiasRaw [3]
 
int16_t aBiasRaw [3]
 
int16_t mBiasRaw [3]
 

Protected Member Functions

void init (interface_mode interface, uint8_t xgAddr, uint8_t mAddr)
 
void initGyro ()
 
void initAccel ()
 
void initMag ()
 
uint8_t mReadByte (uint8_t subAddress)
 
uint8_t mReadBytes (uint8_t subAddress, uint8_t *dest, uint8_t count)
 
void mWriteByte (uint8_t subAddress, uint8_t data)
 
uint8_t xgReadByte (uint8_t subAddress)
 
uint8_t xgReadBytes (uint8_t subAddress, uint8_t *dest, uint8_t count)
 
void xgWriteByte (uint8_t subAddress, uint8_t data)
 
void calcgRes ()
 
void calcmRes ()
 
void calcaRes ()
 
void constrainScales ()
 
void initSPI ()
 
void SPIwriteByte (uint8_t csPin, uint8_t subAddress, uint8_t data)
 
uint8_t SPIreadByte (uint8_t csPin, uint8_t subAddress)
 
uint8_t SPIreadBytes (uint8_t csPin, uint8_t subAddress, uint8_t *dest, uint8_t count)
 
void initI2C ()
 
void I2CwriteByte (uint8_t address, uint8_t subAddress, uint8_t data)
 
uint8_t I2CreadByte (uint8_t address, uint8_t subAddress)
 
uint8_t I2CreadBytes (uint8_t address, uint8_t subAddress, uint8_t *dest, uint8_t count)
 

Protected Attributes

uint8_t _mAddress
 
uint8_t _xgAddress
 
float gRes
 
float aRes
 
float mRes
 
bool _autoCalc
 

Detailed Description

Definition at line 33 of file LSM9DS1.hpp.

Member Function Documentation

◆ begin()

uint16_t LSM9DS1::begin ( )

Todo: don't use _xgAddress or _mAddress, duplicating memory

Definition at line 140 of file LSM9DS1.cpp.

141 {
143  _xgAddress = settings.device.agAddress;
144  _mAddress = settings.device.mAddress;
145 
146  constrainScales();
147  // Once we have the scale values, we can calculate the resolution
148  // of each sensor. That's what these functions are for. One for each sensor
149  calcgRes(); // Calculate DPS / ADC tick, stored in gRes variable
150  calcmRes(); // Calculate Gs / ADC tick, stored in mRes variable
151  calcaRes(); // Calculate g / ADC tick, stored in aRes variable
152 
153  // Now, initialize our hardware interface.
154  if (settings.device.commInterface == IMU_MODE_I2C) // If we're using I2C
155  initI2C(); // Initialize I2C
156  else if (settings.device.commInterface == IMU_MODE_SPI) // else, if we're using SPI
157  initSPI(); // Initialize SPI
158 
159  // To verify communication, we can read from the WHO_AM_I register of
160  // each device. Store those in a variable so we can return them.
161  uint8_t mTest = mReadByte(WHO_AM_I_M); // Read the gyro WHO_AM_I
162  uint8_t xgTest = xgReadByte(WHO_AM_I_XG); // Read the accel/mag WHO_AM_I
163  uint16_t whoAmICombined = (xgTest << 8) | mTest;
164 
165  if (whoAmICombined != ((WHO_AM_I_AG_RSP << 8) | WHO_AM_I_M_RSP))
166  return 0;
167 
168  // Gyro initialization stuff:
169  initGyro(); // This will "turn on" the gyro. Setting up interrupts, etc.
170 
171  // Accelerometer initialization stuff:
172  initAccel(); // "Turn on" all axes of the accel. Set up interrupts, etc.
173 
174  // Magnetometer initialization stuff:
175  initMag(); // "Turn on" all axes of the mag. Set up interrupts, etc.
176 
177  // Once everything is initialized, return the WHO_AM_I registers we read:
178  return whoAmICombined;
179 }

The documentation for this class was generated from the following files: