Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Multikey- / Tastenprobleme???

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 26.01.2015, 18:05    Titel: Multikey- / Tastenprobleme??? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 26.01.2015, 19:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 26.01.2015, 21:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz