Blinken oder Dauer ein erkennen

Fohnbit

Top Contributor
Hallo,

wie könnte ich am besten erkennen, ob ein boolscher Wert blinkt oder dauer ein/aus ist.

Über eine Methode wird mir der boolsche Wert "Input1" ein und aus geschaltet.
Wenn "Input1" mind. 2 Sekunden ein ist, dann ist ein Dauer ein.
Wenn "Input1" nur 1,5 Sekunden ein ist und dann abschaltet und danach wieder einschaltet ist es ein Blinken
Wenn "Input1" mind 2 Sekunden aus ist, dann ist es Dauer aus.

Wie soll ich das am besten abbilden?

Danke!
 

RalleYTN

Bekanntes Mitglied
Am besten erstellst du einen neuen Thread mit einer Schleife, wo immer der aktuelle Wert von input1 abgefragt wird.
 

Soloeco

Aktives Mitglied
Nur für mein Verständnis:
Dann muss man doch in der Schleife eine if Abfrage erstellen für jeweils einen der drei Fälle und dann ein return ausgeben oder?
 

Fohnbit

Top Contributor
Nun, ich muss ja die zeit messen, um zu erkennen, ob kurze oder lange Impule anliegen.
Scheinbar so klappt das mal:
value ist der Status des Blinkers.
Es gibt 2 Kanäle, habe ich vorhin nicht beschrieben


Java:
boolean blink1, blink2;
   private ScheduledFuture<?> ein1, aus1, ein2, aus2;
   private ScheduledExecutorService executor;
....
  executor = Executors.newSingleThreadScheduledExecutor();
...

if (value) {
            // Kanal 2 sofort abschalten wenn Kanal 1 einschaltet
            if (aus2 != null) {
                aus2.cancel(true);
                aus2 = null;
            }

            if (ein2 != null) {
                ein2.cancel(true);
                ein2 = null;
            }
            if (getOutputEingang2blinkt()) {
                updateOutputEingang2blinkt(false);
            }
            if (getOutputEingang2ein()) {
                updateOutputEingang2ein(false);
            }

            if (blink1) {
                // Blinken detektiert
                if (!getOutputEingang1blinkt()) {
                    updateOutputEingang1blinkt(true);
                }
                if (getOutputEingang1ein()) {
                    updateOutputEingang1ein(false);
                }

                blink1 = false;
            }
            // Dauer aus abschalten
            if (aus1 != null) {
                aus1.cancel(true);
                aus1 = null;
            }

            // Dauer ein starten
            ein1 = executor.schedule(new Runnable() {
                public void run() {
                    // System.out.println("Dauer ein bei Eingang 1 erkannt");
                    if (getOutputEingang1blinkt()) {
                        updateOutputEingang1blinkt(false);
                    }
                    if (!getOutputEingang1ein()) {
                        updateOutputEingang1ein(true);
                    }

                }
            }, getPropertyEinzeitblinker1() * 3, TimeUnit.MILLISECONDS);

        } else {

            // Dauer aus abschalten
            if (ein1 != null) {
                // Dauer ein läuft noch
                if (!ein1.isDone()) {
                    // System.out.println("Dauer ein läuft noch");
                    // Blinken wird vermutet
                    blink1 = true;
                }

                ein1.cancel(true);
                ein1 = null;
            }

            // Dauer aus starten wenn nach 3facher Zykluszeit kein EIN empfangen
            // wird
            aus1 = executor.schedule(new Runnable() {
                public void run() {
                    blink1 = false;
                    // System.out.println("Dauer AUS bei Eingang 1 erkannt");
                    if (getOutputEingang1blinkt()) {
                        updateOutputEingang1blinkt(false);
                    }
                    if (getOutputEingang1ein()) {
                        updateOutputEingang1ein(false);
                    }
                }
            }, getPropertyEinzeitblinker1() * 3, TimeUnit.MILLISECONDS);

        }
 

Tobse

Top Contributor
Wieso denn um alles in der Welt ein neuer Thread? Wenn der Wert nur über die Methode gesetzt werden kann, bau doch den code einfach in die Methode:

Zusätzlich zum wert selber speicherst du dir noch den Zeitpunkt der letzten Änderung. Wenn jetzt abgefragt wird, welchen Status der Wert hat (Dauer Ein/Aus oder blinkened) musst nur nur prüfen, ob der Zeitpunkt der letzten Änderung weniger wie 2 Sekunden zurück liegt.

Java:
import java.util.Date;

class SomeClass
{
    private boolean value = false;
    private Date valueLastChange = new Date();

    public void setValue(boolean v)
    {
        if (v != value)
        {
            value = v;
            valueLastChange = new Date();
        }
    }
   
    /**
     * Returns true if value is blinking, false if its value was constant for more than 2 seconds.
     */
    public boolean isValueBlinking()
    {
        return (new Date().getTime()) - valueLastChange.getTime() >= 2000;
    }
}
 

Fohnbit

Top Contributor
Interessante Idee, jedoch muss ich ja das Melden von Dauer ein/aus Verzögern, da ich beim Signal ein noch nicht weiß, ob es blinkt.

Außerdem kann es passieren, das es blinkt, aber dann auf Dauer ein übergeht.
Die Methode würde nicht mehr getriggert werden.

Also muss ich zuerst annehmen das es ein Dauer ein/aus ist ... diesen in einen Timer legen, der 3 Sekunden verzögert ausgegeben wird.
Falls es doch ein Blinken ist, muss ich diese Timer wieder canceln und Blinken melden, oder?
 

Fohnbit

Top Contributor
So würde es klappen:
a. Es wird die 3-fache Blinkfrequenz gewartet, ob ein Dauer ein/aus gemeldet wird
b. Es werden 2 Blinkzyklen benötigt, um das Blinken zu melden. Es könnte ja sein das einmal kurz ein/aus geschaltet wird. Dann würder er blinken und danach den Dauer ein/aus melden

Java:
    private boolean value = false;
    private Date valueLastChange = new Date();
    private int blinkCounter = 0;

    public void setValue(boolean v) {
        if (v != value) {
            value = v;
            valueLastChange = new Date();
        }
    }

    /**
     * Returns true if value is blinking, false if its value was constant for
     * more than 2 seconds.
     */
    public boolean isValueBlinking() {
        return (new Date().getTime()) - valueLastChange.getTime() >= getPropertyEinzeitblinker1();
    }

    @Override
    public void onEingang1(boolean value) {
        if (value) {
            // Austimer abbrechen
            if (aus1 != null) {
                aus1.cancel(true);
                aus1 = null;
            }

            // Dauer ein Timer starten
            ein1 = executor.schedule(new Runnable() {
                public void run() {
                    blinkCounter = 0;
                    if (getOutputEingang1blinkt()) {
                        updateOutputEingang1blinkt(false);
                    }
                    if (!getOutputEingang1ein()) {
                        updateOutputEingang1ein(true);
                    }

                }
            }, getPropertyEinzeitblinker1() * 3, TimeUnit.MILLISECONDS);

        }

        if (!value) {
            // Ein Timer abbrechen
            if (ein1 != null) {
                ein1.cancel(true);
                ein1 = null;
            }

            // Dauer aus Timer starten
            aus1 = executor.schedule(new Runnable() {
                public void run() {
                    blinkCounter = 0;
                    if (getOutputEingang1blinkt()) {
                        updateOutputEingang1blinkt(false);
                    }
                    if (getOutputEingang1ein()) {
                        updateOutputEingang1ein(false);
                    }
                }
            }, getPropertyEinzeitblinker1() * 3, TimeUnit.MILLISECONDS);

        }

        if (!isValueBlinking()) {
            blinkCounter += 1;
if(blinkCounter > 10){
blinkCounter = 2;
}
            if (!getOutputEingang1blinkt() && blinkCounter > 1) {
                updateOutputEingang1blinkt(true);
            }
            if (getOutputEingang1ein() && blinkCounter > 1) {
                updateOutputEingang1ein(false);
            }
        }
        setValue(value);
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Bild eine bestimmte Anzahl blinken lassen Java Basics - Anfänger-Themen 3
S Double Buffering blinken Java Basics - Anfänger-Themen 8
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
X BufferedWriter Dauer in ProgressBar ausgeben? Java Basics - Anfänger-Themen 2
S Dauer eines Events anhandUnterschied berechnen? Java Basics - Anfänger-Themen 3
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
S Abfrage mit dauer Programmlauf-dauer Java Basics - Anfänger-Themen 6
A Dauer einer Datenbankspeicherung Java Basics - Anfänger-Themen 5
S Dauer --> Millisekunden in Year:Day:Hour:Minute:Second Java Basics - Anfänger-Themen 7
W Dauer einer Audio-Datei Java Basics - Anfänger-Themen 2
L Dauer anzeigen Java Basics - Anfänger-Themen 4
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
B Zusammenhängende Blöcke bei x-gewinnt erkennen? Java Basics - Anfänger-Themen 14
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
1 Wie dieses Muster am einfachsten erkennen? Java Basics - Anfänger-Themen 32
Yasemin bahar Muster erkennen Java Basics - Anfänger-Themen 13
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N palindrom erkennen Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
P Eigenschaft eines imperativen Algo (Pseudocode) sofort erkennen Java Basics - Anfänger-Themen 1
G Verlassen einer ComboBox erkennen Java Basics - Anfänger-Themen 16
S Java Großbuchstabe erkennen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
B Unterschiede in einer Liste erkennen Java Basics - Anfänger-Themen 1
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
M Input/Output Zeilenumbrüche erkennen und beibehalten Java Basics - Anfänger-Themen 4
X XML-Eintrag an Attribute erkennen Java Basics - Anfänger-Themen 2
N Erkennen ob Linkshänder Maus Java Basics - Anfänger-Themen 4
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
B Tastatureingabe erkennen Java Basics - Anfänger-Themen 8
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
F Linien und Kurven erkennen Java Basics - Anfänger-Themen 2
T Richtigen Wert erkennen Java Basics - Anfänger-Themen 9
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
S Laufzeitfehler erkennen Java Basics - Anfänger-Themen 3
T Erste Schritte Methoden anwenden und erkennen Java Basics - Anfänger-Themen 5
D Erste Schritte Array erkennen Java Basics - Anfänger-Themen 4
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
F Attribute von Feldinhalten erkennen Java Basics - Anfänger-Themen 6
N Erste Schritte Doppelwerte erkennen Java Basics - Anfänger-Themen 5
H Schachbrett erkennen Java Basics - Anfänger-Themen 19
T Erste Schritte Leerzeile in JAVA erkennen /übergehen Java Basics - Anfänger-Themen 9
S Erkennen ob Zahl durch 500Teilbar ist Java Basics - Anfänger-Themen 21
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
M Betriebssystem erkennen? Java Basics - Anfänger-Themen 12
lumo Collections Array - erkennen von positionsänderungen Java Basics - Anfänger-Themen 5
M Muster erkennen. Idee: Fassade. Java Basics - Anfänger-Themen 3
M Java-Prog soll Texte innerhalb Bildern erkennen Java Basics - Anfänger-Themen 2
S Leere Datei erkennen Java Basics - Anfänger-Themen 5
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
Kukulkan Java-Version (ME, SE) erkennen und darauf reagieren? Java Basics - Anfänger-Themen 35
E Position erkennen und überlappungen feststellen Java Basics - Anfänger-Themen 4
3 Leerzeichen erkennen Java Basics - Anfänger-Themen 3
A Gruppen von Namen erkennen Java Basics - Anfänger-Themen 21
M In Router einloggen und PCs im Netzwerk erkennen Java Basics - Anfänger-Themen 18
M ziffer in zahl erkennen mit boolean Java Basics - Anfänger-Themen 12
D Zahl erkennen Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
S Sonderzeichen in einem String erkennen Java Basics - Anfänger-Themen 20
S Filelock erkennen Java Basics - Anfänger-Themen 6
A Angeschlossenes Gerät am Com Port erkennen Java Basics - Anfänger-Themen 4
L Zeilenwechselsequenz erkennen aus der Datei heraus Java Basics - Anfänger-Themen 2
S Erkennen der Eingabe Java Basics - Anfänger-Themen 13
G eine straße im kartenspiel erkennen (algorithmus) Java Basics - Anfänger-Themen 4
G Bildinformationan auslesen - OCR - Zahlen erkennen Java Basics - Anfänger-Themen 10
B Properties erkennen, auslesen Java Basics - Anfänger-Themen 7
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
kulturfenster Teilstring erkennen Java Basics - Anfänger-Themen 5
L Laufwerksauswahl / Laufwerke erkennen Java Basics - Anfänger-Themen 3
B Threadende erkennen Java Basics - Anfänger-Themen 6
E Klassen erkennen in einer Aufgabenstellung Java Basics - Anfänger-Themen 6
L path einlesen und erkennen ob es für windows oder linux ist Java Basics - Anfänger-Themen 8
H Zeilenanzahl eines Strings erkennen Java Basics - Anfänger-Themen 2
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
C Erkennen einer gedrückten Taste Java Basics - Anfänger-Themen 6
S CD/DVD-Laufwerke erkennen mit Java Java Basics - Anfänger-Themen 3
R erkennen von Wortende Java Basics - Anfänger-Themen 5
N Veränderungen in JTextArea erkennen Java Basics - Anfänger-Themen 5
K Wortpaare in Texten erkennen Java Basics - Anfänger-Themen 8
C Japanische Zeichen erkennen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben