Below, is an Arduino function for reading smoothly an average value from a jumpy or erratic analog input sensor. The function reads repeatedly from an analog input, calculating a running average and returns the value back to the caller.

Here is the function :

// Get an average value from a jumpy or erratic input sensor.
const int getSensorAverageValue (const int sensorPin,
                                 const int numberOfSamples,
                                 const long timeGap)
  // This works as a sum counter.
  int currentValue = 0;

  // Get sensor samples with delay and calculate the sum.
  for (int i = 0; i < numberOfSamples; i++) {
    // Add sample to the sum counter.
    currentValue += analogRead(sensorPin);

    // Delay some time for the next sample.

  // Get the average sensor value (ignore the fraction).
  return (currentValue / numberOfSamples);