Pfeiltasten mit JavaScript abfangen und Skripte ausführen

  • Moin

    Für ein kleines Projekt möchte ich das eine auf dem RPi gehostete Webseite die Pfeiltasten abfängt und beim Drücken der Taste ein Skript ausführt und beim loslassen der Taste das Skript mit STRG+C beendet. Ich habe allerdings überhaupt kein Plan von JavaScript. Ich werde auch aus dieser Seite nicht ganz schlau: http://de.selfhtml.org/javascript/objekte/event.htm

    Kann einer mir das bitte erklären?! :danke_ATDE:

    VG 3D

  • Pfeiltasten mit JavaScript abfangen und Skripte ausführen? Schau mal ob du hier fündig wirst!

  • Erstmal vielen Dank dir.

    Wenn ich das richtig verstehe zählt das Skript wie lange die Taste gedrückt wurde und übergibt dies dann an das PHP-Skript. Das mit dem keyup/keydown event ist mir jetzt klar, aber ich benötige eine "Live-Weiterleitung" dh. die Taste wird gedrückt Skript-NR1 wird ausgeführt = Roboter fährt vorwärts, dauerhaft in einer Schleife. Taste wird losgelassen Skript-NR1 wird mit STRG+C beendet.

    Ist das so richtig oder habe ich da was falsch interprätiert?

    VG 3D

  • Ich weis zwar nicht was dein Script macht aber wenn du nur einen "Motor" über GPIO steuerst dann kannst du auch bei
    Taste gedückt -> Setze GPIO = 1
    Taste Losgelassen -> Setze GPIO = 0
    ausführen. Das spart den Umweg über ein Shellscript.

    Offizieller Schmier und Schmutzfink des Forum.
    Meine PI:

    Display Spoiler

    #1 : Pi1 - Packet Radio Digi mit TNC-PI
    #2 : Pi2 - ADSB Feeder
    #3 : Pi3 - DHCP/DNS Server für 4 VLAN
    #4 : Pi3 - Wireguard Gateway Umgezogen nach Proxmox
    #5 : Pi3 - FM Funknetz Gateway mit Shari SA818
    #6 : PI Zero W mit DMR Hotspot
    #7 : Pi4 4GB - Kiosk Browser
    #8 : Pi4 4GB - Kiosk Browser
    #9 : Pi4 8GB - Test Pi
    #10 : Pi2 - Auto CD Ripper abcde

    Dazu noch ein paar Zero und Pi1/2 die noch auf einen sinnvollen Einsatz warten.


  • Ich weis zwar nicht was dein Script macht aber wenn du nur einen "Motor" über GPIO steuerst dann kannst du auch bei
    Taste gedückt -> Setze GPIO = 1
    Taste Losgelassen -> Setze GPIO = 0
    ausführen. Das spart den Umweg über ein Shellscript.

    Und die Technik um Informationen Asynchron mit z.B. Php auszutauschen nennt sich Ajax.

    Also kannst du ein Javascript Event schreiben wenn a
    Taste gedrückt --> setzt wert fürs fahren über ein XMLHttpRequest();
    Taste Losgelassen --> hört aufzufahren wieder über XMLHttpRequest();

    ein Traum ist unerlässlich wenn man die Zukunft gestalten will

  • Es ist ein Roboterbausatz von 4Tronix. Die Anstreuerung soll auf Basis dieses Test-Skripts sein. Allerdings für jede Richtung ein eigenes Python-Skript.

    Tante EDIT:

    Hab das Skript von Clonix umgeschrieben:

    Geht das so oder ist da noch ein Fehler drin?

    VG

    Edited once, last by 3DFreaky (October 23, 2014 at 2:58 PM).

  • UPDATE:

    Ich habe nun ein Skript geschrieben, dass alle Befehle ausführt und das was er ausführen soll über "sys.stdin.read()" in der Commandline ausliest.

    Nun habe ich die Webseite von Clonix komplett geändert:

    Allerdings habe ich keinen Befehl gefunden um etwas in die Commandline zu posten, geschweige denn wie ich das STRG-D bzw. EOF-Signal an die Commandline übergeben bekomme, damit er das eingegebene ausführt.

    Kennt ihr die Befehle oder eine andere Möglichkeit um diese Funktion zu gewährleisten?!

    VG 3D

  • Allerdings habe ich keinen Befehl gefunden um etwas in die Commandline zu posten, geschweige denn wie ich das STRG-D bzw. EOF-Signal an die Commandline übergeben bekomme, damit er das eingegebene ausführt.

    Kennt ihr die Befehle oder eine andere Möglichkeit um diese Funktion zu gewährleisten?!

    VG 3D

    Das geht auch über exec.
    Du kannst das Script Hard abbrechen mittels dem KILL Befehl.

    Zum Beispiel :

    Code
    exec("sudo kill $(ps -A | grep deinscript.py | awk {'print $1'})")

    Macht was ?
    ps -A -> Listet die Prozesse
    grep deinscript.py -> filtert deinscript.py aus der Liste
    awk{'print $1'} -> liest den ersten Wert der Zeile, Trennzeichen = Leerzeichen, hier die ProzessID von deinscript.py

    $(ps -A | grep deinscript.py | awk {'print $1'})

    Liefert also die PID von myscript.py

    Der Befehl welcher exec übergeben wird ist also eigentlich z.B.
    sudo kill 12345

    Es gibt noch viele andere Wege, z.B. mit pidof die PID zu finden , und viele ein laufendes Script abzubrechen.
    Das ist nur ein Beispiel wie es gehen kann.

    Offizieller Schmier und Schmutzfink des Forum.
    Meine PI:

    Display Spoiler

    #1 : Pi1 - Packet Radio Digi mit TNC-PI
    #2 : Pi2 - ADSB Feeder
    #3 : Pi3 - DHCP/DNS Server für 4 VLAN
    #4 : Pi3 - Wireguard Gateway Umgezogen nach Proxmox
    #5 : Pi3 - FM Funknetz Gateway mit Shari SA818
    #6 : PI Zero W mit DMR Hotspot
    #7 : Pi4 4GB - Kiosk Browser
    #8 : Pi4 4GB - Kiosk Browser
    #9 : Pi4 8GB - Test Pi
    #10 : Pi2 - Auto CD Ripper abcde

    Dazu noch ein paar Zero und Pi1/2 die noch auf einen sinnvollen Einsatz warten.

    Edited once, last by Der_Imperator (October 27, 2014 at 7:47 PM).

  • hi
    Tastenkombinationen kannst Du mit && verknüfen
    [code=php]
    else if (e === 17 && e === 68 ) {strKeyCap = "Strg+d"}
    [/php]

    Gruss Clonix

    Kommentare in Scripten/Sourcecodes machen nicht nur DIR das Leben leichter ;)

  • Ich entschuldige mich an dieser Stelle für alle meine überflüssigen Fragen!
    Ich musste alles was ich mir bis jetzt gedacht habe über den Haufen werfen.

    Ich habe jetzt für jede Funktion PHP-Skripts geschrieben, die wiederum die py-Skripts über den exec()-Befehl ausführen. Die PHP Skripppts rufe ich über $.ajax() auf. Doch die html-Datei funktioniert leider nicht!

    Jemand eine Idee warum?

    VG 3D

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!