Implemented first Hangar-Service
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
Gyroscope.h@44:5483079fa156, 2015-05-29 (annotated)
- Committer:
- uadhikari
- Date:
- Fri May 29 12:21:31 2015 +0000
- Revision:
- 44:5483079fa156
- Parent:
- 40:8e852115fe55
Gyro calibration and reset added and flag to check if calibrated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pvaibhav | 4:e759b8c756da | 1 | #ifndef _H_GYROSCOPE_H |
pvaibhav | 4:e759b8c756da | 2 | #define _H_GYROSCOPE_H |
pvaibhav | 4:e759b8c756da | 3 | |
pvaibhav | 4:e759b8c756da | 4 | #include "I2CPeripheral.h" |
pvaibhav | 6:c12cea26842d | 5 | #include "Sensor.h" |
pvaibhav | 5:b9f2f62a8f90 | 6 | |
pvaibhav | 12:1632d7391453 | 7 | class Gyroscope : public I2CPeripheral, public Sensor |
pvaibhav | 12:1632d7391453 | 8 | { |
pvaibhav | 4:e759b8c756da | 9 | public: |
uadhikari | 44:5483079fa156 | 10 | /* Flag to indicate if Gryoscope is calibrated or not */ |
uadhikari | 44:5483079fa156 | 11 | bool isCalibrated; |
uadhikari | 44:5483079fa156 | 12 | |
pvaibhav | 4:e759b8c756da | 13 | Gyroscope(I2C &i2c); |
pvaibhav | 12:1632d7391453 | 14 | |
pvaibhav | 5:b9f2f62a8f90 | 15 | void handleInterrupt(void); |
uadhikari | 44:5483079fa156 | 16 | |
uadhikari | 44:5483079fa156 | 17 | /** |
uadhikari | 44:5483079fa156 | 18 | * Incrementally calculates the average noise offset |
uadhikari | 44:5483079fa156 | 19 | * with every interrupt received from gyroscope |
uadhikari | 44:5483079fa156 | 20 | * until the desired iteration is reached |
uadhikari | 44:5483079fa156 | 21 | */ |
uadhikari | 44:5483079fa156 | 22 | void calibtrationInterrupt(void); |
uadhikari | 44:5483079fa156 | 23 | |
pvaibhav | 6:c12cea26842d | 24 | virtual void powerOff(); |
pvaibhav | 6:c12cea26842d | 25 | virtual bool powerOn(); |
pvaibhav | 6:c12cea26842d | 26 | virtual void start(); |
uadhikari | 44:5483079fa156 | 27 | virtual void stop(); |
uadhikari | 44:5483079fa156 | 28 | |
uadhikari | 44:5483079fa156 | 29 | /** |
uadhikari | 44:5483079fa156 | 30 | * Returns raw x,y,z data from obtained from gyroscpe |
uadhikari | 44:5483079fa156 | 31 | */ |
uadhikari | 44:5483079fa156 | 32 | virtual Vector3 uncalibrated_read(); |
uadhikari | 44:5483079fa156 | 33 | |
uadhikari | 44:5483079fa156 | 34 | /** |
uadhikari | 44:5483079fa156 | 35 | * Returns calibrated x,y,z values from gyroscope |
uadhikari | 44:5483079fa156 | 36 | * The offset calculated from calibration is added |
uadhikari | 44:5483079fa156 | 37 | * to the raw data: |
uadhikari | 44:5483079fa156 | 38 | * value = (rawValue + noiseOffset) * gyro_resolution |
uadhikari | 44:5483079fa156 | 39 | */ |
pvaibhav | 8:cba37530d480 | 40 | virtual Vector3 read(); |
pvaibhav | 40:8e852115fe55 | 41 | |
uadhikari | 44:5483079fa156 | 42 | /** |
uadhikari | 44:5483079fa156 | 43 | * Changes the interrupt handler of gyro |
uadhikari | 44:5483079fa156 | 44 | * to calibrationInterrupt, which is responsible |
uadhikari | 44:5483079fa156 | 45 | * for calculating noise offset |
uadhikari | 44:5483079fa156 | 46 | */ |
uadhikari | 44:5483079fa156 | 47 | virtual void calibrate(); |
pvaibhav | 40:8e852115fe55 | 48 | volatile bool interruptSet; |
uadhikari | 44:5483079fa156 | 49 | |
uadhikari | 44:5483079fa156 | 50 | /* Sets offset to zero*/ |
uadhikari | 44:5483079fa156 | 51 | virtual void reset(); |
uadhikari | 44:5483079fa156 | 52 | |
pvaibhav | 5:b9f2f62a8f90 | 53 | protected: |
uadhikari | 44:5483079fa156 | 54 | int numSamples; //Counter for calibration |
uadhikari | 44:5483079fa156 | 55 | Vector3 offset; //Gyroscope noise compensation offset |
uadhikari | 44:5483079fa156 | 56 | InterruptIn int1; //Interrupt from the gyroscope |
pvaibhav | 32:d37447aec6b4 | 57 | InterruptIn int2; |
pvaibhav | 40:8e852115fe55 | 58 | size_t tick; |
pvaibhav | 4:e759b8c756da | 59 | }; |
pvaibhav | 4:e759b8c756da | 60 | |
pvaibhav | 4:e759b8c756da | 61 | #endif//_H_GYROSCOPE_H |