Arduino/µC Programmierung (Böen-Messung)

  • C

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ery.

    Arduino/µC Programmierung (Böen-Messung)

    Hallo,

    ich versuche mich gerade an der µC Programmierung mit einem Arduino Nano um mir eine Wetterstation zu basteln. Aktuell habe ich schon alle möglichen Messwerte, kämpfe aber noch mit dem Wind:
    Habe einen Windsensor der Mittels Reed-Kontakt durchschaltet, hier zähle ich die Umdrehungen, anhand der Umdrehungen kann ich die Windgeschwindigkeit umrechnen - würde mir aber auch gerne die Böen anzeigen lassen.

    Habe dazu auch ein Code-Beispiel gefunden, leider blicke ich hier nicht durch (umschreiben und kopieren würde wahrscheinlich schon klappen, möchte aber den größten Teil selbst schreiben und auch den Gedankengang dazu, speziell zu dieser Funktion, verstehen).

    Quellcode

    1. #define WIND_FACTOR 2.4
    2. #define TEST_PAUSE 60000
    3. volatile unsigned long anem_count=0;
    4. volatile unsigned long anem_last=0;
    5. volatile unsigned long anem_min=0xffffffff;
    6. double getGust()
    7. {
    8. unsigned long reading=anem_min;
    9. anem_min=0xffffffff;
    10. double time=reading/1000000.0;
    11. return (1/(reading/1000000.0))*WIND_FACTOR;
    12. }

    Quelle bzw. Auszug: blog.kkessler.com/2012/06/21/sparkfun-weather-station/


    Wieso wird hier anem_min zwei mal ein Wert zugewiesen, und vor allem warum ein statischer? Wozu die Variable "time"?
    Und auch aus dem Rückgabe-Wert werde ich nicht schlau... Auch hier wieder nur konstante Werte?

    Irgendwie weiß ich nicht was ich übersehe - aber gut: Bin ja noch Anfänger... :)

    Vielen Dank im Voraus für etwaige Hilfestellungen!



    Edit: Mein persönlicher Ansatz wäre ja etwas wie: ein Array erstellen welches die Windgeschwindigkeit alle 12 Sekunden mitschreibt, 10 Werte lang.
    Dort schleife ich mich einfach durch die einzelnen Positionen und kann somit erstens locker den Durchschnitt als auch den Maximal-Wert (der letzten zwei Minuten) bestimmen.
    Ist zwar recht viel Code aber einfach(er) zu verstehen?

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ery“ ()

    Danke für die Antwort!
    Nachdem mir ein Kollege den Sinn von 0xffffffff erklärt hat sich das auch schon etwas gelichtet, das anemometerClick hab ich selbst zumindest trotzdem übersehen (obwohl im Nachhinein ja offensichtlich)... Danke!

    Damit der Teil auch erklärt wird: Division durch 0 wäre böse (eh klar), 1 oder sonst was würde den Wert stark verfälschen und keinen Sinn ergeben. Mit 0xffffffff (4294967295 dec.) wird der Wert (falls vorher keiner zugwiesen wurde = z.B. durch Windstille) danach durch die Rechnung als "0" (mit einigen Kommastellen bis zum ersten Wert) ausgegeben. Hoffe ich habe das richtig erklärt :)

    Werde zwar versuchen trotzdem meine Idee umzusetzen, als Notlösung verstehe ich zumindest die Herangehensweise aus der Quelle, was der Wert darstellen soll aber trotzdem nicht. Aber gut, selbst gelöst müsste ich mir das dann ja auch nicht stellen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ery“ ()