zinnet yazıcı
/
BMA220
j
bma220.h
- Committer:
- zinnetyazicii53
- Date:
- 2019-08-25
- Revision:
- 0:d861e7a56281
File content as of revision 0:d861e7a56281:
#include "mbed.h" #include <vector> #include <math.h> #define BMA220_ADDR 0x0A // I2C Address of the sensor #define XAXIS 0x04 // x-axis acceleration value register #define YAXIS 0x06 // y-axis acceleration value register #define ZAXIS 0x08 // z-axis acceleration value register #define SLOPE_REG 0x12 // slope detection parameter #define INTRP_MODE_REG 0x1A // interrupt selection #define SLEEP_REG 0x1E // sleep enable and duration #define SOFTRESET_REG 0x32 // softreset (triggered by reading) #define SENSITIVITY_REG 0x22 // sensitivity selection #define FILTER_REG 0x20 // filter selection #define CHIPID_REG 0x00 // chip id #define REVISIONID_REG 0x02 // revision id #define INTRP_RES_REG 0x1C // interrupt reset, latch mode #define SENS_2g 0x00 // Empfindlichkeit: +- 2g #define SENS_4g 0x01 // Empfindlichkeit: +- 4g #define SENS_8g 0x02 // Empfindlichkeit: +- 8g #define SENS_16g 0x03 // Empfindlichkeit: +- 16g #define FILTER_32Hz 0x05 // cutoff frequency: 32 Hz #define FILTER_64Hz 0x04 // cutoff frequency: 64 Hz #define FILTER_125Hz 0x03 // cutoff frequency: 125 Hz #define FILTER_250Hz 0x02 // cutoff frequency: 250 Hz #define FILTER_500Hz 0x01 // cutoff frequency: 500 Hz #define FILTER_1kHz 0x00 // cutoff frequency: 1 kHz #define LATCH_0s 0x80 // reset interrupt controller, latch time 0s #define LATCH_025s 0x90 // reset interrupt controller, latch time 0.25s #define LATCH_05s 0xA0 // reset interrupt controller, latch time 0.5s #define LATCH_1s 0xB0 // reset interrupt controller, latch time 1s #define LATCH_2s 0xC0 // reset interrupt controller, latch time 2s #define LATCH_4s 0xD0 // reset interrupt controller, latch time 4s #define LATCH_8s 0xE0 // reset interrupt controller, latch time 8s #define LATCH_PERM 0xF0 // reset interrupt controller, latch permanently #define SLEEP_2ms 0b01000000 // sleep enabled, 2 ms #define SLEEP_10ms 0b01001000 // sleep enabled, 10 ms #define SLEEP_25ms 0b01010000 // sleep enabled, 25 ms #define SLEEP_50ms 0b01011000 // sleep enabled, 50 ms #define SLEEP_100ms 0b01100000 // sleep enabled, 100 ms #define SLEEP_500ms 0b01101000 // sleep enabled, 500 ms #define SLEEP_1s 0b01110000 // sleep enabled, 1 s #define SLEEP_2s 0b01111000 // sleep enabled, 2 s #define SLOPEDETECT 0x38 // select envelope slope detection #define SLOPEPAR1 0x0D // slope detection parameter: threshold: 0011, duration: 01 #define ONEBYTE 0x01 // read one byte #define PI 3.1415926535897932384626433832795 template<typename T> std::vector<std::vector<float> > MatrixMult(const std::vector<std::vector<T> > Matrix1, const std::vector<std::vector<T> > Matrix2){ if((int)Matrix1[0].size()!=(int)Matrix2.size()){ //pc.printf("Wrong Matrix Size\n"); return Matrix1; } std::vector<std::vector<float> > result; result.resize(Matrix1.size(), std::vector<float>(Matrix2[0].size())); for (int i=0; i<(int)Matrix1.size(); i++){ for (int j = 0; j<(int)Matrix2[0].size(); j++){ result[i][j]=0; for (int k = 0; k<(int)Matrix1[0].size(); k++){ result[i][j]+=((float)Matrix1[i][k])*((float)Matrix2[k][j]); } } } return result; } /*template<typename T> void display(std::vector<std::vector<T> > A){ for (int i=0; i<(int)A.size(); i++){ for (int j=0; j<(int)A[0].size(); j++){ pc.printf("%i", A[i][j]); pc.printf("\t"); } pc.printf("\n"); } }*/ struct Acceleration{ float Ax, Ay, Az; }; struct Quanterion{ float q0, q1, q2, q3, angle; /*void display(){ Angle(); pc.printf("%f+ %fi+ %fj+ %fk \t ANgle is: %f",q0, q1, q2, q3, angle); }*/ void Angle(){ angle=2*atan(sqrt(pow(q1, 2) + pow(q2, 2)+ pow(q3, 2))/q0)*180/PI; } }; class BMA220{ private: float Ax, Ay, Az, pitch, roll, theta; uint8_t resetvalue; Acceleration G[2]; Quanterion Q[3]; void Calculate_Q1(); void Calculate_Q2(); void Calculate_Q3(); std::vector<std::vector<float> > Quanterion_2_Matrix(const Quanterion &Q); public: BMA220(); bool begin(void); bool set(uint8_t reg, uint8_t value); bool read(uint8_t reg, uint8_t *pvalue); void setRegister(uint8_t reg, uint8_t value); int8_t readRegister(uint8_t reg); void readAcceleration(int sensitivity); float getAcceleration_X() const; float getAcceleration_Y() const; float getAcceleration_Z() const; float getPitch() const; float getRoll() const; float getTheta() const; float getMag() const; void reset(void); void FallDetection(); Quanterion Q_result1, Q_result2; /*uint8_t reset(void); uint8_t chipID(void); uint8_t revisionID(void);*/ };