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. delay(timeGap); } // Get the average sensor value (ignore the fraction). return (currentValue / numberOfSamples); }