Also, erstens, wenn du nur die LOW-zeit mißt, kriegst du nicht die Zeit zwischen den Pulsen, sondern eben nur die LOW-Zeit. Die Pulslänge ist aber LOW-Zeit plus HIGH-Zeit.
Du mußt immer am Flankenwechsel triggern, am besten mit einem Interrupt, aber wie das mit dem Arduino funktioniert, kann ich (noch) nicht sagen, ich kenns nur von anderen Echtzeitsytemen mit Drehzahlerfassung, die wir in der Firma bauen.
zweitens: Trenn mal Erfassung und Aufzeichnung.
Du hast eine Funktion, die die Pulslängen erfasst. Das kann sehr schnell erfolgen! Diese Funktion stellt die Pulslänge als Wert (gefiltert?) zur Verfügung.
Du hast eine andere Funktion, die in festen Intervallen aufgerufen wird (bei dir 1000ms) und die aktuelle Windgeschwindigkeit errechnet und mit Zeitstempel abspeichert.
Dadurch ist beides voneinander unabhängig und du kannst jederzeit dein aufzeichnungsintervall ändern (Falls dir die 86400 Datensätze pro Tag zuviel sind. )
die Umrechung Pulsdauer => Windgeschwindigkeit kannst du so machen:
zuerst baust du dir eine Tabelle mit ZWEI Spalten: Pulsdauer und Windgeschwindigkeit (Pulsdauer[µs] = 1000000/Frequenz)
Die anderen beiden Spalten habe ich nur drin gelassen, damit du deine Tabelle wieder erkennst.
m/s Hz(6 Imp.) Hz(1 Imp.) Dauer1p[µs]
20 59,6 9,93 100705
19 56,4 9,4 106383
18 52,5 8,75 114286
17 49,6 8,27 120919
16 46,2 7,7 129870
15 43,2 7,2 138889
14 39,7 6,62 151057
13 36,7 6,12 163399
12 34 5,67 176367
11 30,5 5,08 196850
10 27,2 4,53 220751
9 24,3 4,05 246914
8 20,9 3,48 287356
7 18,2 3,03 330033
6 15 2,5 400000
5 12,5 2,08 480769
4 10 1,67 598802
3 7 1,17 854701
2 4,6 0,77 1298701
1 2,1 0,35 2857143
mit deinen aktuell gemessenen Pulsdauerwerten gehst du dann in die Tabelle, suchst dir die beiden benachbarten Werte und interpolierst dazwischen linear.
Such doch mal nach linare Interpolation C
Es sei denn, du brauchst garkeine Zwischenwerten, es reichen dir die ganzzahligen Windgeschwindigkeiten, dann kannst du dir die Interpolation sparen, und gleich den nächsten Wert nehmen.
Reicht das?
Gunther