José Claudio
/
ReadingGyro_ITG3205
Example of reading an gyroscope sensor (ITG3205)
Gyroscope.cpp
- Committer:
- jose_claudiojr
- Date:
- 2013-05-21
- Revision:
- 0:d884c7453c85
File content as of revision 0:d884c7453c85:
#include "Gyroscope.h" Gyroscope::Gyroscope(ITG3205* gyroHardware, float sensitivity, float dataRate) { this->gyroHardware = gyroHardware; this->sensitivity = sensitivity; this->dataRate = dataRate; updateZeroRates(); } Gyroscope::~Gyroscope(void) { } void Gyroscope::updateZeroRates() { update(10, 10); zeroRateX = rawX; zeroRateY = rawY; zeroRateZ = rawZ; resetAngles(); } void Gyroscope::update() { update(1, 1); } void Gyroscope::update(int samplesSize, int sampleDataRate) { //int axes[3] = {0, 0, 0}; rawX = 0; rawY = 0; rawZ = 0; for (int i = 0; i < samplesSize; i++) { //(gyroHardware)->getAxes(axes); while(!gyroHardware->isRawReady()); rawX += ( gyroHardware->getGyroX() / samplesSize); rawY += ( gyroHardware->getGyroY() / samplesSize); rawZ += ( gyroHardware->getGyroZ() / samplesSize); wait_us(sampleDataRate); } angleX += getDegreesX() * dataRate; angleY += getDegreesY() * dataRate; angleZ += getDegreesZ() * dataRate; } void Gyroscope::resetAngles() { angleX = 0; angleY = 0; angleZ = 0; } float Gyroscope::getDegreesX() { return (rawX - zeroRateX) / sensitivity; } float Gyroscope::getDegreesY() { return (rawY - zeroRateY) / sensitivity; } float Gyroscope::getDegreesZ() { return (rawZ - zeroRateZ) / sensitivity; } float Gyroscope::getRadiansX() { return getDegreesX() / 180.0 * PI; } float Gyroscope::getRadiansY() { return getDegreesY() / 180.0 * PI; } float Gyroscope::getRadiansZ() { return getDegreesZ() / 180.0 * PI; } float Gyroscope::getAngleX() { return angleX; } float Gyroscope::getAngleY() { return angleY; } float Gyroscope::getAngleZ() { return angleZ; }