Langer Tastendruck bei Fernbedienung

Fohnbit

Top Contributor
Hallo Gemeinde!

Mir fehlt etwas der passende Ansatz um folgendes zu lösen:
Ich bekomme per UDP die Info, welche Taste auf einer Funk Fernbedienung gedrückt wurde.
(Ein RF Umsetzer sendet mir per UDP an meine Software)

Es gibt 52 Tasten mit je einen eigenen 3 stelligen Byte Code:
Taste 1: 0xe20d00
Taste 2: 0xe30e00
...

Wenn man auf der Taste oben bleibt, kommen die Infos zyklisch im Abstand von 400ms.

Nun soll für jedes Taste der Text ausgegeben werden, welche Taste gedrückt wurde und ob es ein kurzer oder langer Tastendruck war.
Der Kurze kann natürlich erst nach 800ms erkannt werden, da ein weiteres Telegramm ausbleibt.

Wie soll ich aber das in Java umsetzen. Ich müßte eine Info im Code halten, wenn der erste Befehl kommt.
Dann mind. 800ms warten und wenn der Code nicht nochmal kommt, ist es ein kurzer Tastendruck, ansonsten ein langer.

Hab schon überlegt einen Timer beim ersten Eintreffen zu starten, der nach 800ms den Text kurz ausgibt. Falls das Telegramm nochmal kommt und schon ein Timer für dieses Telegramm existiert, ist es ein langer und der 1. Timer muss abgebrochen werden und der Text für einen langen Tastendruck muss ausgeben werden.

Was ist die beste Strategie? Das ganze soll auf einem Rasp laufen. Also wenig Performance.

Danke!
 

Tobse

Top Contributor
Also wenn du das richtig umsetzen willst machst du eine "Treiberklasse" für das UDP-Socket. Diese schikt dann events raus, ala:
Java:
enum RemoteButton
{
    TASTE_1 (0xe20d00),
    TASTE_AN_AUS (0xe30e00);
    
    private int c;

    RemoteButton(int code)
    {
        c = code;
    }
    getCode()
    {
        return c;
    }
}

interface RemoteButtonListener
{
    public void buttonPressed(RemoteButton b);
    public void buttonReleased(RemoteButton b, int millisPressed);
}

Die o.g. Treiberklasse kannst du, wie du schon selbst gesagt hast, am Sinnvollsten mit Timern realisieren.

[EDIT]Wie du auch schon gesagt hast, das loslassen einer Taste wird im schlimmsten Fall eben mit 400ms Verzögerung bemerkt. Der Paremter millisPressed ist dann auch nur auf 400ms genau.[/EDIT]
 
Zuletzt bearbeitet:

Fohnbit

Top Contributor
Hallo!

Danke, so werde ich es machen.
Aber kann mir noch jemand einen Tipp wegen des Timer geben?

Java:
timer = new Timer(0, new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					buttonReleased(remoteButton);
				}
			});
			timer.setRepeats(false);
			timer.setDelay(500);
			timer.start();

Ich starte den Timer und nach 500Millisekunden wird der Befehl zur Loslassen der Taste ausgegeben (sofern kein neuer innerhalb der 500ms kommt)

Aber wie kann ich bei einem laufenden Timer das delay erhöhen bzw. diesen auf 0 setzen?
Oder soll ich einen laufenden Timer stoppen und einen neuen erstellen, anstelle einen laufenden zu beeinflussen?

Danke!
 

Tobse

Top Contributor
Für jedes Tasten-Signal das reinkommt schaust du, ob da schon einer Timer für läuft. Wenn ja, teilst du das dem entsprechenden TimerTask mit. Wenn nein löst dud as buttonPressed Event aus. Dann startest du einen neuen Timer (mit TimerTask), der alle 400ms neu aufgerufen wird. Dieser TimerTask prüft dann bei jedem durchlauf ob er während der letzten 400ms über ein neues Signal informiert wurde. Wenn nein löst er das buttonReleased Event aus und beendet sich.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Gui updaten während langer Methode Java Basics - Anfänger-Themen 2
A Methoden Langer Text, kurze Frage Java Basics - Anfänger-Themen 10
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
S Langer Text in JOptionPane? Java Basics - Anfänger-Themen 3
J Wie kann ich Images per Tastendruck anzeigen/einfügen? Java Basics - Anfänger-Themen 3
B Tastendruck zurücksetzen Java Basics - Anfänger-Themen 4
T Tastendruck simulieren Java Basics - Anfänger-Themen 13
S Beliebigen Tastendruck "einlesen" (ohne Konsole) Java Basics - Anfänger-Themen 3
TheSorm java Schleife beenden per Tastendruck Java Basics - Anfänger-Themen 10
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
X Erste Schritte Spielstart per Tastendruck Java Basics - Anfänger-Themen 10
U Thread reagiert nicht sofort auf Tastendruck Java Basics - Anfänger-Themen 14
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
Draculajr Tastendruck abwarten Java Basics - Anfänger-Themen 5
H Tastendruck simulieren | SendKeys Java Basics - Anfänger-Themen 12
S Schleife per Tastendruck abbrechen Java Basics - Anfänger-Themen 7
R Aktion bei Tastendruck Java Basics - Anfänger-Themen 5
E Programmsteuerung per Tastendruck Java Basics - Anfänger-Themen 4
G Tastendruck Java Basics - Anfänger-Themen 13
S Tastendruck abweisen Java Basics - Anfänger-Themen 7
T reaktion auf Tastendruck Java Basics - Anfänger-Themen 2
M Tastendruck. Java Basics - Anfänger-Themen 2
P String zu Date bei jedem Tastendruck parsen Java Basics - Anfänger-Themen 3
J Fernbedienung umprogrammieren? MEDION! Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben