ROME 2 Praktikum 4
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Wed Jul 13 2022 21:00:44 by
1.7.2