2 Befehle alle n Sekunden alternieren



  • Hi!

    Ich möchte innerhalb einer while-schleife (!!!) einen Befehl alle n Sekunden alternieren. Die Sekunden auszulesen ist dabei kein Problem.
    Ich hänge nur an der logischen Programmierung meine Vorhabens. Sicherlich gibt es hier irgendeinen gefinkelten Trick, helft mir bitte mal auf die Sprünge...

    int n = 5;
    
            if (ZeitinSekunden % n != 0)
            {
                Ruehrwerkstatus1 = Ruehrwerk1( "ein");
            }
            else
            {
                Ruehrwerkstatus1 = Ruehrwerk1( "aus");
            }
    

    Der Untestehende Code funzt auch ned, weil die while schleife mehrmals in einer Sekunde die abfrage durchläuft (kann ich leider ned ändern)...

    int n = 5;
    
            if (Zeitruehr % n == 0 && Ruehrwerkstatus1 == "aus" && einmal == 1)
            {
                Ruehrwerkstatus1 = Ruehrwerk1( "ein");
                einmal = 0;
            }
            else
            {
                einmal = 1;
            }
    
            if (Zeitruehr % n == 0 && Ruehrwerkstatus1 == "ein" && einmal == 3)
            {
                Ruehrwerkstatus1 = Ruehrwerk1( "aus");
                einmal = 2;
            }
            else
            {
                einmal = 3;
            }
    

    Thx, LeFish!



  • while(bedingung)
    {
        einschalten();
        warten();
        ausschalten();
        warten();
    }
    

    Wenn du die Sekunden auslesen kannst, kannst du dir ein warten() schreiben.



  • unsigned letzte_ruehrwerk_umschalt_zeit = 0;
    bool ruehrwerk_zustand = false; // aus
    unsigned n = 5;
    
    // ...
    
    while (blubb)
    {
        // ...
    
        unsigned t = ZeitInSekunden();
        if ((t - letzte_ruehrwerk_umschalt_zeit) >= 5)
        {
            ruehrwerk_zustand = !ruehrwerk_zustand;
            steuere_ruehrwerk(ruehrwerk_zustand);
            letzte_ruehrwerk_umschalt_zeit = t;
        }
    
        // ...
    }
    

    ZeitInSekunden muss dabei natürlich eine Monotone Realtime Clock sein, also am besten NICHT die Systemzeit sondern z.B. etwas was auf GetTickCount() (Windows) oder clock_gettime(CLOCK_MONOTONIC, ...) (POSIX) basiert.


Anmelden zum Antworten