Knopf drücken, und der Zählerstand im Programm erhöht sich

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Knopf drücken, und der Zählerstand im Programm erhöht sich

Beitrag von HemSA »

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.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

jap, sowas läßt sich über die ports machen, LPT oder COM.
insofern ist das eine frage für die Hardware & Elektronik-Ecke.

ich verschiebs mal.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Hi,
da ich mich gerade etwas mit dem RS232 (COM-Port) auseinandergesetzt habe ...

Am besten lädst du dir die MVCOM runter (wenn du sie nicht schon hast) und frägst z.B. den Eingang "CTS" ab. :mrgreen:
v6.00
Benutzeravatar
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:

Beitrag von Falko »

>>> 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 :mrgreen:

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

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 :mrgreen:

Gruß Falko
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.
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Benutzeravatar
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

Beitrag von mpz »

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...

Code: Alles auswählen

x = 1 ; bis 4
Ergebnis = JoystickButton(x) 
Schaltplan für Joystick 1
http://www.karlrupp.net/de/elektronik/c ... c=2&item=2

Gruß Michael
Working on :lol: - LibSGD - MP3D Engine - 8)
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

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?

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

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

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

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 
        
     ...
     ...
     ...
Deshalb die Frage, ob das dann mit der PB-Abfrage

Code: Alles auswählen

x = 1 ; bis 4 
Ergebnis = JoystickButton(x)
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 )

Code: Alles auswählen

If JoystickButton(1)
        MessageRequester("Info", "Button 1 has been pressed", 0)
EndIf
Ich möchte normale Taster verwenden - das mit dem "Prellen" werde ich schon in den Griff bekommen.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
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

Beitrag von mpz »

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

Code: Alles auswählen

x = 1 ; bei einem Gamepad sogar bis 12
Ergebnis = JoystickButton(x) 
Working on :lol: - LibSGD - MP3D Engine - 8)
Antworten