//---------------------------------------------------------------------------
// Analog Section
// Read analog inputs sequentially and apply slidding window averaging
//---------------------------------------------------------------------------
total_x = 0;
total_y = 0;
total_z = 0;
total_xr = 0;
total_yr = 0;
total_zr = 0;
total_dial = 0;
total_slider = 0;
// Read 8 analog inputs and use them for the joystick axis
Analog_X [Analog_Cnt] = analogRead(4);
Analog_Y [Analog_Cnt] = analogRead(5);
Analog_Z [Analog_Cnt] = 0; // analogRead(2);
Analog_XR [Analog_Cnt] = 0; // analogRead(3);
Analog_YR [Analog_Cnt] = 0; // analogRead(0);
Analog_ZR [Analog_Cnt] = 0; // analogRead(1);
Analog_Dial [Analog_Cnt] = 0;
Analog_Slider [Analog_Cnt] = 0;
// Counter for sliding average window
Analog_Cnt++;
if (Analog_Cnt >= ANALOG_AVERAGE_CNT)
{
Analog_Cnt = 0;
}
// Sliding window average X, Y, & Z axis
for (i = 0; i < ANALOG_AVERAGE_CNT; i++)
{
total_x += Analog_X[i];
total_y += Analog_Y[i];
total_z += Analog_Z[i];
total_xr += Analog_XR[i];
total_yr += Analog_YR[i];
total_zr += Analog_ZR[i];
total_dial += Analog_Dial[i];
total_slider += Analog_Slider[i];
}
// Right shift (divide by 16)
average_x = total_x >> ANALOG_AVERAGE_DIV_SHIFT;
average_y = total_y >> ANALOG_AVERAGE_DIV_SHIFT;
average_z = total_z >> ANALOG_AVERAGE_DIV_SHIFT;
average_xr = total_xr >> ANALOG_AVERAGE_DIV_SHIFT;
average_yr = total_yr >> ANALOG_AVERAGE_DIV_SHIFT;
average_zr = total_zr >> ANALOG_AVERAGE_DIV_SHIFT;
average_dial = total_dial >> ANALOG_AVERAGE_DIV_SHIFT;
// average_slider = total_slider >> ANALOG_AVERAGE_DIV_SHIFT;
Joystick.X(average_x);
Joystick.Y(average_y);
Joystick.Z(average_z);
// Temp assign unused analog inputs to zero.
average_xr = 0;
average_yr = 0;
average_zr = 0;
average_dial = 0;
Joystick.Xrotate(average_xr);
Joystick.Yrotate(average_yr);
Joystick.Zrotate(average_zr);
Joystick.Dial(average_dial);
// Joystick.Slider(average_slider); // Used as encoder data