Ciao, non ho avuto modo di provare con il nuovo set di dati (anche se non credo che cambi poi molto), però non avevo fatto caso che hai questo delay(20) inserito in un ciclo for sia in getTemp() che in getVCC() che in totale fanno un "tempo morto" di 800mS.
Francamente non mi sembra un buon approccio. Il tempo di reazione del tuo controllore è influenzato da queste pause.
Se proprio vuoi fare una media aritmetica ogni 20mS usa millis() per scandire il tempo ed evita il ciclo for.
Ad esempio potresti accumulare le letture in un array, oppure usare un filtro a media mobile o addirittura uno a media mobile esponenziale (Exponentially Weighted Moving Average - EWMA)
// alpha -> 0.0 - 1.0
output = alpha * actualReading + (1 - alpha) * lastOutput