Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Tue Jul 19 2022 01:26:58 by
 1.7.2
 1.7.2