José Claudio / Mbed 2 deprecated QuadCopter-Sensor-Serial

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Accelerometer.cpp Source File

Accelerometer.cpp

00001 
00002 #include "Accelerometer.h"
00003 
00004 Accelerometer::Accelerometer(ADXL345* acceleHardware, float sensitivity)
00005 {
00006     this->acceleHardware = acceleHardware; 
00007     this->sensitivity = sensitivity;   
00008     updateZeroRates();
00009 }
00010 
00011 Accelerometer::~Accelerometer(void)
00012 {
00013 }
00014 
00015 void Accelerometer::updateZeroRates()
00016 {
00017     //update(253, 10); // Utilizando filtro passa baixa, é necessário 253 amostras para estabilização do filtro.
00018     update(200, 10, true);
00019     zeroRateX = rawX;
00020     zeroRateY = rawY;
00021     zeroRateZ = rawZ;
00022 }
00023 
00024 void Accelerometer::update()
00025 {    
00026     update(1, 1, false);
00027 }
00028 
00029 void Accelerometer::update(int samplesSize, int sampleDataRate, bool iswait)
00030 {   
00031     int axes[3] = {0, 0, 0};
00032     rawX = 0;
00033     rawY = 0;
00034     rawZ = 0;
00035     
00036     for (int i = 0; i < samplesSize; i++)
00037     {
00038         acceleHardware->getAxes(axes);
00039         //O valor do ângulo real para o ângulo medido está com uma diferença de 2.5 vezes maior.
00040         rawX += ((float)axes[0]) / samplesSize;
00041         rawY += ((float)axes[1]) / samplesSize;
00042         rawZ += ((float)axes[2]) / samplesSize;
00043         
00044         /*rawX += (acceleHardware->getX()) / samplesSize;
00045         rawY += (acceleHardware->getY()) / samplesSize;
00046         rawZ += (acceleHardware->getZ()) / samplesSize;*/
00047         
00048         if(wait)
00049             wait_ms(sampleDataRate);
00050     }
00051 }
00052 
00053 float Accelerometer::getAccelerationX()
00054 {
00055     //( * Vref / 1023 – VzeroG) / Sensitivity
00056     //return (((rawX - zeroRateX) / sensitivity) + 1.0); //Devido a posição da plaquinha, quando se define o zeroRateX, tem que adicionar novamente a gravidade, que está influenciando o X
00057     return ((rawX - zeroRateX) / sensitivity);
00058 }
00059 
00060 float Accelerometer::getAccelerationY()
00061 {
00062     return ((rawY - zeroRateY) / sensitivity);
00063 }
00064 
00065 float Accelerometer::getAccelerationZ()
00066 {
00067     return (((rawZ - zeroRateZ) / sensitivity) + 1.0);
00068 }
00069 
00070 float Accelerometer::getRadiansAngleX()
00071 {
00072     float x = getAccelerationX();
00073     float z = getAccelerationZ();
00074     
00075     return (((float)atan2(x, z)) * 2.2);
00076 }
00077 
00078 float Accelerometer::getRadiansAngleY()
00079 {
00080     float y = getAccelerationY();
00081     float z = getAccelerationZ();
00082     return (((float)atan2(y, z)) * 2.2);
00083 }
00084 
00085 float Accelerometer::getDegreesAngleX()
00086 {
00087     return (getRadiansAngleX() / Accelerometer::getPI()) * 180.0;
00088 }
00089 
00090 float Accelerometer::getDegreesAngleY()
00091 {
00092     return (getRadiansAngleY() / Accelerometer::getPI()) * 180.0;
00093 }
00094 
00095 float Accelerometer::getPI()
00096 {
00097     return 3.14159265;
00098 }