Hi inka,
Ja, genau. Es kann ja immer nur etwas alle 100ms gemacht werden, wenn die Hauptschleife, in der die if(getStopwatchX() > 100 steht, nicht regelmäßig wieder bei der Abfrage ankommt. Hat also die Hauptschleife so viel zu tun, dass sie z.B. für einen kompletten Durchlauf 200ms braucht, dann kann die o.g. Stopwatch-Abfrage natürlich auch nur alle 200ms laufen.macht das programm wirklich ALLE 100ms etwas oder immer dann wenns mal größer als 100ms ist? Also 101/102/105 - wanns gerade abgefragt wird?
Ist die Hauptschleife schnell (das sollte sie!), dann kommt das mit den 100ms ganz gut hin. Der Ablauf ist dann in der if(getStopwatchX() Schleife:
- Stopwatch > 100 ?
- Alles, was gemacht werden muss
- Stopwatch = 0
Das bedeutet auch, dass wenn "Alles, was gemacht werden muss" etwas länger dauert, diese Zeit zum Intervall noch addiert werden muss.
Wenn du wissen willst, mit welchem Stopwatchwert du in die Abfrage gehst, dann gib den Wert der Stopwatch doch am Anfang der if(getStopwatchX() Schleife aus. Dann kannst du sehen, wie die Intervalle aussehen: writeInteger(getStopwatchX(), DEC);
Was kann man machen:
- Hauptschleife optimieren (Sleeps raus, keine UART/WiFi/LCD-Ausgaben, kein Warten auf Bedingungen ...)
- Auch in den if(getStopwatchX() Schleifen keine Verzögerungen, wenn sie NUR ZUM MESSEN dienen. Daneben kann es natürlich auch noch solche Schleifen zur Textausgabe geben,- die braucht man aber meist selten (alle 0,5 oder 1 s).
Die Ausgabe wird "unregelmäßig", weil du in der for(i = 0; i < 199; i++) Schleife die Ausgabe mit einer Stopwatch machst. Dann passiert es manchmal, dass die for-Schleife schneller ist als die 50ms der Stopwatch, dann ist die Stopwatch noch <= 50 und eine Ausgabe wird übersprungen.der code raegiert nun williger auf den druck auf die buttons, kann ich die ausgabe regelmäßiger machen?
Du must die ganze Ausgabe in die Stopwatch-Abfrage bringen und darin nicht eine for-Schleife nehmen, sondern eine Schleife mit einem globalen Zähler.
Lesezeichen