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:

Joystick-Abfrage ist zu langsam!

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 11.01.2005, 20:19    Titel: Joystick-Abfrage ist zu langsam! Antworten mit Zitat

Hi Leute!

Ich schreibe gerade an einem Spiel, das durch Tastatur, Maus und Joystick bedienbar sein soll.

Ich verwende die Befehle, STICK() und STRIG(), die meines Wissens nach die Einzigen Joystick-Befehle sind.
Gibt es evtl. eine schnellere Methode, etwa mit INP/OUT oder PEEK()/POKE ?

Für Antworten bedanke ich mich schon mal im Voraus!

Ciao!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 12.01.2005, 00:35    Titel: Antworten mit Zitat

Hallo

Die Adresse des Joystickport-Registers ist dezimal 513 bzw. hex. 201. Da die Auswertung allerdings etwas umständlich ist, bezweifle ich, dass es damit schneller geht. Leider habe ich meinen Rechner mit Midieingang ausgeliehen und kann es nicht testen.

Der Port funktioniert intern so: Wird in das Register mit

OUT 513, 0

irgendwas geschrieben (es geht dabei nur um den Schreibzugriff - was geschrieben wird ist egal und köntte ausser 0 auch etwas anderes sein), dann werden im rechner vier Kondensatoren entladen und die dazugehörigen Steuerbits auf 1 gesetzt. Die Hebelstellung des Joysticks wird mit Potentiometern erfasst, über die diese Kondensatoren aufgeladen werden. Haben sie eine bestimmte Spannung erreicht, wird das passende Bit des Registers auf 0 gesetzt. Du musst also mit einer Schleife die Zeit messen, die zwischen dem Schreibzugriff und dem Wechsel von 1 auf 0 des passenden Bits vergeht.

Neben diesen vier quasi-analogen Eingängen auf Bit 0-3 im Register, gibt es noch vier digitale, z.B für den Feuerknopf. Deren Zustand kannst du mit Bit 4-7 abfragen. EIn einfaches Programm zum auslesen könnte so aussehen:

Code:
CLS
FOR bit = 0 TO 7
bitwert(bit) = 2 ^ bit
NEXT

DO
 LOCATE 1, 1

 FOR poti = 0 TO 3
  stellung(poti) = 0
  OUT 513, 0
  DO
   stellung(poti) = stellung(poti) + 1
  LOOP UNTIL (INP(513) AND bitwert(poti)) = 0 OR stellung(poti) = 10000
  PRINT "Poti"; poti; ": "; stellung(poti)
 NEXT


 PRINT

 FOR taste = 0 TO 3
  zustand(taste) = (INP(513) AND bitwert(taste + 4)) / bitwert(taste + 4)
  PRINT "Taste"; taste; ": ";
  IF zustand(taste) = 0 THEN PRINT "AN " ELSE PRINT "AUS"
 NEXT
LOOP UNTIL INKEY$ = CHR$(27)


Wie gesagt bezweifle ich,dass das schneller geht. Die Werte für stellung müsstest du dann noch an deinen Joystick anpassen (welcher Wert wird für Vollausschlag nach links, rechts, oben und unten erreicht). Wie gesagt kann ich's im Moment nicht testen, aber ich kann mich erinnern, dass die Werte zudem stark schwanken und ich z.B. den Durchschnitt aus den letzten zehn Messungen oder so neghmen musste, damit die Anzeige der Potentiometerstellung nicht so stark flackerte. Etwas umständlich, aber auch in anderer Hinsicht interessant, da viele Arten von Licht-, Temperatur- und anderen Sensoren über die Änderung ihres Widerstands funktionieren und so ohne weitere Hardware direkt an den PC angeschlossen und über ein QB-Programm ausgewertet werden können.

Mich würde zudem mal interessieren, ob das unter XP noch läuft. Vielleicht probiert's mal jemand aus und schreibt hier was dazu.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum 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