Javascrpit in HTML

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    ich möchte über eine Website einen GPIO Pin meines Raspberry Pis steuern.
    Dazu nutze ich diesen HTML-Code

    [code=php]
    <html>
    <head>
    <meta name="viewport" content="width=device-width" />
    <title>Rover steuern</title>
    <script language="javascript" type="text/javascript">
    document.onkeydown = function(event) {
    if (event.keyCode == 38) {
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 4 1"));
    echo "Motor ist an";

    }
    return event.returnValue;
    }
    </script>
    </head>
    <body>
    GPIO 4 schalten:
    <form method="get" action="gpio.php">
    <input type="submit" value="Motor an" name="Motoran">
    <input type="submit" value="Motor aus" name="Motoraus">
    </form>

    <?php
    $modeon4 = trim(@shell_exec("/usr/local/bin/gpio -g mode 4 out"));
    if(isset($_GET['Motoran'])){
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 4 1"));
    echo "Motor ist an";
    }
    else if(isset($_GET['Motoraus'])){
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 4 0"));
    echo "Motor ist aus";
    }
    ?>
    </body>
    </html>
    [/php]

    Wenn ich nun über meinen PC die Seite aufrufe habe ich 2 Buttons, mit denen ich den GPIO 4 Pin ein und ausschalten kann. Soweit so gut. Aber nun möchte ich auch über einen Tastendruck auf der Tastatur den Pin ansteuern. Dazu habe ich im HEAD Bereich des Quellcodes ein Javascript geschrieben, welches aber nicht funktioniert. Rufe ich die Website auf und drücke die "Pfeil nach oben" Taste, geschieht nichts.

    Mein Ziel ist es, über diesen Tastendruck den Pin solange einzuschalten, bis ich die Taste nicht mehr drücke.

    Wo liegt bei mir der Fehler? :)

    Liebe Grüße

  • Das da ist PHP, nicht JavaScript !

    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 4 1"));

    JavaScript kann kein shell_exec auf dem Server aufrufen.

    Mit einem XmlHttpRequest kann es den Server veranlassen
    ein Script auf dem Server zu starten.

    Also ab zu Goggle und XmlHttpRequest suchen ...

  • Ich habe mal nach XmlHttpRequest gesucht bin aber nicht schlauer als vorher geworden :s

    Kannst du mir dafür eventuell ein Beispiel für mein Problem geben?

    Eventuell verstehe ich es dann ;)

  • Auf dem Server muss es natuerlich ein turn-on.php geben ...

  • Hallo,

    Danke, dein Script hat perfekt funktioniert!
    Aber ich wollte noch einen Schritt weitergehen, und zwar soll, wenn die Pfeil nach oben Taste gedrückt wird, ein .php Dokument geöffnet werden. Und wenn die Taste wieder losgelassen wird, soll sich ein anderes .php Dokument öffnen.

    Diese dienen dazu, einen GPIO Pin an, bzw, auszumachen (Output)

    Dazu habe ich deinen Skript so ergänzt:

    [code=php]

    <html>
    <head><title>Test</title>
    <script type="text/javascript">
    document.onkeydown = function( event )
    {
    console.log( event.keyCode ) ;

    if( event.keyCode == 38 )
    {
    var request = new XMLHttpRequest() ;
    request.open( "GET", "vorwaerts.php", true ) ;
    request.send( null ) ;

    return false ;
    }

    }

    document.onkeyup = function( event )
    {
    console.log( event.keyCode ) ;

    if( event.keyCode == 38 )
    {
    var request = new XMLHttpRequest() ;
    request.open( "GET", "vorwaertsstopp.php", true ) ;
    request.send( null ) ;

    return false ;
    }
    }

    </script>
    </head>
    <body>
    <p> Testseite <p>
    </body>
    </html>
    [/php]

    Leider hat das aber nicht funktioniert. Wenn ich nur den neuen Teil davon nutze (document.onkeyup [...]), und den Rest lösche, funktioniert es aber. Beide zusammen aber nicht. Wo liegt da der Fehler?

    Liebe Grüße

  • Bin zwar nicht so in der Marteria drin, aber der keyCode muss wahrscheinlich schon auf die jeweilige Taste der Tastatur angepasst werden.
    Ist ja derzeit bei beiden der gleiche, weshalb das nicht klappen wird

  • Schon klar :D
    Es ging aber darum, dass eine Datei geöffnet werden soll, wenn eine Taste gedrückt wird, und das wenn diese Taste losgelassen wird, eine andere Datei geöffnet wird.

    Oder geht das garnicht?

  • > Leider hat das aber nicht funktioniert.
    Ich hab den Code genau so in ein HTML-File eingesetzt und mit Chromium funktioniert es.

    Allerdings koennte der Autorepeat ein Problem sein. Wenn ich etwas laenger druecke,
    wird vorwarts.php haeufig aufgerufen (aber bei mir natuerlich nicht gefunden)

    - - - - -

    Script mit Autorepeat-Unterdrueckung:

    Einmal editiert, zuletzt von Tell (28. Juni 2014 um 20:28)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!