-void calibrate()
-{
- static unsigned long last_calib = -86398000;
- unsigned long m = millis();
- unsigned long mm = m - last_calib;
- if ((mm > 50000) && (mm < 70000)) {
- millis_per_minute = mm;
- }
- last_calib = m;
+// So we start with an array of all 60000 ms, and we keep ten calibrations and average them.
+void calibrate() {
+
+ static unsigned long mpm_array[10] = { 60000, 60000, 60000, 60000, 60000, 60000, 60000, 60000, 60000, 60000 };
+ static int mpm = 0; // next one to update
+
+ static unsigned long last_calib = -86398000;
+ unsigned long m = millis();
+ unsigned long mm = m - last_calib;
+ if ((mm > 50000) && (mm < 70000)) {
+ mpm_array[mpm++] = mm;
+ if (mpm >= 10) {
+ mpm = 0;
+ }
+ millis_per_minute = (mpm_array[0] + mpm_array[1] + mpm_array[2] + mpm_array[3]
+ + mpm_array[4] + mpm_array[5] + mpm_array[6] + mpm_array[7]
+ + mpm_array[8] + mpm_array[9]) / 10;
+ }
+ last_calib = m;