Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00036 class AnalogGyro : public Module
00037 {
00038 DECLARE_MODULE(AnalogGyro,Module)
00039
00040 public:
00041 AnalogGyro()
00042 {
00043 AddSocket("Gyro.Pitch",&m_filter.filtered[PITCH]);
00044 AddSocket("Gyro.Roll",&m_filter.filtered[ROLL]);
00045 AddSocket("Gyro.Yaw",&m_filter.filtered[YAW]);
00046
00047 AddSocket("AnalogGyro.Filter.P",&m_filter.amounts[PITCH]);
00048 AddSocket("AnalogGyro.Filter.R",&m_filter.amounts[ROLL]);
00049 AddSocket("AnalogGyro.Filter.Y",&m_filter.amounts[YAW]);
00050
00051 AddSocket("AnalogGyro.Gain.P",&m_gains[PITCH]);
00052 AddSocket("AnalogGyro.Gain.R",&m_gains[ROLL]);
00053 AddSocket("AnalogGyro.Gain.Y",&m_gains[YAW]);
00054 for (int ct=0; ct<MAX_AXES; ct++)
00055 {
00056 m_gains[ct] = GYRO_SCALE;
00057 }
00058 }
00059
00060 virtual void Init()
00061 {
00062 SetInterval(5);
00063 SetPriority(20);
00064
00065 pinMode (AZPIN, OUTPUT);
00066 pinMode (AZYAWPIN, OUTPUT);
00067 digitalWrite(AZPIN, LOW);
00068 digitalWrite(AZYAWPIN, LOW);
00069 analogReference(EXTERNAL);
00070 }
00071
00072 virtual void Reference()
00073 {
00074 digitalWrite(AZPIN, HIGH);
00075 digitalWrite(AZYAWPIN, HIGH);
00076 delayMicroseconds(750);
00077 digitalWrite(AZPIN, LOW);
00078 digitalWrite(AZYAWPIN, LOW);
00079 delay(8);
00080 m_filter.Reference(20);
00081 }
00082
00083 virtual void ParamChanged(Socket * param)
00084 {
00085 m_filter.ParamChanged(param);
00086 }
00087
00088 virtual void Loop(const unsigned long& interval)
00089 {
00090 float data[MAX_AXES];
00091 data[PITCH] = analogRead(GYROADC_PITCH) * m_gains[PITCH];
00092 data[ROLL] = analogRead(GYROADC_ROLL) * m_gains[ROLL];
00093 data[YAW] = analogRead(GYROADC_YAW) * m_gains[YAW];
00094 m_filter.Update(data);
00095 }
00096
00097 MultiFilterRef<MAX_AXES> m_filter;
00098
00099 ParameterF m_gains[MAX_AXES];
00100
00101 };
00102
00103 AnalogGyro _AnalogGyro;
00104