Das ist der falsche Ansatz und wird so nichts. Verwende millis() um jede Sekunde eine Messung zu machen. Und bilde dann nach x Messungen den Mittelwert.
Hmm, einfach so lange Messen bis sich millis um 1000 erhöht hat?
Also nicht in einer for Schleife sndern millis "merken" und dann in einer While Schleife laufen lassen bis millis um 1000 größer ist als der Merker. Man muß sich nur noch was überlegen wie man die Messwerte elegant zwischenspeichert Ein Schleifenzähler beinhaltet dann die Anzahl der Messungen in dieser Sekunde.
Im Prinzip fast das gleiche. Verwende millis() um die vergangene Zeit zu zählen. Du setzt vor der ersten Messung eine Variable (Typ unsigned long) auf den aktuellen millis() Wert. Dann misst du solange bis millis() - dieser Wert größer als 1000 ist. Dann ist 1 Sekunde vergangen.
for-Schleifen zum Timing zu verwenden geht nicht richtig. Da stecken zu viele Dinge drin die sich ändern können und du kannst auch nicht sagen was das Compiler aus der Schleife macht. Sowas kann man in Assembler machen wo man genau weiß wie viele Takte ein Befehl braucht. Und selbst dann ist ein Drecks-Aufwand den Overhead der Schleife korrekt zu zählen
... selbst mit Assembler mache ich so was nicht mit Schleifendurchgängen - spätestens wenn ein Interrupt zuschlägt ist das Timing kaputt. Diese "millis" kann man sinngemäß und sehr elegant mit einem Timer Interrupt lösen.