Also rechnen wir mal:
Annahme: Maximal messbare Geschwindigkeit: 100km/h (= 27.8m/s)
Zeit für eine Umdrehung:
t = 2.214m/(27.8m/s) = 79.7ms
Um diese Geschwindigkeit mit 1% Genauigkeit zu messen (Grüsse an
µA-Thread), muss der Kontakt demnach ca. alle 79.7ms/100 = 797µs
abgetastet werden. Bei 100km/h läuft Dein Zähler somit auf einen Wert
von 100.
Bei Minimalgeschwindigkeit, sagen wir mal 1km/h dauert die Umdrehung des
Rades 100 mal solange. Folglich läuft Dein Zähler dann bis 10000. Du
brauchst also einen 16-Bit-Zähler.
Wenn wir exakt mit 797µs abtasten, errechnet sich die Geschwindigkeit
wie folgt:
v[km/h] = 10000 / Z
Mit Festkommaarithmetik gerechnet:
v[km/h*10] = 100000 / Z
Bei der Anzeige muss dann die Kommastelle wieder eingefügt werden. Ein
Rechnung mit Floatzahlen erübrigt sich, ein long int reicht locker.
Wenn Du statt mit den krummen 797µs lieber mit geraden 800µs abtastest,
muss lediglich Deine Konstante korrigiert werden von 100000 auf 99630.
Witzigerweise ist dieser Wert sogar exakt und nicht gerundet.