DCM Code ported from Arduino for FRDM-KL25Z

Dependents:   minimu_data_capture minimu_data_capture

Fork of DCM_AHRS by Kris Reynolds

Committer:
ogarai
Date:
Tue Jan 20 02:04:07 2015 +0000
Revision:
2:85214374e094
Parent:
1:3272ece36ce1
First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krmreynolds 0:dc35364e2291 1 #ifndef L3G4200D_h
krmreynolds 0:dc35364e2291 2 #define L3G4200D_h
krmreynolds 0:dc35364e2291 3
krmreynolds 0:dc35364e2291 4 #include "mbed.h"
krmreynolds 1:3272ece36ce1 5 // register addresses
krmreynolds 1:3272ece36ce1 6
krmreynolds 1:3272ece36ce1 7 #define L3G4200D_WHO_AM_I 0x0F
krmreynolds 1:3272ece36ce1 8
krmreynolds 1:3272ece36ce1 9 #define L3G4200D_CTRL_REG1 0x20
krmreynolds 1:3272ece36ce1 10 #define L3G4200D_CTRL_REG2 0x21
krmreynolds 1:3272ece36ce1 11 #define L3G4200D_CTRL_REG3 0x22
krmreynolds 1:3272ece36ce1 12 #define L3G4200D_CTRL_REG4 0x23
krmreynolds 1:3272ece36ce1 13 #define L3G4200D_CTRL_REG5 0x24
krmreynolds 1:3272ece36ce1 14 #define L3G4200D_REFERENCE 0x25
krmreynolds 1:3272ece36ce1 15 #define L3G4200D_OUT_TEMP 0x26
krmreynolds 1:3272ece36ce1 16 #define L3G4200D_STATUS_REG 0x27
krmreynolds 1:3272ece36ce1 17
krmreynolds 1:3272ece36ce1 18 #define L3G4200D_OUT_X_L 0x28
krmreynolds 1:3272ece36ce1 19 #define L3G4200D_OUT_X_H 0x29
krmreynolds 1:3272ece36ce1 20 #define L3G4200D_OUT_Y_L 0x2A
krmreynolds 1:3272ece36ce1 21 #define L3G4200D_OUT_Y_H 0x2B
krmreynolds 1:3272ece36ce1 22 #define L3G4200D_OUT_Z_L 0x2C
krmreynolds 1:3272ece36ce1 23 #define L3G4200D_OUT_Z_H 0x2D
krmreynolds 1:3272ece36ce1 24
krmreynolds 1:3272ece36ce1 25 #define L3G4200D_FIFO_CTRL_REG 0x2E
krmreynolds 1:3272ece36ce1 26 #define L3G4200D_FIFO_SRC_REG 0x2F
krmreynolds 1:3272ece36ce1 27
krmreynolds 1:3272ece36ce1 28 #define L3G4200D_INT1_CFG 0x30
krmreynolds 1:3272ece36ce1 29 #define L3G4200D_INT1_SRC 0x31
krmreynolds 1:3272ece36ce1 30 #define L3G4200D_INT1_THS_XH 0x32
krmreynolds 1:3272ece36ce1 31 #define L3G4200D_INT1_THS_XL 0x33
krmreynolds 1:3272ece36ce1 32 #define L3G4200D_INT1_THS_YH 0x34
krmreynolds 1:3272ece36ce1 33 #define L3G4200D_INT1_THS_YL 0x35
krmreynolds 1:3272ece36ce1 34 #define L3G4200D_INT1_THS_ZH 0x36
krmreynolds 1:3272ece36ce1 35 #define L3G4200D_INT1_THS_ZL 0x37
krmreynolds 1:3272ece36ce1 36 #define L3G4200D_INT1_DURATION 0x38
krmreynolds 1:3272ece36ce1 37 #define GYR_ADDRESS ( 0xD2 >> 1 )
krmreynolds 1:3272ece36ce1 38
krmreynolds 1:3272ece36ce1 39 typedef unsigned char byte;
krmreynolds 0:dc35364e2291 40
krmreynolds 0:dc35364e2291 41 class L3G4200D {
krmreynolds 0:dc35364e2291 42 public:
krmreynolds 1:3272ece36ce1 43 typedef struct Plane {
krmreynolds 1:3272ece36ce1 44 float x, y, z;
krmreynolds 1:3272ece36ce1 45 } Plane;
krmreynolds 0:dc35364e2291 46
krmreynolds 1:3272ece36ce1 47 Plane g; // gyro angular velocity readings
krmreynolds 1:3272ece36ce1 48 I2C i2c;
krmreynolds 1:3272ece36ce1 49 L3G4200D(PinName, PinName);
krmreynolds 0:dc35364e2291 50
krmreynolds 1:3272ece36ce1 51 void writeReg(byte reg, byte value);
krmreynolds 1:3272ece36ce1 52 char readReg(byte reg);
krmreynolds 1:3272ece36ce1 53
krmreynolds 1:3272ece36ce1 54 void read(void);
krmreynolds 0:dc35364e2291 55
krmreynolds 1:3272ece36ce1 56 // vector functions
krmreynolds 1:3272ece36ce1 57 static void vector_cross(const Plane *a, const Plane *b, Plane *out);
krmreynolds 1:3272ece36ce1 58 static float vector_dot(const Plane *a,const Plane *b);
krmreynolds 1:3272ece36ce1 59 static void vector_normalize(Plane *a);
krmreynolds 0:dc35364e2291 60 };
krmreynolds 0:dc35364e2291 61
krmreynolds 1:3272ece36ce1 62 #endif