Engduino  3.1.0
A fun device for learning coding
Files | Classes | Macros | Enumerations | Functions | Variables
Driver for Engduino Magnetometer

Files

file  EngduinoMagnetometer.cpp
 
file  EngduinoMagnetometer.h
 

Classes

class  EngduinoMagnetometerClass
 

Macros

#define FXMS3110_IIC_ADDRESS   (0x0E)
 
#define DR_STATUS_REG   0x00
 
#define ZYXOW_BIT   Bit._7
 
#define ZOW_BIT   Bit._6
 
#define YOW_BIT   Bit._5
 
#define XOW_BIT   Bit._4
 
#define ZYXDR_BIT   Bit._3
 
#define ZDR_BIT   Bit._2
 
#define YDR_BIT   Bit._1
 
#define XDR_BIT   Bit._0
 
#define ZYXOW_MASK   0x80
 
#define ZOW_MASK   0x40
 
#define YOW_MASK   0x20
 
#define XOW_MASK   0x10
 
#define ZYXDR_MASK   0x08
 
#define ZDR_MASK   0x04
 
#define YDR_MASK   0x02
 
#define XDR_MASK   0x01
 
#define OUT_X_MSB_REG   0x01
 
#define OUT_X_LSB_REG   0x02
 
#define OUT_Y_MSB_REG   0x03
 
#define OUT_Y_LSB_REG   0x04
 
#define OUT_Z_MSB_REG   0x05
 
#define OUT_Z_LSB_REG   0x06
 
#define WHO_AM_I_REG   0x07
 
#define FXMS3110   0xC4
 
#define SYSMOD_REG   0x08
 
#define SYSMOD1_BIT   Bit._1
 
#define SYSMOD0_BIT   Bit._0
 
#define SYSMOD1_MASK   0x02
 
#define SYSMOD0_MASK   0x01
 
#define SYSMOD_MASK   0x03
 
#define SYSMOD_STANDBY   0x00
 
#define SYSMOD_ACTIVE_RAW   (SYSMOD0_MASK)
 
#define SYSMOD_ACTIVE_USER   (SYSMOD1_MASK)
 
#define OFF_X_MSB_REG   0x09
 
#define OFF_X_MSB_REG   0x0F
 
#define OFF_X_LSB_REG   0x0A
 
#define OFF_Y_MSB_REG   0x0B
 
#define OFF_Y_LSB_REG   0x0C
 
#define OFF_Z_MSB_REG   0x0D
 
#define OFF_Z_LSB_REG   0x0E
 
#define CTRL_REG1   0x10
 
#define DR2_BIT   Bit._7
 
#define DR1_BIT   Bit._6
 
#define DR0_BIT   Bit._5
 
#define OS1_BIT   Bit._4
 
#define OS0_BIT   Bit._3
 
#define FREAD_BIT   Bit._2
 
#define TM_BIT   Bit._1
 
#define ACTIVE_BIT   Bit._0
 
#define DR2_MASK   0x80
 
#define DR1_MASK   0x40
 
#define DR0_MASK   0x20
 
#define OS1_MASK   0x10
 
#define OS0_MASK   0x08
 
#define FREAD_MASK   0x04
 
#define TM_MASK   0x02
 
#define ACTIVE_MASK   0x01
 
#define DR_MASK   (DR2_MASK+DR1_MASK+DR0_MASK)
 
#define OS_MASK   (OS1_MASK+OS0_MASK)
 
#define DATA_RATE_1280_16   0x00
 
#define DATA_RATE_1280_32   (OS0_MASK)
 
#define DATA_RATE_1280_64   (OS1_MASK)
 
#define DATA_RATE_1280_128   (OS0_MASK+OS1_MASK)
 
#define DATA_RATE_640_16   (DR0)
 
#define DATA_RATE_640_32   (DR0+OS0_MASK)
 
#define DATA_RATE_640_64   (DR0+OS1_MASK)
 
#define DATA_RATE_640_128   (DR0+OS0_MASK+OS1_MASK)
 
#define DATA_RATE_320_16   (DR1)
 
#define DATA_RATE_320_32   (DR1+OS0_MASK)
 
#define DATA_RATE_320_64   (DR1+OS1_MASK)
 
#define DATA_RATE_320_128   (DR1+OS0_MASK+OS1_MASK)
 
#define DATA_RATE_160_16   (DR0+DR1)
 
#define DATA_RATE_160_32   (DR0+DR1+OS0_MASK)
 
#define DATA_RATE_160_64   (DR0+DR1+OS1_MASK)
 
#define DATA_RATE_160_128   (DR0+DR1+OS0_MASK+OS1_MASK)
 
#define DATA_RATE_80_16   (DR2)
 
#define DATA_RATE_80_32   (DR2+OS0_MASK)
 
#define DATA_RATE_80_64   (DR2+OS1_MASK)
 
#define DATA_RATE_80_128   (DR2+OS0_MASK+OS1_MASK)
 
#define TRIGGER_OFF   0x00
 
#define TRIGGER_ON   (ACTIVE_MASK)
 
#define ACTIVE   (ACTIVE_MASK)
 
#define STANDBY   0x00
 
#define CTRL_REG2   0x11
 
#define AUTO_MRST_EN_BIT   Bit._7
 
#define RAW_BIT   Bit._5
 
#define MAG_RST_BIT   Bit._4
 
#define AUTO_MRST_EN_MASK   0x80
 
#define RAW_MASK   0x20
 
#define MAG_RST_MASK   0x10
 

Enumerations

enum  {
  FXMS3110_DR_STATUS = 0, FXMS3110_OUT_X_MSB, FXMS3110_OUT_X_LSB, FXMS3110_OUT_Y_MSB,
  FXMS3110_OUT_Y_lSB, FXMS3110_OUT_Z_MSB, FXMS3110_OUT_Z_LSB, FXMS3110_WHO_AM_I,
  FXMS3110_SYSMOD, FXMS3110_OFF_X_MSB, FXMS3110_OFF_X_LSB, FXMS3110_OFF_Y_MSB,
  FXMS3110_OFF_Y_LSB, FXMS3110_OFF_Z_MSB, FXMS3110_OFF_Z_LSB, FXMS3110_DIE_TEMP,
  FXMS3110_CTRL_REG1, FXMS3110_CTRL_REG2
}
 

Functions

 EngduinoMagnetometerClass::EngduinoMagnetometerClass ()
 Constructor. More...
 
void EngduinoMagnetometerClass::begin ()
 begin function - must be called before using other functions More...
 
void EngduinoMagnetometerClass::end ()
 end function - switch off the magnetometer More...
 
void EngduinoMagnetometerClass::xyz (float buf[3])
 Read the xyz values from the magnetometer. More...
 
int8_t EngduinoMagnetometerClass::temperature ()
 Read the temperature value from the magnetometer. More...
 

Variables

EngduinoMagnetometerClass EngduinoMagnetometer = EngduinoMagnetometerClass()
 
EngduinoMagnetometerClass EngduinoMagnetometer
 

Detailed Description

This is the driver code for Magnetometer on the Engduino In v2.1 this magnetometer is a freescale FXMS3110

Function Documentation

void EngduinoMagnetometerClass::begin ( )

begin function - must be called before using other functions

This function enables the magnetometer. The magnetometer is an I2C device so we initialise the I2C communications, make contact with the magnetometer, and check that it's what we think it is.

We set the sampling rate to 10Hz, but where the values are from a heavily oversampled set of values

void EngduinoMagnetometerClass::end ( )

end function - switch off the magnetometer

Send the magnetometer to sleep

EngduinoMagnetometerClass::EngduinoMagnetometerClass ( )

Constructor.

C++ constructor for this class. Empty.

int8_t EngduinoMagnetometerClass::temperature ( )

Read the temperature value from the magnetometer.

Returns
The 8 bit temperature value in 2s complement - values lie between -40°C and 125°C, but are uncalibrated.

Get the temperature as measured by the magnetometer - the temperature of the die. The register contains the die temperature in degrees C expressed as an 8-bit 2's complement number. The sensitivity of the temperature sensor is factory trimmed to 1°C/LSB. The temperature sensor offset is not factory trimmed and must be calibrated by the user software if higher absolute accuracy is required. Note: The register allows for temperature measurements from -128°C to 127°C but the output range is limited to -40°C to 125°C. The temperature data is updated on every measurement cycle.

void EngduinoMagnetometerClass::xyz ( float  buf[3])

Read the xyz values from the magnetometer.

Parameters
bufA buffer of floats to put the magnetometer values into

Get the instantaneous magnetometer values for the xyz axes. Convert the 16 bit digital value to a float value.