ROME 2 Praktikum 4

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers IMU.h Source File

IMU.h

00001 /*
00002  * IMU.h
00003  * Copyright (c) 2020, ZHAW
00004  * All rights reserved.
00005  */
00006 
00007 #ifndef IMU_H_
00008 #define IMU_H_
00009 
00010 #include <cstdlib>
00011 #include <mbed.h>
00012 #include "ThreadFlag.h"
00013 #include "LowpassFilter.h"
00014 /**
00015  * This is a device driver class for the ST LSM9DS1 inertial measurement unit.
00016  */
00017 class IMU {
00018 
00019     public:
00020         
00021                     IMU(SPI& spi, DigitalOut& csAG, DigitalOut& csM);
00022         virtual     ~IMU();
00023         float       readAccelerationX();
00024         float       readAccelerationY();
00025         float       readAccelerationZ();
00026         float       readGyroX();
00027         float       readGyroY();
00028         float       readGyroZ();
00029         float       readMagnetometerX();
00030         float       readMagnetometerY();
00031         float       readMagnetometerZ();
00032         float       readHeading();
00033 
00034     private:
00035         
00036         static const char   WHO_AM_I = 0x0F;
00037         static const char   CTRL_REG1_G = 0x10;
00038         static const char   CTRL_REG2_G = 0x11;
00039         static const char   CTRL_REG3_G = 0x12;
00040         static const char   OUT_X_L_G = 0x18;
00041         static const char   OUT_X_H_G = 0x19;
00042         static const char   OUT_Y_L_G = 0x1A;
00043         static const char   OUT_Y_H_G = 0x1B;
00044         static const char   OUT_Z_L_G = 0x1C;
00045         static const char   OUT_Z_H_G = 0x1D;
00046         static const char   CTRL_REG4 = 0x1E;
00047         static const char   CTRL_REG5_XL = 0x1F;
00048         static const char   CTRL_REG6_XL = 0x20;
00049         static const char   CTRL_REG7_XL = 0x21;
00050         static const char   CTRL_REG8 = 0x22;
00051         static const char   CTRL_REG9 = 0x23;
00052         static const char   CTRL_REG10 = 0x24;
00053         static const char   OUT_X_L_XL = 0x28;
00054         static const char   OUT_X_H_XL = 0x29;
00055         static const char   OUT_Y_L_XL = 0x2A;
00056         static const char   OUT_Y_H_XL = 0x2B;
00057         static const char   OUT_Z_L_XL = 0x2C;
00058         static const char   OUT_Z_H_XL = 0x2D;
00059         
00060         static const char   WHO_AM_I_M = 0x0F;
00061         static const char   CTRL_REG1_M = 0x20;
00062         static const char   CTRL_REG2_M = 0x21;
00063         static const char   CTRL_REG3_M = 0x22;
00064         static const char   CTRL_REG4_M = 0x23;
00065         static const char   CTRL_REG5_M = 0x24;
00066         static const char   OUT_X_L_M = 0x28;
00067         static const char   OUT_X_H_M = 0x29;
00068         static const char   OUT_Y_L_M = 0x2A;
00069         static const char   OUT_Y_H_M = 0x2B;
00070         static const char   OUT_Z_L_M = 0x2C;
00071         static const char   OUT_Z_H_M = 0x2D;
00072         
00073         static const unsigned int   STACK_SIZE = 4096;          // stack size of thread, given in [bytes]
00074         static const float          PERIOD;                     // the period of the timer interrupt, given in [s]
00075         static const float          M_PI;                       // the mathematical constant PI
00076         static const float          PERIOD_LP;
00077         static const float          LOWPASS_FILTER_FREQUENCY;
00078         
00079         float mxMin;
00080         float mxMax;
00081         float myMin;
00082         float myMax;
00083     
00084         float myX_korr;
00085         float myY_korr;
00086         
00087         SPI&            spi;
00088         DigitalOut&     csAG;
00089         DigitalOut&     csM;
00090         Mutex           mutex;
00091         ThreadFlag      threadFlag;
00092         Thread          thread;
00093         Ticker          ticker;
00094         LowpassFilter   FilterX;
00095         LowpassFilter   FilterY;
00096         
00097         void    writeRegister(DigitalOut& cs, char address, char value);
00098         char    readRegister(DigitalOut& cs, char address);
00099         void    sendThreadFlag();
00100         void    run();
00101 };
00102 
00103 #endif /* IMU_H_ */
00104