Für die programmierung eines Jalousiebausteins habe ich folgende Frage:
Die Klasse muss runter,rauf, setPos (in %) haben.
Die Laufzeit rauf,runter und Lamellenzeit rauf,runter werden in der Klasse hinterlegt.
Ausgabe ist nur UP und DOWN. Beide Boolean = false heißt Jalousie stoppen.
Nun steht die Jalousie bei 0%.
Der Befehl kommt: setPos(32%)
Nun kann ich errechnen wieviele Millisekunden ich den DOWN auf true stellen muss. Ein Timer stellt mir diesen danach wieder auf FALSE.
Somit bleibt die Jalousie bei 32% stehen.
Würde aber nun während des Fahrbefehls eine neue Position gesendet, hätte ich ein Problem mit dem Timing und neuberechnung des Ausschaltbefehls?
Oder ich lasse eine Schleife alle 50ms hochzählen und bei erreichen der gewünschten Position das FALSE senden. So wäre es maximal 49ms daneben. Jedoch finde ich das sehr unperformant.
Wie würded Ihre das lösen?
Nur einen Abschalttimer wäre mir am sympathischten, aber wie die neue Position berechnen? Müßte den Abschaltzeitpunkt ja neu definieren.
Ich würde sagen, weitere Befehle würden in eine Art Queue eingereiht werden, wenn du die resultierende Position aus mehreren Befehlen nicht berechnen und entsprechend umsetzen kannst.
Danke für den Vorschlag. Jedoch wenn die Jalousie auf 80% (entspricht von 0% aus 30sec) fahren soll und während des Fahrbefehls die Position auf 50% aktualisiert wird, soll er nicht erst auf 80% und dann auf 50% zurückfahren.
Ich bräuchte also einen Timer oder Zeitgeber, wo ich den delay entsprechend aktualisieren kann.
Habe nun Quartz getestet .. funktioniert an sich, aber wenn ich die Systemzeit ändere, kann ich die neue Laufzeit nicht ermitteln, da ich ja nach System.currentTimeMillis() ermittle und diese eben nicht passt.
Mittels executor.scheduleAtFixedRate erhalte ich die genausten Werte, aber wenn dieser läuft und er soll um 20sec verlängert werden, geht das nicht oder?
Also bei welchen Timer kann ich die delay oder periode zeit während er läuft, nachträglich anpassen?
Oder ein anderer Ansatz:
Könnte ich einen eigenen Zeitgeber schreiben? Ich brauche ja nicht die genaue Uhrzeit sondern Zeitspannen.
Wenn ich nun ein neues Projekt schreibe, wo ein executor.scheduleAtFixedRate alle 10ms eine long variable hochzählt und ich dieses Projekt in meinem Build Path hinzufüge.
Aus der Klasse könnte ich dann den long Wert immer auslesen der unabhängig der Systemzeit mein Zeitgeber ist.
Könnte das klappen und würde es das System sehr belasten? (Läuft auf einem Raspberry)