Here is a dead simple method of smoothing the readings:
template<uint8_t pin> uint16_t analogReadAvg()
{
const uint8_t ANALOG_BUFFER_SIZE = 10;
static uint8_t buffer_idx = 0, buffer_size = 0;
static uint16_t buffer[ANALOG_BUFFER_SIZE] = {0};
buffer[buffer_idx++] = analogRead(pin);
if (buffer_idx > ANALOG_BUFFER_SIZE) buffer_idx = 0;
if (buffer_size < ANALOG_BUFFER_SIZE) buffer_size++;
uint32_t result = 0;
for (uint8_t i = 0; i < buffer_size; i++) result += buffer[i];
return result / buffer_size;
}
void loop()
{
uint16_t avg = analogReadAvg<voltPin>();
float voltage = avg * (17.0 / 1023.0);
Serial.println(voltage);
delay(1000);
}