sensor auslesen und warten auf benutzereingaben



  • Hallo,
    ich möchte über ein kleines kommandozeilentool ein paar sensoren auslesen. die abtastzeit ist größer als eine sekunde.
    außerdem möchte ich die möglichkeit haben, über keyboardeingaben z.B. die abtastzeit zu ändern oder einen sensor zu aktivieren/ zu deaktivieren.

    eigentlich schreit das ganze ja nach threads, wobei ich mich mit threadprogrammierung noch nicht auseinandergesetzt haben und das nach möglichkeit in diesem projekt nicht ausprobieren möchte.

    möglicher programmablauf:
    Initialisierung
    sensor 1 starten mit abtastzeit 5 sek
    abtasten
    [...]
    abtasten
    sensor 2 starten mit abtastzeit 7 sek
    abtasten
    [...]
    abtasten
    abtastzeit von sensor1 auf 50 sek ändern
    ect...

    meine idee wäre, 'ne queue zu generieren, wo man immer den nächsten abtastzeitpunkt des sensors reinschreibt. wird die zeit erreicht, wird der sensor ausgelesen, an sonsten auf benutzereingaben gewartet.
    optimal wäre, wenn die messung während der benutzereingaben weiterläuft, aber nicht zwingend notwendig (ist wohl eher schlecht realisierbar, vermute ich).
    auf 'nem µC würd ich das über interrupts realisieren, aber in c/c++?
    gibt es da Ideen oder anregungen für mich? oder sind threads gar nicht so böse sondern simpel und leichtverstädlich?

    Gruß H@ppy

    Nachtrag
    Vielleicht ist die angabe eines BS hier ganz sinnvoll:
    Win XP Pro



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hmmm, keiner 'ne idee für mich? oder bin ich zu ungeduldig.
    theoretisch könnte ich die abtastzeiten in 'ne verkettete Liste reinhauen und einmal pro sekunde schauen, ob ein sensor dran ist und den auslesen und an sonsten auf tastatureingaben warten, die einfach zeichenweise abfangen und immermal zwischendurch in meine abfrageroutine gehen um zu schauen, ob ein sensor ausgelesen werden muß. klingt aber irgendwie nach mehr aufwand, als notwendig.

    kann man die courserposition auf dem bildschirm auslesen und beliebig setzen? dass ich ggf 'nen messwert änder, danach aber wieder zurück zur eingabestelle springe.

    void ausgabe(){
      save_cursor_pos;
      set_cursor_anfang;
      print_sensoren; //feste anzahl von zeilen, überschreibt also nur den alten teil
      load_saved_cursor_pos
    }
    

    das würde aber insgesammt auf ein busy-waiting hinauslaufen... bin also weiterhin offen für anregungen.



  • Man kann in Windows Timer-Events starten. Mit WM_TIMER fängt man diese auf. Mit SetTimer kan man sie setzen.

    Nun gibt es viele Möglichkeiten. Entweder, Du merkst Dir die für jeden Sensor die nächste Prüfzeit und machst ein Timer-Event aller einer Sekunde und prüfst dann ob ein Sensor dran ist. Wenn einer dran ist, berechnest Du die nächste Prüfzeit und merkst sie dir wieder (muss keine Liste sein oder).

    Die nächste Möglichkeit wäre, dass Du für jede fällige Sensorprüfung ein Timer-Event startes. Du kannst die die unterschiedlichen Timer an Hand einer IDs unterscheiden (siehe SetTimer()).

    Ich hoffe, das reicht als Anregung aus.



  • vielen Dank erst einmal.

    noch kann ich damit wenig anfangen, hab mich mit der winapi noch nicht auseinandergesetzt, aber ich denke, dass google mir nun wieder ein treuer freund sein kann.
    eine liste muß es nicht sein, ich dacht mir nur, dass ich dann immer nur den zeitpunkt des ersten elementes prüfen muß. dafür muß ich sie aber auch einsortieren.

    bei wahrscheinlich max. 6 sensoren ist die überprüfung jedes einzelnden auf "dran sein" ja auch nicht allzu umfangreich. ich werd mich mal weiter schlau machen, was WM_TIMER so zu bieten hat.

    Gruß martin



  • Ich habe mir eben nochmal SetTimer näher angeschaut. Da könntest Du sogar für jeden Sensor eine eigene E ventProc bauen und mit eigenen Timer-Events beschicken. Das wäre auf jeden Fall auch eine Überlegung wert, wenn die Anzahl der Sensoren nicht variable ist.


Anmelden zum Antworten