robtillaart:
That are quite smooth readings esp compared to the previous ones. You can smooth these readings even more in the loop() e.g. by only adjusting for 25% of the new rpm value;loop()
{
if (newRpm)
{
newRpm = false;
int smoothrpm = (3*smoothrpm + rpm)/4; // weighted average
Serial.print(millis());
Serial.print(", ");
Serial.print(rpm );
Serial.print(", ");
Serial.println(smoothrpm );
}
}
int smoothrpm = (3*smoothrpm + rpm)/4; // weighted average
I changed toint smoothrpm = ((3*smoothrpm + rpm)/4)*4; // weighted average
this is the result
rpm 4210 smooth rpm 4208
rpm 3647 smooth rpm 3644
rpm 3726 smooth rpm 3724
rpm 3692 smooth rpm 3692
rpm 3703 smooth rpm 3700
rpm 3715 smooth rpm 3712
rpm 3692 smooth rpm 3692
rpm 3692 smooth rpm 3692
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3692 smooth rpm 3692
rpm 3669 smooth rpm 3668
rpm 3669 smooth rpm 3668
rpm 3692 smooth rpm 3692
rpm 3669 smooth rpm 3668
rpm 3669 smooth rpm 3668
rpm 3680 smooth rpm 3680
rpm 3669 smooth rpm 3668
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3658 smooth rpm 3656
rpm 3669 smooth rpm 3668
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
Then tried this
int smoothrpm = ((9*smoothrpm + rpm)/10)*10; // weighted average
gave this
rpm 3692 smooth rpm 3690
rpm 3692 smooth rpm 3690
rpm 3680 smooth rpm 3680
rpm 3692 smooth rpm 3690
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3669 smooth rpm 3660
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3669 smooth rpm 3660
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3669 smooth rpm 3660
rpm 3692 smooth rpm 3690
rpm 3669 smooth rpm 3660
rpm 3669 smooth rpm 3660
rpm 3870 smooth rpm 3870
rpm 3669 smooth rpm 3660
rpm 3680 smooth rpm 3680
rpm 3680 smooth rpm 3680
rpm 3658 smooth rpm 3650
rpm 3692 smooth rpm 3690