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
00040 class AnalogAccel : public Module
00041 {
00042 DECLARE_MODULE(AnalogAccel,Module)
00043
00044 AnalogAccel()
00045 {
00046 AddSocket("Accel.X",&m_filter.filtered[AXISX]);
00047 AddSocket("Accel.Y",&m_filter.filtered[AXISY]);
00048 AddSocket("Accel.Z",&m_filter.filtered[AXISZ]);
00049
00050 AddSocket("AnalogAccel.Filter.X",&m_filter.amounts[AXISX]);
00051 AddSocket("AnalogAccel.Filter.Y",&m_filter.amounts[AXISY]);
00052 AddSocket("AnalogAccel.Filter.Z",&m_filter.amounts[AXISZ]);
00053
00054 AddSocket("AnalogAccel.Offset.X",&m_offsets[AXISX]);
00055 AddSocket("AnalogAccel.Offset.Y",&m_offsets[AXISY]);
00056 AddSocket("AnalogAccel.Offset.Z",&m_offsets[AXISZ]);
00057
00058 AddSocket("AnalogAccel.Gain.X",&m_gains[AXISX]);
00059 AddSocket("AnalogAccel.Gain.Y",&m_gains[AXISY]);
00060 AddSocket("AnalogAccel.Gain.Z",&m_gains[AXISZ]);
00061 for (int ct=0; ct<MAX_AXES; ct++)
00062 {
00063 m_gains[ct] = ACCEL_SCALE;
00064 m_offsets[ct] = ACCEL_OFFSET;
00065 }
00066 }
00067
00068 virtual void ParamChanged(Socket * param)
00069 {
00070
00071
00072
00073
00074
00075
00076 }
00077
00078 virtual void Init()
00079 {
00080 SetInterval(5);
00081 SetPriority(20);
00082 analogReference(EXTERNAL);
00083 }
00084
00085 virtual void Reference()
00086 {
00087
00088 }
00089
00090 virtual void Loop(const unsigned long& interval)
00091 {
00092 float data[MAX_AXES];
00093
00094 data[AXISX] = (analogRead(ACCEL_ADC_X) + m_offsets[AXISX]) * m_gains[AXISX];
00095 data[AXISY] = (analogRead(ACCEL_ADC_Y) + m_offsets[AXISY]) * m_gains[AXISY];
00096 data[AXISZ] = (analogRead(ACCEL_ADC_Z) + m_offsets[AXISZ]) * m_gains[AXISZ];
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 m_filter.Update(data);
00109 }
00110
00111 MultiFilter<MAX_AXES> m_filter;
00112 ParameterF m_offsets[MAX_AXES];
00113 ParameterF m_gains[MAX_AXES];
00114
00115 };
00116
00117 AnalogAccel g_AnalogAccel;
00118