Knopf drücken, und der Zählerstand im Programm erhöht sich
Knopf drücken, und der Zählerstand im Programm erhöht sich
Hallole an alle,
ich habe eine Frage.
Ich will in einemProgramm den Zählerstand erhöhen, wenn man einen Knopf drückt. Dieser Knopf soll aber ein Knopf ausserhalb sein, keine Taste auf der Tastatur.
Ausser das man die Tastatur aufmacht, und einen paralellen Anschluß von einer Taste macht gibt es wohl noch bessere Lösungen denke ich.
Danke schon mal im Vorraus.
ich habe eine Frage.
Ich will in einemProgramm den Zählerstand erhöhen, wenn man einen Knopf drückt. Dieser Knopf soll aber ein Knopf ausserhalb sein, keine Taste auf der Tastatur.
Ausser das man die Tastatur aufmacht, und einen paralellen Anschluß von einer Taste macht gibt es wohl noch bessere Lösungen denke ich.
Danke schon mal im Vorraus.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
- mueckerich
- Beiträge: 220
- Registriert: 13.09.2004 11:33
- Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad
Exaktomente, Taster neigen zum prellen, das bedeutet wenn man eine Taste drückt kommen mehrere Impulse an. Darum sollte für eine anständige Funktion schon noch etwas Hardware mit eingebaut werden. Die andere Variante wäre dann die Softwaretechnische Lösung mittels eines Timers, dann muss das Signal x Milliskunden stabil anstehen um gültig zu sein.Falko hat geschrieben:>>> Am besten lädst du dir die MVCOM runter (wenn du sie nicht schon hast) und frägst z.B. den Eingang "CTS" ab. Mr. Green
Nur mit MVCOM und CTS abfragen allein ist es nicht getan
Gruß Falko
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Hey Leute,
geht auch viel einfacher. Jeder Gameport hat schon (entprellte) "Knopf" Eingänge. Die lassen sich ganz leicht abfragen. Billig Joystick kaufen und die "Knöpfe" verlängern. Man benötigt nur einen 15 pol Steckern, benutzt dort Pin 2 und Pin 4 für den Taster und das Programm funktioniert...
Schaltplan für Joystick 1
http://www.karlrupp.net/de/elektronik/c ... c=2&item=2
Gruß Michael
geht auch viel einfacher. Jeder Gameport hat schon (entprellte) "Knopf" Eingänge. Die lassen sich ganz leicht abfragen. Billig Joystick kaufen und die "Knöpfe" verlängern. Man benötigt nur einen 15 pol Steckern, benutzt dort Pin 2 und Pin 4 für den Taster und das Programm funktioniert...
Code: Alles auswählen
x = 1 ; bis 4
Ergebnis = JoystickButton(x)
http://www.karlrupp.net/de/elektronik/c ... c=2&item=2
Gruß Michael
Working on
- LibSGD - MP3D Engine - 
Hallo mpz,
danke für deinen Tip. Ich denke wohl das mit dem Joystick ist die beste Lösung. Mein Laptopp hat zwar solch einen Anschluss - ist wohl aber eher der Videoausgang denke ich mal ( hab den noch nie benutzt ).
Aber wenn ich dann einen USB-auf-Gameport-Adapter mir zulegen würde ( freie USB-Anschlüsse habe ich ja ), sieht dann der Code auch noch so aus was das Programm angeht?
Ich habe mir mal einen Zähler programmiert - bei der Betätigung von der Esc-Taste wird der Zähler immer um eines erhöht ( wäre dann die Radikallösung wenn es nicht hinhauen würde [natürlich nicht an meinem Laptopp
]).
danke für deinen Tip. Ich denke wohl das mit dem Joystick ist die beste Lösung. Mein Laptopp hat zwar solch einen Anschluss - ist wohl aber eher der Videoausgang denke ich mal ( hab den noch nie benutzt ).
Aber wenn ich dann einen USB-auf-Gameport-Adapter mir zulegen würde ( freie USB-Anschlüsse habe ich ja ), sieht dann der Code auch noch so aus was das Programm angeht?
Code: Alles auswählen
x = 1 ; bis 4
Ergebnis = JoystickButton(x)
Ich habe mir mal einen Zähler programmiert - bei der Betätigung von der Esc-Taste wird der Zähler immer um eines erhöht ( wäre dann die Radikallösung wenn es nicht hinhauen würde [natürlich nicht an meinem Laptopp
Code: Alles auswählen
Enumeration ; Windows
#Hauptfenster
EndEnumeration
Enumeration ; Gadgets
; Hauptfenster
#Hauptfenster_txt_startzeit
#Hauptfenster_txt_startzeitwert
#Hauptfenster_txt_jetztzeit
#Hauptfenster_txt_jetztzeitwert
#Hauptfenster_txt_zeitdifferenz
#Hauptfenster_txt_zeitdifferenzwert
#Hauptfenster_txt_automatikzaehler
#Hauptfenster_txt_automatikzaehlerwert
#Hauptfenster_txt_tastaturzaehler1
#Hauptfenster_txt_tastaturzaehler2
#Hauptfenster_txt_tastaturzaehlerwert
EndEnumeration
Global zeitl.l
Procedure Open_Hauptfenster()
If OpenWindow(#Hauptfenster, 500, 500, 300, 150, "Zaehlfenster", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
EndIf
If CreateGadgetList(WindowID(#Hauptfenster))
TextGadget(#Hauptfenster_txt_startzeit, 10, 10, 50, 20, "Startzeit")
TextGadget(#Hauptfenster_txt_startzeitwert, 150, 10, 350, 20, "444")
TextGadget(#Hauptfenster_txt_jetztzeit, 10, 30, 50, 20, "Jetztzeit")
TextGadget(#Hauptfenster_txt_jetztzeitwert, 150, 30, 300, 20, "")
TextGadget(#Hauptfenster_txt_zeitdifferenz, 10, 50, 250, 20, "Zeitdifferenz")
TextGadget(#Hauptfenster_txt_zeitdifferenzwert, 150, 50, 300, 20, "")
TextGadget(#Hauptfenster_txt_automatikzaehler, 10, 70, 200, 20, "Alle 5 sek um 1 erhöhen")
TextGadget(#Hauptfenster_txt_automatikzaehlerwert, 150, 70, 300, 20, "")
TextGadget(#Hauptfenster_txt_tastaturzaehler1, 10, 90, 90, 20, "Tastaturzaehler")
TextGadget(#Hauptfenster_txt_tastaturzaehler2, 10, 110, 100, 20, "(Esc Taste drücken)")
TextGadget(#Hauptfenster_txt_tastaturzaehlerwert, 150, 90, 100, 20, "")
EndIf
EndProcedure
Procedure hauptprogramm()
Static zeitl.l
Protected quit.l
Protected EventID.l
Protected EventGadget.l
Protected EventWindow.l
Open_Hauptfenster()
zeitl.l = ElapsedMilliseconds()
startzeitl.l= ElapsedMilliseconds()/1000
startzeits.s=FormatDate("%dd:%mm:%yyyy %hh:%ii:%ss",Date())
automatikmengel.l=0
zaehlerl.l=1
ausgleichl.l=-2
tastaturmengel.l=0
AddKeyboardShortcut(#Hauptfenster, #PB_Shortcut_Escape, 9999)
Repeat
EventID = WaitWindowEvent(100)
EventGadget = EventGadget()
EventWindow = EventWindow()
MenuID = EventMenu()
Select EventID
Case #PB_Event_CloseWindow
Select EventWindow
Case #Hauptfenster : quit =1
EndSelect
Case #PB_Event_Menu
Select MenuID
Case 9999
tastaturmengel.l=tastaturmengel.l+1
tastaturmenges.s=Str(tastaturmengel.l)
EndSelect
EndSelect
If ElapsedMilliseconds() > zeitl.l
zeitl.l = zeitl.l + 1000
jetztzeits.s=FormatDate("%dd:%mm:%yyyy %hh:%ii:%ss",Date())
jetztzeitl.l=ElapsedMilliseconds()/1000
zeitdifferenzl.l=(jetztzeitl.l-startzeitl.l)
zeitdifferenzs.s=Str(zeitdifferenzl.l)
automatikzeits.s="5"
automatikzeitl.l=Val(automatikzeits.s)
If zeitdifferenzl.l-automatikzeitl.l*zaehlerl.l=0
ausgleichl.l=0
automatikmengel.l=automatikmengel.l+1+ausgleichl.l
zaehlerl.l=zaehlerl.l+1
automatikmenges.s=Str(automatikmengel.l)
EndIf
Debug tastaturmenges.s +" " + automatikmenges.s; wenn angeschaltet, dann ist die Zeitdifferenz manchmal um 1 sekunde falsch
SetGadgetText(#Hauptfenster_txt_startzeitwert,startzeits.s)
SetGadgetText(#Hauptfenster_txt_jetztzeitwert,jetztzeits.s)
SetGadgetText(#Hauptfenster_txt_zeitdifferenzwert,zeitdifferenzs.s)
SetGadgetText(#Hauptfenster_txt_automatikzaehlerwert,automatikmenges.s)
SetGadgetText(#Hauptfenster_txt_tastaturzaehlerwert,tastaturmenges.s)
EndIf
Until quit=1
EndProcedure
hauptprogramm()
End
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
externe spielgeräte gibt es eigentlich nur noch für USB...
nen joystick mit 15pol musst du schon aufm flohmarkt suchen.
du hast nichts erzählt über die sonstigen umstände der anwendung..
also, je nachdem, was du machen willst,
du kannst dir nen gamepad oder joystick für usb kaufen,
das ding auseinanderschrauben und jeden der feuerknöpfe mit nem zusätzlichen 5m-kabel versehen.
dann kannst ne gameshow damit ausstatten.
nen joystick mit 15pol musst du schon aufm flohmarkt suchen.
du hast nichts erzählt über die sonstigen umstände der anwendung..
also, je nachdem, was du machen willst,
du kannst dir nen gamepad oder joystick für usb kaufen,
das ding auseinanderschrauben und jeden der feuerknöpfe mit nem zusätzlichen 5m-kabel versehen.
dann kannst ne gameshow damit ausstatten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Hallole Kaeru Gaman,
ich will eigendlich nur das was ich am Anfang schon geschrieben habe.
"Wenn ich ausserhalb vom PC eine Taste drücke, soll der Zählerstand um 1 erhöht werden - ich will das nicht durch die Radikallösung: Tastatur auf - paralelles Kabel ran ..." machen.
Als Vorarbeit habe ich das jetzt im Programm mit der Esc-Taste gemacht.
Später will ich eben den folgenden Teil ( mit der Esc-Taste ) durch die "Taste ausserhalb Lösung ersetzen
Deshalb die Frage, ob das dann mit der PB-Abfrage
immer noch funktioniert wenn das über einen USB-Anschluss geht ( ich habe keinen Joystick zum probieren )?
Edit:
Laut der Hilfe über Joystick müsste ich das über diesen Weg hinbekommen ( für die Idee - das mit dem "Umweg Joystick" zu lösen nochmal Danke )
Ich möchte normale Taster verwenden - das mit dem "Prellen" werde ich schon in den Griff bekommen.
ich will eigendlich nur das was ich am Anfang schon geschrieben habe.
"Wenn ich ausserhalb vom PC eine Taste drücke, soll der Zählerstand um 1 erhöht werden - ich will das nicht durch die Radikallösung: Tastatur auf - paralelles Kabel ran ..." machen.
Als Vorarbeit habe ich das jetzt im Programm mit der Esc-Taste gemacht.
Später will ich eben den folgenden Teil ( mit der Esc-Taste ) durch die "Taste ausserhalb Lösung ersetzen
Code: Alles auswählen
...
...
AddKeyboardShortcut(#Hauptfenster, #PB_Shortcut_Escape, 9999)
...
...
MenuID = EventMenu()
Select EventID
...
...
...
Case #PB_Event_Menu
Select MenuID
Case 9999
tastaturmengel.l=tastaturmengel.l+1
tastaturmenges.s=Str(tastaturmengel.l)
EndSelect
...
...
...
Code: Alles auswählen
x = 1 ; bis 4
Ergebnis = JoystickButton(x)
Edit:
Laut der Hilfe über Joystick müsste ich das über diesen Weg hinbekommen ( für die Idee - das mit dem "Umweg Joystick" zu lösen nochmal Danke )
Code: Alles auswählen
If JoystickButton(1)
MessageRequester("Info", "Button 1 has been pressed", 0)
EndIf
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Hallo,
ich hatte mir Anfang des Jahres für 13 Euro bei Karstadt ein USB-Gamepad gekauft (Wollte damit Resident Evil auf PC zocken). Man kann alle 12 Knöpfe problemlos abfragen und die Tasten sind meiner Meinung nach schon entprellt. Vermutlich gibt es sogar noch billigere Lösungen...
Gruß Michael
ich hatte mir Anfang des Jahres für 13 Euro bei Karstadt ein USB-Gamepad gekauft (Wollte damit Resident Evil auf PC zocken). Man kann alle 12 Knöpfe problemlos abfragen und die Tasten sind meiner Meinung nach schon entprellt. Vermutlich gibt es sogar noch billigere Lösungen...
Gruß Michael
Code: Alles auswählen
x = 1 ; bei einem Gamepad sogar bis 12
Ergebnis = JoystickButton(x)
Working on
- LibSGD - MP3D Engine - 
