Pi4J / pi4j-example-components

Apache License 2.0
9 stars 6 forks source link

created ledbutton #35

Closed Mikscho closed 2 years ago

Mikscho commented 2 years ago

ledbutton to dev-arcade

Mikscho commented 2 years ago

@DieterHolz Ich habe mit folgendem Code getestet: final var button = new SimpleButton(pi4j, 26, Boolean.FALSE);

// Register event handlers to print a message when pressed (onDown) and depressed (onUp) button.onDown(() -> System.out.println("Pressing the button")); button.whilePressed(() -> System.out.println("pressing")); button.onUp(() -> System.out.println("Stopped pressing."));

// Wait for 15 seconds while handling events before exiting System.out.println("Press the button to see it in action!"); for (int i = 0; i < 15; i++){ System.out.println("So many Seconds: " + i); sleep(1000); } //sleep(15000);

// Unregister all event handlers to exit this application in a clean way button.onDown(null); button.onUp(null); button.whilePressed(null);

Der Code funktioniert, auch wenn der Button mehrere Sekunden lang gedrückt ist, so kommen die Meldungen des Main-Threads.

RetoStutz commented 2 years ago

@Mikscho @DieterHolz ist whilepressed überhaupt eine benötigte Funktion? Ein Event Trigger auf einen statischen Zustand?

DieterHolz commented 2 years ago

Ich bin ein wenig verunsichert wie das Ganze zusammenspielt (in meiner Vorstellung dürfte der Beispielcode nicht funktionieren).

Deshalb nur ein paar Gedanken: Wir sind ja im "Arcade-Modus". Hier ist das vorgeschlagene Vorgehen, dass man das Game erst mal auf dem Laptop entwickelt und mit den Keyboard-Tasten spielbar macht. Während eine Keyboard-Taste gedrückt ist, wird der Keyevent periodisch getriggert.

Analog sollte es beim Joystick sein. Idealerweise sollte man die "Trigger-Frequenz" einstellen können (und in etwa so wie die Trigger-Frequenz eines Keyboard-Events)

Bisher hätte ich gedacht, dass dafür eine "whileDone"-Methode nötig ist und diese in einem separaten Thread laufen muss. Aber das ist wohl falsch.