Hilfe bei _Ispressed einzelne und auch mehrere Tasten gedrückt // Motorsteuerung

  • Hallo zusammen,

    bin gerade dabei ein kleines Script für eine Motorsteuerung (Servos) zu erstellen.
    Läuft auch ganz gut, aber an einer Stelle komme ich nicht weiter und hoffe auf eurer Hilfe.

    Ganz einfach wie in einem Spiel.

    Taste "w" gedrückt / gedrückt halten Motor A läuft vorwärts
    Taste "s" gedrückt / gedrückt halten Motor A läuft rückwärts

    Taste "a" gedrückt / gedrückt halten Motor B läuft vorwärts (links)

    Taste "d" gedrückt / gedrückt halten Motor B läuft rückwärts (rechts)

    soweit so gut und geht.

    Nun soll wenn ich "w" gedrückt halte und zusätzlich z.B. "a" drücke Motor A weiter laufen und dazu Motor B.

    Im umgekehrten Fall wenn ich beide gedrückt halt und eine loslasse soll die gedrückte Funktion weiterlaufen.
    In alle erdenklichen Kombination natürlich, nur hier komme ich nicht weiter.

    Im Voraus besten Dank

    Michael

  • Hallo,

    gerne.

    Nehme nur mal das wichtigste, Steuerbefehle, IPs und die GUI sind ja eher uninteressant....

    Wie gesagt die erste 4 Befehle w s a d gehen .....

    Nur wenn "wa" drücke läuft nur Motor A, wie wenn ich nur "w" drücken würde , das Selbe bei "ws" "da" und "ds".

    Michael

  • Gibt bestimmt elegantere Lösungen aber guck mal ob dir das weiterhilft .

  • Floops

    In der Hilfe zu _IsPressed steht: Falls diese Funktion wiederholt aufgerufen wird, sollte die Datei 'user32.dll' geöffnet werden und durch ein Handle übergeben werden.

    Also besser so: _IsPressed(57, $vDll)

    Michael_Lachmann

    Ich habe dir dazu auch mal eine kleines Script erstellt...

    Example

    Einmal editiert, zuletzt von Bitnugger (13. Januar 2018 um 07:14)

  • Guten Morgen,

    Floops Danke, habe den ersten "Fehler" auch gefunden.... Es ging einfach zu schnell, mein Script konnte es zeitlich nicht erfassen, dass 2 Tasten gedrückt waren. unten das modifizierte Script.

    Lief soweit ganz gut aber beim Wechsel ist es ein wenig hakelig gewesen, könnte aber damit leben.

    Beim weiteren suchen bin ich dann auch auf _WinAPI_GetKeyboardState bzw. _WinAPI_GetKeyState gestoßen, und damit komme ich zu Dir

    Bitnugger WOW DANKE, gleich mit schicker GUI, komme allerdings am WE nicht zum testen, aber anhand deines Scriptes habe ich eine Menge lernen können, manche Dinge erkenne ich zwar noch nicht,

    DANKE!!!!!!!

    MIchael

    PS.S

    Ich bin mir jetzt nicht ganz sicher ob das rübergekommen ist, vereinfacht gesagt.

    Ich drücke Taste "A" 0> ein Motor läuft Befehl wird gesendet

    solange ich "A" gedrückt halte passiert nichts, erst beim loslassen wird ein "STOP" gesendet.

    • Offizieller Beitrag

    Ich bin mir jetzt nicht ganz sicher ob das rübergekommen ist, vereinfacht gesagt.

    Ich drücke Taste "A" 0> ein Motor läuft Befehl wird gesendet

    solange ich "A" gedrückt halte passiert nichts, erst beim loslassen wird ein "STOP" gesendet.

    Du möchtest also die Events Key-Down und Key-Up einzeln für bestimmte Tasten erfassen. Das ist machbar, ich werde dir mal ein kleines Bsp. erstellen. Kann sich etwas hinziehen, hab heute einen vollen Tag.

    • Offizieller Beitrag

    Naja, so schwer ist das eigentlich nicht!

    Man benötigt nur etwas Logik, um die Tasten den Motoren zuzuordnen. Und solange es nur um AN/AUS bei den Motoren geht, ist die Logik dafür recht simpel ("1" = Motor vorwärts, "0" = Stop, "-1" = Motor rückwärts):

    Hier wird zusätzlich ausgeschlossen, dass ein Motor nicht gleichzeitig vor- und rückwärts drehen kann. Also ein drücken von "A" und "D" führt zu einer "0" (Stillstand) des Motors.

  • Hm... durch das Sleep pausiert das Script 20 ms lang... wüsste aber ich nicht, was es sonst noch für einen Sinn hat. ;)

    Hier mal meine Version mit _IsPressed... die ich aber nur benutzen würde, wenn man mir eine Pistole an die Stirn hält. 8o

    IsPressed
  • Hallo euch allen,

    also ich hab mir gestern die Mühe gemacht, alle, wirklich alle Vorschläge zu testen. Ich bin dann zu dem Ergebnis gekommen, dass die Umsetzung von Oscar die einfachste und zuverlässigste ist.
    Ich musste zwar auch hier manches noch ändern, aber es läuft super.........

    Danke an ALLE die so tolle Ideen eingebracht haben auf die ich NIE gekommen wäre.
    (Auch jetzt ist mir manches noch etwas fremd, aber egal es läuft :D )

    Michael