pressed button

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

    Ich bräuchte mal Hilfe/Ideen für mein Vorhaben. z.Z. schreibe ich eine Web-App, welche u.a. zwei SG90 Servos steuert. Dazu habe ich im Template Buttons angelegt:

    PHP
    <form method="get">
        <button type="submit" name="right" value=1>RECHTS</button>
    </form>
    [/php]
    und in der Python-App greife ich den Wert des Buttons mit [code]request.GET.get('left')

    ab und verwerte diesen. So weit so schlecht, denn bis jetzt muss ich, wenn der Servo zB. um 80 Stufen gedreht werden soll, wie ein Besessener in die Maus reinhacken. Meine Frage nun:

    Gibt es so etwas wie '''pressed button'''; also das beim gedrückt halten der Maustaste solange Requests gesendet Gedrückthalten , bis ich wieder loslasse?

    Um Javascript, jQuery und Konsorten habe ich bis jetzt immer einen Bogen gemacht wie meigrafd um PEP 8 ;)

    mfg

  • Ohne Javascript: Keine Chance! Geht einfach nicht weil HTML statisch ist. Du kannst EINEN klick machen und daraufhin wird EINE neue Seite geladen (und da kannst du per php o.Ä. machen was du willst)
    Was du machen könntest ist ein Eingabefeld in das du den gewünschten Wert einträgst (oder slider etc...) und dann entsprechend dem Wert deinen Servo bewegst.

  • Hallo

    Hab mich nun ein wenig mit jQuery auseinander gesetzt (Neuland für mich). Folgendes hab ich nun mal eingebaut - nur die Funktionsweise kapier ich noch nicht:

    - Ist strStat und strID (data: { strID:'pilight', strState:isChecked }) eine neuegesetzte Variable?
    - Was macht/bedeutet das '?' in Zeile 4?

    Wenn ich einen Button analog zum obigen Beispiel erstellen will, welcher den Wert '1' hat bzw liefern soll, wie ginge ich da vor?


    EDIT:
    Jetzt fehlt mir nur noch die Idee/Umsetzung für den 'pressed hold' Button, so dass mir das Skript beim Gedrückthalten automatisch den Wert sendet. Wenn jemand eine Idee/Link hat, dann bitte sagen ;)

    mfg

  • Nach langem Suchen, Lesen und Probieren als .js Noob habe ich es nun hinbekommen für einen Button. Wie gehe ich nun analog für die restlichen Buttons (right, up und down) vor bzw wie binde ich die ein? Bis jetzt habe ich nur eine unorthodoxe Weise in Verwendung, nämlich für jeden Button eine eigene Funktion. Dies geht aber sicherlich einfacher und mit weniger Code...

    [code=php]$(document).ready(function() {

    var pressed = false;
    $('#left').on("mousedown", function() {
    pressed = true;
    SendDataIfPressed();
    });

    $('#left').on("mouseup", function() {
    pressed = false;
    });

    function SendDataIfPressed() {
    if (pressed) {
    var left = 1
    $.ajax({
    url: '/stream',
    type: 'POST',
    data: {
    left: left
    },
    complete: function() {
    setTimeout(SendDataIfPressed, 50);
    }
    });
    }
    }
    });[/php]

    • Offizieller Beitrag

    vielleicht denk ich jetzt auch nur falsch

    Code
    function SendDataIfPressed(direction) {
        #blabla
                        data: {
                        left: direction
                    },
       #blabla

    und der aufruf dann per

    Code
    $('#left').on("mousedown", function() {
            pressed = true;
            SendDataIfPressed("left");

    . ich hoffe der sinn ist erkennbar :denker:

  • Moin,

    hab mal wieder kurz Zeit, mich darum zu kümmern. Anstelle von vier Funktionen habe ich eine, die SendDataIfPressed(direction). In dieser Funktion rufe ich die jquery.ajax Methode auf, welche die Daten sendet. Und genau dort liegt nun mein Problem bzw Unwissenheit. Gibt es innerhalb dieser Methode auch so was wie ein ''if / elif / else" Statement oder wie sage ich der Methode, dass nur ein Wert gesendet wird anstelle von

    Code
    data: {
        left: direction,
    //    rigth: direction,
    //    up: direction,
    //    down: direction
    },

    EDIT:
    Mit

    wird nun direction als "left", "up", etc. an den Server gesendet. Den Rest erledige ich in meiner Python-App.


    EDIT II:
    Funktioniert doch nicht bzw SendDataIfPressed sendet 1x den direction Wert und anschliessend None.

    Anbei das komplette Skript:

    Spoiler anzeigen
  • Hi, ist dein Problem noch akut?

    hab da mal was für die CursorSteuertasten gebastelt.
    Vielleicht kannste das ja umbauen

    HTML, jquery usw

    Spoiler anzeigen


    [code=php]
    <html>
    <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript">

    var iCntKeyDn = 0;
    var strKeyCap = "Nicht unterstuetze Taste";

    $( document ).ready(function(){

    $( window ).keydown(function(event){
    $('#counter').html(++iCntKeyDn);
    $('#actEvent').html(fnArrowKey(event.keyCode));

    });

    $( window ).keyup(function(event){
    $('#actEvent').html(fnArrowKey(event.keyCode));
    fnStartPrg(fnArrowKey(event.keyCode),iCntKeyDn);
    iCntKeyDn = 0;

    });
    });

    function fnArrowKey(e) {
    if (e === 37) {strKeyCap = "Links"}
    else if (e === 38) {strKeyCap = "Oben"}
    else if (e === 39) {strKeyCap = "Rechts"}
    else if (e === 40) {strKeyCap = "Unten"}
    else {strKeyCap = "Nicht unterstuetze Taste"}
    return (strKeyCap);
    }

    function fnStartPrg(strKey, iCnt){
    $.ajax({
    type: "POST",
    url: "machwas.php",
    data: {richtung: strKey, anzahl: iCnt}
    });
    }

    </script>
    </head>
    <body>
    <div>
    <span id="actEvent"></span><br><span id="counter"></span>
    </div>
    </body>
    </html>[/php]


    und die dazugehörige PHP-Datei (selbsterklärend darum keine Kommis)

    Spoiler anzeigen


    [code=php]
    <?php
    if(isset($_POST['anzahl'])){
    // Windows Kram
    // $WshShell = new COM("WScript.Shell");
    // $oExec = 0;
    for($a = 0; $a < (int)$_POST['anzahl']; $a++)
    {
    switch ($_POST['richtung']) {
    case "Links":
    // Windows Kram
    //$oExec = $WshShell->Run("mspaint.exe", 3, false);
    // ToDo
    break;
    case "Rechts":
    // ToDo
    break;
    case "Oben":
    // ToDo
    break;
    case "Unten":
    // ToDo
    break;
    }

    }
    }
    ?>
    [/php]

    Das ist nicht schön, aber geht :D (zumindest auf der Windows-Mühle)

    Gruß Clonix

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

    Einmal editiert, zuletzt von Clonix (13. September 2014 um 07:23)

Jetzt mitmachen!

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