 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 26.01.2015, 18:05 Titel: Multikey- / Tastenprobleme??? |
|
|
Ich stehe seit Tagen vor einem kleinen Problem, das ich irgendwie nicht lösen kann?
Ich versende UDP-Pakete mit der TSNE-Bibliothek von einem Rechner (PC A) zum anderen (PC B). Die beiden Rechner sind mit einem Internetkabel direkt verbunden. Can-Bus wird mit verwendet.
PC B wartet auf Befehle in Form von Bytes und führt dann eine Funktion aus! Das ganze klappt so weit ohne Probleme!
Jedoch ist die Funktion, keine Dauerfunktion, sondern eine Momentfunktion für 1-2 Sekunden.
Das heißt: Ich drücke auf eine bestimmte Taste; Befehl wird an den PC B gesendet; Funktion wird ausgeführt
Die Taste soll den Befehl erst wieder an den PC B senden, sobald die Taste erneut gedrückt wird! Ich muss also die Taste loslassen und nochmals drücken.
Das Problem ist aber, dass ich die Taste danach 2x drücken muss, damit die Funktion auf dem PC B erneut ausgeführt wird. Anscheinend wird nichts gesendet?
Ich habe es schon mit Tastaturpuffer leeren versucht, aber ohne Erfolg!
Was kann ich machen, dass die Taste nicht 2x sondern nur 1x gedrückt werden muss, um den Befehl an den PC B zu schicken?
Code: | ' Funktion 10 - linke Shifttaste + 0
IF MULTIKEY(&h0B) AND MULTIKEY(&h2A) AND Tastensperre(10) = 0 AND Momentfunktion(10) <> 0 THEN
Tastensperre(10) = 1 ' Taste sperren wenn man drauf drückt
IF Funktionen(10) >= &h0A00 THEN Funktionen(10) += 1
IF Funktionen(10) > &h0A01 THEN Funktionen(10) = &h0A00
i = 10
KOMMANDO ' Kommando definieren und String zusammenstellen der letztendlich gesendet wird!
SENDEN ' Datenpaket senden - In den beiden Unterprogramm ist kein Fehler vorhanden! Das habe ich überprüft!
' Funktion sofort wieder deaktivieren - Momentfunktion
IF SGN(Momentfunktion(10)) = -1 THEN
SLEEP 200, 1 ' etwas warten, wegen der Grafik??? Warum funktioniert nicht SLEEP 200 - ohne dem , 1???
' Grafik wird auf dem PC B angezeigt bzw. simuliert! Funktioniert nur wenn ein solches Sleep 200, 1 wie oben dabei ist.
Funktionen(10) = &h0A00
i = 10
KOMMANDO ' Kommando definieren und String zusammenstellen der letztendlich gesendet wird!
SENDEN ' Datenpaket senden - In den beiden Unterprogramm ist kein Fehler vorhanden! Das habe ich überprüft!
END IF
END IF
IF MULTIKEY(&h0B) = 0 OR MULTIKEY(&h2A) = 0 THEN Tastensperre(10) = 0 ' Taste entsperren, wenn diese losgelassen wurde |
Die Tastensperre müsste normalerweise korrekt funktionieren. Habe ich getestet und keinen Fehler festgestellt.
Aber warum sendet der erst nach einem zweimaligen Tastendruck wieder?
Tastaturpuffer leeren _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.01.2015, 19:52 Titel: |
|
|
Da es ja an den Unterprogrammen, die in der Schleife verwendet werden, nicht liegen kann, habe ich das Problem auf den MULTIKEY-Teil reduziert.
Code: | DIM AS INTEGER Tastensperre(10)
DO
' Funktion 10 - linke Shifttaste + 0
IF MULTIKEY(&h0B) AND MULTIKEY(&h2A) AND Tastensperre(10) = 0 THEN
Tastensperre(10) = 1 ' Taste sperren wenn man drauf drückt
PRINT "gedrueckt"
END IF
IF MULTIKEY(&h0B) = 0 OR MULTIKEY(&h2A) = 0 THEN
IF Tastensperre(10) = 1 THEN PRINT "losgelassen"
Tastensperre(10) = 0 ' Taste entsperren, wenn diese losgelassen wurde
END IF
LOOP UNTIL MULTIKEY(1) ' ESC zum beenden |
Funktioniert bei mir einwandfrei. Was 'Momentfunktion(10)' macht, weiß ich ja nicht; wenn es an nichts innterhalb der IF-Blöcke liegt, wird es vermutlich an dieser Momentfunktin liegen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 26.01.2015, 21:33 Titel: |
|
|
Habe das Problem schon verifizieren können!
Jetzt muss ich bloß noch schauen, dass es funktioniert!
Die Laufvariable i war eins der Probleme.
An anderer Stelle im Quellcode habe ich ein i = 4 drin! Klar, dass das dann nicht funktionieren kann. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|